Lift Buttons and Requirement Tracing

Sometimes everyday items teach us a lot. All we need to do is pay attention. Most of the time we are like walking robots and letting our subconscious mind operate us. Our office has 8 lifts, 7 for everyone of us and 1 is a service lift. In software engineering one of the major activity is requirement tracing. It is a boring activity but it has to be done. In my case I was part of medical application development for cancer treatment, tracing has to be done religiously. If we don’t do that with care, someone’s life is at stake. So everyone of us are very careful about it. During this entire process it never occurred to me what would be the consequence if the tracing was not done with care.


Ok let me get to the story. Recently one evening I was standing in the lift lobby. I pressed the lift button to get to another floor. For some reason the lift button didn’t take my request. I came to know because the lift button didn’t light up. I tried to press a bit more, it still didn’t work. I just went to another lift, pressed the button and it worked. While waiting for the lift to arrive, suddenly the engineer inside me woke up, all these buttons have Braille letters written (up button has up written in braille and down as d{n in braille) so a blind person can operate the lift. But if the button didn’t take the request how the blind person would know? he cannot see the light in the button. I thought the designers should have given an audible alert (acknowledging the request) so a blind person would know the button press worked. Then the lift came and I entered the lift. I saw the buttons inside the lift also had Braille inscriptions. But when I pressed the buttons there it was an audible alert. The request was accepted visually via the light and audibly by the bell sound.

Now I hope I understood the problem. Most probably the lift designers got a requirement that “a blind person should be able to operate the lift”. They did design the operation properly. All the places where a person will interact with touch will have Braille inscriptions and all the feedback will be given back audibly. I can hear the bell when a lift arrives, when someone presses the button inside the lift & many other instances. The team which did the external interface (lobby request buttons) forgot the audible alert somehow. You cannot expect people to remember everything, that’s why we write things down and follow the document process in engineering.

In software or system design such things are bound to happen. To avoid such inconsistencies we do follow a process called requirement tracing. I won’t go in detail what requirement tracing is about(It is boring). In short we take the high level requirement and trace it below in the hierarchy and make sure the design/implementation is consistent. If not done the result is a system that is incomplete.

The lift button taught me the effort I spent doing the requirement tracing was useful and worth the time spent.


Look after yourself – Your family and friends need you

Recently I attended the funeral of my maternal uncle. He passed away at the age of 54 due to a sudden cardiac arrest. He was not sick, was not admitted to hospital and all happened in just an hour’s time. It is only during a funeral I feels life is too fragile. Once I come out of the ceremony I get back to the regular life. This time I thought of writing this up. I attended my sisters FRCS admission ceremony at The Royal College of Physicians and Surgeons of Glasgow. Being an engineer I was fascinated to hear the challenges from the doctor and medical fraternity. The President of the college gave an excellent speech regarding the challenges that the doctors face and how to approach them. But I liked the last thing he mentioned in his speech. He said something similar to “Every professional should take care and look after oneself. The world always needs you as a professional (engineer, doctor, businessman etc.,) but your family and friends need you as a person”. This is very important. As a professional we are taught from the very beginning to work hard, be ambitious, go that extra mile, aim for perfection, achieve our goals, aim high etc., But there is a price for everything. Don’t pay your life as a price. There are so many books written on this subject. I am going to take only three things that I felt as important.

Share your burden

There is a famous saying “If you want to go fast then go alone but if you want to go far then go together”. Often as a professional we don’t delegate things. I am not saying delegate everything and sit idle. I mean there are lot of activities that can be delegated to people. And there are people who are longing for trust and responsibility. Trust the people, in my experience most of the people are trustworthy. If someone breaks it learn the lesson and move on.

Your current speed is OK

In today’s time, social media portrays something like everyone is successful, people are moving very fast, someone achieve a lot at much younger age etc., This brings in lot of anxiety and often one feels am I going slow? And in the name of speeding up one starts to spend more time on the ambition. There is no problem in spending time for the ambition. But if you exhaust all your time towards your ambition then when will you LIVE. And when you reach the ambition with whom will you celebrate. I feel the current speed at which you are going is OK. Even if you want to speed up do it in steps. Don’t accelerate too hard.

Take time out for yourself

In automobile we have brake, if you ask someone why do we have a brake? the standard answer is “to slow the vehicle or stop the vehicle”. But in reality the brake is there so that we can drive faster. The high speed is possible because of the brake. In life too the small break (vacation) that we take is to move faster. But most of us think if I take time out what will happen to all those responsibilities that I hold. Who will do all those work? Won’t I lag behind others in this big race? But in reality a short break will clear up your mind, let you move faster and get your mojo back. So take time out for yourself.

Value you life over all others. As I said in the beginning your family and friend need you as a person.


Conflicting Requirements – Interesting Solution

Software architect’s job is interesting because often there are requirements that are conflicting with one another. As a software architect one has to come up with a solution that caters to both the requirements. And it is mostly a compromise that works. To give an example in the software world, People install an antivirus to safeguard the computer. Every user installing such a software has 2 requirements

  • The software shall protect the user from all the malicious (ok most of the malicious) software in the world in real-time.
  • The software shall not slow down the machine for regular use.

This looks to be a simple requirements from user perspective. Actually this translates to something like this “When a program is started, the antivirus should find out that it’s not malicious as soon as possible (under a second)”. But to do a complete check it will take lot more time. If you choose one over the other the product will fail. A software architect often takes inspiration from other real world situations. So in this case it is similar to an airport security check. There the goal is

  • Make sure all the passengers are safe and are carrying only safe stuff.
  • Board the passengers as soon as possible.

The same dilemma exists here too. If the check is extensive the boarding time will increase. If the check is not extensive passengers might take some dangerous stuff into the flight. How did they solve it? did they optimize for one and discarded the other goal? No the airport designers came up with an interesting solution.

  • Put all the things to be checked inside your handbag and send for a x-ray check.
  • Then walk through metal detector.
    • If there is nothing detected then you just collect the bag and walk to your boarding gate.
    • If a metal is detected then the security personnel will do an extensive check.

This way the security is not compromised and at the same time the whole process is fast enough. Now coming back to our software example, how does an antivirus software achieve both requirements? Here is how (I am not a security architect, I am only writing this for an example)

  • Check the software whether it is safe
    • See if it is digitally signed
    • If the user has white listed
    • The program didn’t originate from internet
  • If any of the above condition is met then let it run
  • If not then take the program for an extensive check

This way a trusted program starts very fast while a suspicious program will take time. And as always nothing works for all the 100% use cases. You can read up an instance when this method failed. There is a lot from the real world scenarios and solutions.


My target for the Year – To be happy


This is that time of the year, when company sets target for the employees. I too get a set of targets for the year. Over years people have asked me regarding my targets and how is it going? I always give the same answer, My target is “To be happy”. If I am not happy then most probably things are going to fail. Some took the response seriously and some thought I am just joking. But in reality whatever I said was true. I have never explained to anyone what I meant by that target. I thought this year I will reflect on it and give some shape to it.

Money is not the target

Most people think having lot of money and all those things that it can buy will bring in a lot of happiness. Even I thought the same. Yes money brings in happiness, but the happiness is momentary. For a short period of time I feel happy when I have that new gadget or whatever I bought. After sometime I get used to it and they became a burden. That I have to carry around & look after. My sister Rasia once summarized it well “If you are really good at something then never do it for the money”. So money is not the target.

Power is not the target

For some power gives lot of happiness. Sitting in the room alone, signing the approvals, showing authority over others, questioning actions, being tough etc., I somehow never felt happy doing any of these things. So I feel power is not my target.

I feel power should be something that makes someone feel secure, makes someone feel at home, lends the shoulders to stand on, allows someone to fail, provides enough freedom etc.,

Being appreciated is not the target

Appreciation from another person gives a lot of happiness. And the best part is its free. But in reality people don’t appreciate others that easily (they have a high price for the appreciation). Even when the appreciation is given it is not genuine some times. How does one differentiate between genuine and fake appreciation? The person receiving the appreciation knows most of the time. I have also felt sometimes why this was appreciated while the other one went unnoticed. After sometime I came to a point where seeking others approval and longing for appreciation creates more stress. So working for others appreciation is not the target.

Winning is not the target

Winning gives some amount of happiness. Winning arguments, competitions, other people, projects etc., And during every win there is winner and a loser. Only if it’s a Win-Win situation then it is a happy moment. But in a Win-Lose situations if am the winner I feel the happiness and I also feel the pain of the loser to some extent. So winning everything is not the target.

Award is not the target

Yes awards, the nomination, evaluation by jury, those jazzy ceremonies, that Oscar moment, pose for the photograph and the final speech. It does give lot of momentary happiness. But once you have been there and done that, it becomes boring and repetitive. Over the years it just becomes a ceremony. Award is not the target.

Target is to be happy

Yes I can hear the question. if none of this give happiness what gives you happiness. I can define a happy moment something like “During that moment time just melts, I am not looking at the watch & I cannot quantify that time. Sometimes a day feels like a few minutes, an hour feels like few seconds”. When does such moment happen? I cannot say when such moment will happen, but I can say when such moments happened in the past. For eg

  • Coding the solution for a problem.
  • Helping someone understand a core concept.
  • Having a creative discussion with good people.
  • Admiring others elegant solutions to complicated problems.
  • Managing complexity and simplifying something.
  • Investigating the root cause for a problem.
  • Fixing something once for all.
  • Finding new ways, new avenues, new opportunities, new people.
  • Writing this blog.
  • Creating a software tool for self.
  • Conversing with great people through a book.
  • See a solution evolve from a small start over time.

When I wakeup in the morning I seek such moments, if I find them quite often then my happiness quotient increases and the year becomes a successful year. If not the year turns out to be a failure. So that target is to be happy.


Upgrading my desktop machine


I myself and my tech guru Nirmal assembled a machine back in 2009. It is a Core2 duo E7500, Gigabyte G41, 2GB RAM, Intel on board X4500 graphics, 7200rpm 500GB Seagate HDD and normal ATX case. Even though I hated that big case, it was running win7 32 bit fine. Recently I upgraded the machine to Windows 10 64 bit. And the machine started to show its age. It was sluggish, YouTube can play only 480P and visual studio was crawling. My first option was to sell this machine off and buy a new one (It has served me 8+ years without any major problem). Assembling a machine is always done for a need. In my case when I assembled the machine I wanted it to run for a long time. So I just removed the thought about selling it and started to search for the root cause for the sluggishness. After some measurement I found out the root cause was the graphics card. Windows 7 gave it a rating of 1. In addition to this 2GB has become quite less for a Windows 10 64 bit.

I went in search of a graphics card that can replace my onboard card. I didn’t want to buy a graphics card for gaming. I found a zotac nvidia 210 card for 1200Rs and additional 2GB of DDR2 RAM for 745Rs. To my surprise I also found an Intel xeon quad core L5420 with 12MB cache for 800Rs (a core 2 quad Q9650 costs close to 8000 Rs). Even though the xeon was for Socket 771 with a little bit of hack it can be used inside a socket 775 motherboard. I upgraded the processor, RAM and the graphics card. The processor gave big boost in the performance and also reduced the power consumption from 65W to 50W. The graphics card takes care of the media playback and graphics well. The additional RAM gave extra breathing space for the Windows 10 64 bit. The machine is running fast enough and youtube is back to 1080p.

The moral of the story is, a big ATX case and all that assembly might look ugly, but when it comes to upgrading and saving our hard earned money there is no match. Cashify gave an estimate of 1000Rs for my machine and building a similar machine would have cost me somewhere around 20K. I think with this small upgrade of 2745 Rs I saved some 15K (building a new machine from scratch). I hope the machine serves me some more years.

First IOT home project – Bus announcement system

Recently my daughter’s school came up with some fancy application called falcon parent. It basically provides tracking of the school bus and the student’s commute information. The application is quite good. It provides

  • Live tracking of the bus location on a map
  • Send alert once it is near to the boarding point
  • Send alert about the student boarding and alighting

Initially I check the app and alert my family members when the bus is nearby. Engineers in general have a common trait, they come up with the most complicated solution so that they need not do the simple thing (basically laziness). In my case I wanted to automate my work (alerting the family regarding the bus). All solutions (journey) start simple.

Simple Solution

I have tasker for android(the app I don’t regret paying for) & NotificationListener plugin. I did the following

  1. Intercept the notification from falcon app in my phone.
  2. Use Google TTS and speak out the notification.


Simple thing worked fine. But it works in my phone and if I leave early to office the alert was of no use to me and my family. Actually during an official interview presentation my phone spoke “Fathima boarded the bus” in full volume.


It works only in my phone

I thought the solution should work independent of my phone. Then I remembered my sister’s galaxy note that I spoiled (tried to replace the glass and burnt the display). No one was using it. Everything works but the display was unusable (became black & white). I thought just move the solution to that phone and it works independently. But past always haunt the present solution. It had android 4.1 and notification intercept is not supported. Either I have to root or find another alternative. At last PushBullet came to my rescue. It can intercept pushbullet message and trigger an action in tasker based on a trigger word. The solution became

  1. Intercept the notification from falcon app in my phone.
  2. Send a message to galaxy note via push bullet.
  3. Based on a trigger word the galaxy note will trigger an action.
  4. The action use Google TTS and speak out the notification.

Usability study

I thought everything was fine. I kept pestering my mother, wife & sister regarding the feedback. They said it was ok. But the Google tts announcement was like our railway station announcements. People just understood that the system is trying to tell something and ignored it most of the time. After doing some study and breaking my head, I found that we can identify known music easily even with lot of noise. Now I tweaked the solution like

  1. Intercept the notification from falcon app in my phone.
  2. Send a message to galaxy note via push bullet.
  3. Based on a trigger word the galaxy note will trigger an action.
  4. The action use Google TTS and speak out the notification.
  5. Based on the type of notification play a known music(for eg airtel ad, bond theme music, MI theme music, bus honk)

Sustaining the solution

I thought all is fine the system is working fine. Now on hearing the bus honk my kids hurry and go down to catch the bus. After couple of days I checked and found that the phone switched off due to low charge. Initially I thought of keeping the phone always connected to the power (battery might go off soon) or to save the battery I have to charge it manually. But like I said earlier the laziness kicked in again. I wanted a solution that will charge automatically and also save the battery. Again I had a Kankun sp3 smart plug lying around for some time without any use. That came to my rescue. I did the following to charge the phone

  1. Connect the smart switch to wifi with a static IP.
  2. Installed a REST api inside the smart switch (Thanks to Hackaday) .
  3. Connect the phone charger to smart switch.
  4. Tasker switches the charger ON (using the REST api) when the battery level is <50%.
  5. Tasker switches the charger OFF (using the REST api) when the battery level is 99%.

Now the automated solution is part of our day to day activities. The system just works now. May be some surprise might come in future. Cheers.


Subtle things in SCRUM – 3 Testing teams

This is another aspect that we discovered over a period of time. At the start once we decided to follow scrum, we took each of the team, trained the team regarding scrum & team lead were trained to be a scrum master. Then one fine day we decided that everyone (dev & test) will follow scrum. A typical scrum team is self organizing. Team members pick up the task from the sprint backlog and burn them during the sprint. Each team works for the success of the sprint and adds a shippable increment to the component. And at the SOS (scrum of scrums) level all teams add a shippable increment to the product. This is the ideal situation that every one of us expected.

The reality was something different. At the end of the sprint we added an increment but it was not shippable. The bugs were found after the sprint delivery. The moment we had substantial number of bugs it cannot be called as a shippable increment. After some brainstorming we found the root cause. We took the conventional team setup and converted them to scrum teams. So we had development teams and testing teams. The development teams concentrated on adding new features. The testing teams took the last sprint delivery and tested the software. The target for the development team was to add more and more features. And the target for the testing team was to find all the bugs. Since the testing happened in the next sprint a sprint delivery became a shippable increment only after spending 2 sprints. We wanted to shorten this to a single sprint.

The solution we followed was to merge the testing and development teams together. Now a typical team contained a set of developers and testers. During the sprint the development and testing happened in parallel. Teams ensured that the bugs were resolved within the sprint. Those bugs which cannot be solved in the same sprint were scheduled in the following sprint. Now over a period of time the increment we added in a sprint became shippable increment. The lesson we learned was “development & testing goes hand in hand & scrum teams are cross functional”.