Learning to drive

Kent Beck gives a good introduction to adoption of XP through an analogy of learning to drive. A brief extract can be found here. The learning to drive analogy is applicable to any discipline, where the instincts have to take over conscience in other words the motor/muscle memory will play a bigger part than a conscious effort, but when demanded we need to rewire our learnings. Music is also analogous to this.

The steps in becoming a good in something.

Start immediately

Procrastination affects a lot of us and one of the key catalyst for someone to procrastinate is the idea of perfection. This is because of the fear of failure and being judged, so people end up reading and studying about something instead of learning by doing. Unless we get into something mission critical or any action that will cause any irreversible consequence then we should not hesitate to start. By starting immediately, we will be forced to learn the absolute minimum that is required to start instead of getting equipped with a world of knowledge.

Be predictably slow at first

There is a sense of satisfaction in moving up the levels, so people immediately step up their levels without getting a good understanding of what they learnt. When I was learning to drive, I was never allowed to shift to the 3rd gear until I was able to drive the vehicle without getting stalled in the lower gears. Same goes to my piano tutor who never allowed me to step up the tempo until I never missed a note. This made sure that whatever I had got it into my head is done the right way, I was very angry with my tutors as they never allowed me to step up quickly but in hindsight it makes sense; unlearning something learnt wrong takes a long time than learning it to do the right way.


When stepping up, change only one parameter at a time

We learn more and more faster and deeper when we are able to understand the effects of our actions. The more we are able to identify the cause and effects, the better is our ability to sense the patterns and apply learnings at a more abstract level. Stepping up the learning through one parameter a time allows us pinpoint the cause and effect, helping us to save energy. Someone shifting to 3rd gear and also driving in rain for the first time on a slippery road will not lead to effective learning.

Once comfortable, keep getting exposed to new conditions.

When we are comfortable in a new skill, chances are high that we get stagnant. Routinely exposing us to newer challenges helps to sharpen as well as prepare us for unknowns. The comfort zone is where the instincts take over the conscience, but when the situation demands we need to switch back to the conscience and make quick judgements from our experience. Good drivers are not usually worried about bad weather or poor visibility, instead they know when to stop driving and when to carry on.

Listen to others, over time we may pickup bad habits.

Habits change as soon as the feedback stops, I used to drive without co-passengers for an extended period of time and developed a tendency to jump over potholes and speed breakers. This annoyed my co-passengers and until I heard from them, I never realized that I had developed a bad habit. It is very difficult to sustain best practices or get a new one, getting a mentor or coach or even just plainly listening to other’s observation will help us a lot.

Never underestimate the power of a coach or a mentor

The coach in the operating room published by the New Yorker magazine tells about how an accomplished surgeon realised that even the best tennis players had coaches and decided to take a coach with him to the operating room. The doctor was doing a thyroid operation which he has done many times and the coach had never done that type of surgery so there was no expectation on useful feedback. At the end of the surgery the coach surprised with a lot of detailed observations which were overlooked and missed by the team. If we are to be professionally better at something then get coaches, does not matter who we are or how successful we are.

When learning stops, we regress

Conspicuous Busyness

During my visit to a library in my neighbourhood, I usually see two contrasting groups. One is a group of retired men mostly in their 60’s and 70’s and other is a group of college students. The contrast is not in the age but the life in the togetherness of these people. The retired men’s group is lively, people are chatting and arguing, cracking jokes at each other. The student’s group on the other hand was too silent with sporadic comments like ‘Hey check what I have just shared’. The student’s group was hanging out in the virtual world in texts and memes.

We always seek joy, we will always find ways to remain happy but we give more weightage to frivolous joy than momentous ones. Short term goals or immediate gratification gives joy because of the reward cycle of our brain; we are trained to get satisfaction by being busy and believe we can get great output just by rote activity, just a vestige of industrial revolution practices.

I read this story somewhere sometime ago — A poet who has not produced much in the recent times took a boat and rowed to the middle of a lake. He thought the distance from the people and quiet atmosphere will lead him to good train of thoughts. It was nightfall so he lit a candle, pulled out his notebook to write but no thoughts occurred to him. He was flipping between his old poems for inspiration and also closed his eyes tyring too hard to concentrate. Hours went by and nothing happened, he thought reading some book will help him and started to read, but it got windy and he had a hard time to keep the candle from getting out. After several minutes of struggle to keep the candle burning, he gave up in frustration and the wind blew the candle out.

moon-165487_640Until the candle was burning bright, he was missing a beautiful sight of the full moon which gracefully illuminated the entire lake, the valley and the surrounding hills. That whole evening he had been waiting for an inspiration to write and it was just lying in front of him. The wind by blowing out the candle, did the trick; the sight in front of him was so spectacular that it inspired the poet to produce one of his greatest works.

 ‘I am not producing anything creative, so why ask me not to browse and consume information always? I enjoy this more than our conversations’ — This is a common retort when you remind people to be present in a situation and not fiddling with their gadgets. It is gadget to be very specific as books are not very destructively distracting, books cannot cater to a short attention span and can not provide on demand entertainment.

A study was done on rats for addictive behaviour, a lever was provided in a cage which provided a dose of cocaine when pulled. On discovering this, the rats kept pulling the lever for more and more doses of cocaine until it killed them. Our neural pathways for reward is not very different from that of rats, we would soon get hooked on to joyful behaviour even though it will cause us harm in the long run. The only way to get away from this is to consciously avoid the ‘pull to refresh’ hooks in the gadgets and set some quality time for leisure. Fortunately delayed gratification is an acquired skill, there are enough studies like ‘The standford marshmallow’ experiment suggest that people disciplined enough are way more successful.

Leisure is one of the best rewards, it is very hard earned and should be spent wisely. There was once a time when people predicted that the world will be with so many machines that people can accomplish their work within few hours of work everyday and pursue their hobbies; fast forward to the digital revolution, the work and leisure no longer has boundaries, in fact there are no boundaries and distances at all.

If socializing & leisure is forgotten due to blurred boundaries then the only reward we have is to keep ourselves busy. We reach out to our pockets to consume information to gratify the need to have a sense of usefulness. That leads us nowhere, it is just being busy for the sake of busyness, some sense of self worth.

It is okay to say that we have free time, of all the years I spent when I look back; the only thing in memories are those mindless chats, sports, games, hobbies etc. None of the memories like going through social feeds for hours together is so memorable, those seem like a blip when looking back compared to the memorable ones however small in duration they were, seems very vivid. By being deliberately busy we are just passing time, not living.

Dev huddles – The andon cord of software development

HelpToyota introduced the andon cord in their manufacturing lines to help people to stop the production line and alert the people around if an abnormal situation arises. It is a cord that hangs above the head within easy reach of any to help to immediately gather the attention of the others. While the rest of the industry was treating production line is something that never should be stopped and let quality control take care, this one put power in the hands of people on the line to take a call to improve quality by attacking the problem at its source.

The idea then widely got adopted in different forms like ‘Help’ buttons in various manufacturing sectors. It was easy to adopt in manufacturing as we can see what is going wrong and gather together to immediately fix the problem. In software development it is not obvious when to pull the andon cord and how to collect thoughts of people on what to solve.


Dev huddles are the answer to the andon cord in software development. Huddles are very common in any team sports, team members quickly huddle to celebrate a goal or discuss a plan. The team also optimises over time to communicate very effectively in fewer words and quick time.

When to call for a dev huddle?
We need to call for a dev huddle when

  • Our programming has deteriorated from a flow to brute force or trial/error method. Manuals did not help to resolve and even a quick help from another team member did not help.
  • We find a badly developed code and need to bring it to attention of the team when it is still fresh in mind.
  • We are about to make a major change in the code base and every body needs to be aware of the incoming change so they are not surprised.

How to make sure that we don’t waste other’s time?

Team time interruption is expensive, so before calling for a dev huddle we need to make sure that we have all our show and tell pieces ready for discussion. One example is when stuck at a problem, quickly jot down the problem and the steps tried to resolve that did not work on the whiteboard in diagrams or words; then call for the huddle. If the resolution or direction is not found within 10~15 minutes, break the huddle to come and do a detailed research on the problem.

Why should dev huddles work?

Dev huddles work on the idea of crowd wisdom, the average output of a group is always higher than best individual in the group in most cases. Ideas & solutions can come from any one provided they are given a good explanation about the problem. Dev huddles also help in knowledge sharing in a terse & effective manner.

The big bridge that was replaced twice and no one noticed

I got a chance to walk on the Golden Gate bridge, could not stop admiring the beauty of the surrondings and the bridge. One can see what the bridge is subjected when taking a walk on this one, I arrived at one edge of the bridge when it was bright & sunny and by the time I reached the other end it was misty & foggy. It is constantly pounded by waves & high speed wind; and takes a lot of traffic. It left me curios to find the engineering behind it, after a while I stumbled on a documentary made by Nat Geo titled ‘Impossible bridges – Golden Gate’.

The engineers thought that it is impossible to build such a bridge because the water was too deep and winds were too fast and the distance is too long to cover. Even if built people wondered about how could it be sustained. Nat Geo’s documentary showed how the crew worked over the years to strengthen the bridge, rework the floor without disrupting much traffic flow. There were innovations like suspended traveling platforms to work on the cables. The bridge withstood an earthquake and was  strengthened to withstand stronger earthquakes. At the end of the documentary, the narrator mentions, he is sure that all parts of the bridge has been replaced at least twice but due to the engineers’ skill, people never knew that they are looking at a new bridge.

Golden Gate

The same holds good for long running software projects, many softwares over the course of time change so much internally based on the people working on it, which Richard Gabriel calls as Habitability in his book ‘Patterns of software architecture’. If the engineers who took over the maintenance of Golden Gate have not replaced the bridge over the course of time we would have a big heap of metal lying on the sea bed due to structural erosion. It is the same analogy that applies to software called ‘big ball of mud’ due to software rot.

The biggest reason given for software rot is that there is not enough time. Architecture is a long term concern, little beyond the learning horizon as mentioned by Peter Senge in his book ‘Fifth Discipline‘. We are not able to observe the effects of software architecture in the near term as there are very urgent business needs that keep coming up and they are never tangible like bridges; visualising them requires experience and skill. The advantage a software has is that it can be made more robust even after it has been built hastily.

How do we find that the architecture & design needs a revamp?

  • If the change to the software looks simple and trivial but takes a bafflingly disproportional amount of time to fix.
  • If it is difficult to visualise the code and explain to others in simple abstractions.
  • If a technology upgrade looks infeasible without a rewrite.
  • If there is too much dependency on individuals and context.

The revamp is not just about modular design & clean code but also adequate test coverage along with a robust continuous delivery mechanism similar to how the Golden Gate’s engineers used suspended traveling platforms to carry out their repair work on the cables without affecting traffic. A successful well maintained app that takes advantage of new technologies and changes hands would definitely been written many times over and no one would have noticed it.

How far can we pile on debt?

We are inept at perceiving the effects of debt, we grossly underestimate compounding factors and fall into a debt trap. Debt is tempting, it gives that edge to own things which is not possible now but only with the future effort that we can conveniently borrow and buy. There is a saying in Tamil, buying something in loan is like lighting a fire with borrowed hay but to repay it has to be paid in wood for same volume. If instant gratification takes priority then debt that needs to be repaid will hit us hard and bring us to a grinding halt. Corporates love debt, because with a lower cost of interest they will be able to create a high value output. This is where debt helps, if we are able to create something that is more valuable that can repay the debt with interest and still leave us with lots of money then debt is good.

Developers take debt analogy to code and create technical debt to get features fast to production, one major drawback is that most of us don’t understand monetary debt and its impacts well even though it can be quantified; but take decisions on technical debt which is difficult to quantify.

Let us have a look at an analogy, Neo has a trash can in his area that has to be cleared periodically. Clearing the trash can whether it contains little trash or full can of trash takes the same effort, so he prefers till the trash can fills up. The trash accumulates in a way that it doubles every day if not cleared. A new person Brio takes up the place of Neo, Neo explains that the first day only a gram of trash gets generated after clearing, but if left uncleared it doubles every day. He used to clear it every 10th day as it is around 500 grams by that time.

Brio observes that the trash piling up day to day is trivial to care about, around the tenth day he notices that trash is 500 grams and barely fills the can, he decides to come back 10 more days later forgetting the fact that it doubles. 10 days later what was a small can trash turns into an unmanageable heap of mess which is about 500 kilograms. The power of compounding is too easy to miss in the initial days, it will hit us hard who are used to linear maths.

Same is applicable for technical debts in an application. Tradeoff decisions have to be recorded and visited at frequent intervals to see if it is causing any harm than the convenience it provided. Technical debt also paves way for ‘Broken Windows’. Software development is a social activity, it will be very easy to make a broken window the new norm when code changes hands. Run your tech retrospectives; review code, design and architecture as an entire team at frequent intervals, that will help to manage technical debt better. Remember, it is not like corporate debt which is manageable by numbers.

The shoe that fits perfectly is forgotten

As a student getting a good pair of shoes was always a three way decision between cost vs comfort vs life of shoes. Often the comfort factor will be sacrificed to get a new pair and then the trouble starts, I will spend good enough time to adjust to the new pair. Not a single day will pass without the shoe bites bothering me, but the flip side is that I will take good care of my shoes. Whenever I pick it up to try to make any adjustments I also end up polishing the shoes. Once my feet got adjusted to the new shoes then I would stop giving a second thought about them, the last time I would have polished it was when I tried to make some adjustments to it. With less care given to it after it started fitting well, the shoe usually needed replacement well before its lifetime because of less care given to it.

The case is also similar to how people are treated professionally or personally, there is a tendency for people to devote attention to fix relationships with trouble makers and toxic people; but not give enough care to the ones who are fitting in to our sphere. There was an article from Forbes that people who stay at the same company for more than two years earn lesser than job hoppers whose performance was poor.


Why does this happen? We are not consciously geared to this behaviour, most of the time there would be short term priorities that will kick in which will grab more of our time that needs fixing; resulting in a state where the ones that are working for us well aren’t the one getting the attention. The squeaky wheels gets the attention, the aching body part gets the balm, the biting shoe gets the polish. Eventually we will get more reactive, rely on noise and markers to effectively function which is a very expensive lifestyle instead of preempting something and making course corrections.

We should aim to keep things noise free; be it people, career or possessions. Getting things done was one book which helped in channeling the energy to find the list of things that I had in mind and keep track of them. The five step process described in the book helps to move the chaos into order. Learn to capture all that needs care, clarify if there is an action needed, organize and review the priorities periodically and do things as per your priorities. Keep it stress free, you will learn to care for your shoes even when it fits perfectly.

Information Snacking

buddha-231607_640Still at my home town some people equate being fat to prosperity. A fat person is someone who had steady access to food even at times of drought and famine, hence dying of hunger was ruled out. People ate whatever they can so that starvation does not kill them. Food revolution increased the availability of food and people started to eat well; when the life expectancy of every one improved, obesity became an issue. People were now dying because of overeating, unhealthy snacking and not maintaining a healthy life style.

The same is applicable to information, the differentiation between wise and knowledgable is not understood well. Just few decades ago in India, information was flowing slowly through government run TV channels, newspapers and books. The commute times were shorter with predictable work schedules, leaving more time for interaction with people and also enough time to read. I vividly remember the elders at home reading a novel in the evening, weekends or while standing at a long queue. There were reading desks at home where people read something and make notes.

If you summarize a book, often you will end up with a few lines which was the message from the book, but it will have a deep meaning to us if we had come up with those lines after reading and summarizing our thoughts, than those lines arriving in tweet.

french-fries-461705_1280We are right now in the era of information snacking where we are increasing our knowledge to a great deal, learned to drink it out of a firehose but not able to apply it effectively when needed. More and more people are addicted to ‘pull to refresh’ and snack on one liners, emails are annotated with TL;DRs and prefer to read a lot of tweets than read a book.

Manage the distractions before you are ruled by them.

TV was cloud-709148_1280one big distraction which was overtaken by social media, staying away from this for quality information consumption and time for family is a difficult but not an impossible thing to do. It is like going to gym toning up the body complemented by a healthy diet. Start slowly by turning off all notifications, keeping only one or two channels like telephone as an instant communication system; in other words change to a pull mode than being pushed with information. Dedicate slots for reading books, newspapers or other things which has long text, periodically clear out the social media backlog; indulge yourself once in a while but come back to a healthy routine.

book-419589_1280Why read long texts? Reading has helped me gather thoughts, play thought experiments, ability to write & articulate well; beyond that it took my mind of the constant buzz that follows a work day. Maintain a list of books to read, motivate other friends to read and share your learnings and stories. There are so many books that are rich in content and only limited time to read, sharing the book experience with others is rewarding as we get lots of information from others in a condensed but more interactive form as well as encourage us to read more and share. Stay away from information snacking, it just feeds empty knowledge. Consume information with a planned diet.


Release planning unboxed


Release planning is largely an empirical activity. Capturing the requirements effectively is the first step. Capture the thoughts of product owner or client in a free flow, map them to user journeys and fine grain them to small requirement statements. Each of these granular requirements which can be expressed in a sentence or two will be the basic building blocks of the final product. It is popularly called as stories and getting them right is the first step of a successful release planning.

Visual triaging


Write each of the stories on to index cards or stickies, preferably colour coded based on parent features and put them up on a wall or a large table so that you can see all of them at once. This helps to see the spread of the requirements and allows to dive into deeper details for ambiguous entries.

If the ambiguity does not resolve with deep dives we quickly get the developers to do a spike (proof of concept) to validate our understanding. The proof of concepts have to be very quick but deep enough to provide us an understanding to estimate the effort involved.


When talking about sizing, people immediately try to force fit their stories into fibonacci series or arbitrary small, medium, large. Instead we need to create a real world analogy for sizing the stories as mentioned in one of my previous posts. The last few years I have been using Scooter, Car and Bus as my sizing references for stories; and as I expected most of my sizing meetings have shrunk to less than half of what it used to be when using fibonacci or t-shirt sizes. If you have outliers which do not fit in any of the categories we temporarily park that in a trailer or ship category if very large or in bicycle if it is too small. The outliers are revisited and the stories are rewritten to see how they can be fitted into the sizing slots. The very large stories always have been unpredictable and skew the time taken for a point metrics, so we have to break them before the end of the sizing phase.

Velocity estimation

Remove the sizing details from the stories, pick developers in a round robin fashion and let them pick what can be done in five ideal days. That is there are no meetings on that day, no holidays, high availability of all machines and tools, no dependencies.  The developers each should do around 5 iterations of picking stories and the result has to be captured like below.

Developer 1

Week 1 S,S,M
Week 2 S,S,S,S
Week 3 M,M
Week 4 L
Week 5 S,L

Developer 2

Week 1 S,S,S,M
Week 2 M,S,S
Week 3 M,S,M
Week 4 L,S
Week 5 M,M

When we collect all the developers’ estimate and average out, we will be able to come up with the ratio of S,M,L like 1:2:4 , 1:3:7 or anything but not necessarily fibonacci. If we had taken fibonacci there would be too many arguments whether a story is a 2 or 3, but we avoid that argument if we let the velocity estimate give us the ratio. The ratio then becomes the points for a size, if the ratio turns out to be 1:3:7 then our S is 1, M is 3 and L is 7.

Realism infusion

It is not possible to plan for work in ideal days; there will be meetings, holidays, sick time, vacations, down times etc. We need to account for those. If the velocity estimate which we can call it as raw velocity comes out to be 10 points per week then we deduct the appropriate numbers to get a highly probable velocity. Typically this works out to be around 70% of raw velocity but it purely depends on the teams.


Clients will always say that they want all the features they have envisioned, but there are many stories where an app ends up where most of its user use only the 20% of it, the remaining is a long tail with very little returns to the effort involved. The product owner has to come up with the must haves for an initial set of features. There are many popular techniques used, MoSCoW prioritization method is one that is frequently used. If there are many people who will prioritize then each of them should come up with their own priorities and the chief product owner takes a call with a common denominator. The explanation is simple but most of the clients struggle to come up with a prioritized list as the illusion is every thing is a priority.


The stories are sequenced against a weekly timeline put up on the wall or a large table. The stories are then picked up in the order of feasibility with priority given to difficult and important stories. This step will give us lots of options on the number of parallel streams of work that can be run, what are the dependencies between stories, the order in which the features can be completed, the team ramp up and ramp down plans. The kind of mix and match we can do depends on the granularity of the stories and the amount of dependencies between them.

After the last step has gone through few rehashing we will be able to come up with an initial release plan to start with, this plan should always remain as the reference and re-planning has to happen on a monthly or fortnightly basis to keep adapting to the learnings we get as move along. Many people treat the initial release plan as a sacred rigid plan but that was just a guideline to tell us how to approach development. It is a waterfall project if the initial release plan was delivered as is.

The lazy programmer

I was having a chat with an old time ThoughtWorks developer, the topic was trending towards voluminous work and long days at work. I interjected with the point that the developers should not be willing to work long and hard hours, instead they should be lazy so that there are better tools and automations coming out of them, rather than checking boxes on long todo lists for the day.

He thought for a while and then replied “You are right, the CruiseControl continuous integration tool was born out of laziness”. He went on to explain that one of the developers felt that it was too annoying to walk up to a computer, pull code out and run the build & tests. So the person put a build loop on that machine to do that task. Someone else put a web interface to it and there a new tool was born. It left a lasting legacy in the continuous integration space. (Cruise control home page).

Why do people relate long working hours to prosperity?

The industrial revolution required a good deal of unskilled labourers who were given instructions and repetitive tasks to be done. The more they do, the more money the company makes. So overtime was rewarded with more money and people tend to stay longer to get paid overtime. The invention part of automating the repetitive tasks were left to someone else, the thought of hard and long work is rewarding stayed on even though there was a chance of a new invention that could take this entire category of job away.

After many decades of advancements in the industrial space, automations have taken a majority of space. The place where the automation as of now is not able to get into are creative spaces or knowledge work. If a job requires more than few simple steps then it is beyond the mechanical skills and involves cognitive skills. The moment when even rudimentary cognitive skills are involved, then no longer any of those incentives and hour based pay work. It is explained well in the video created from the work of Dan Pink, the author of the book Drive.

Wisdom gets passed on through generations, bosses and workers alike, people were conditioned from the childhood that hard and long work is the only way prosper. When that person becomes the boss, demands the hours and when that person is the worker, obliges to it.

Programming is a step further, it involves complex thinking which requires us to bring deeper parts of our brain to work. Andy Hunt in his book The Pragmatic Programmer talks about L-mode and R-mode, which is about using our linear mode of the brain or the rich/random mode of the brain. Though there is value for linear mode, programming benefits a great deal from the R-mode. Staring outside the window, doodling, watching the fountain, a stroll could all be more productive activities than staring at the screen and furiously typing commands for long hours because new ideas pop out when you are least expecting and unprepared.

A programmer has to be lazy, should not jump into the task at hand instead approach programming with a mindset of ‘No code is the best code’. Laziness will make us look for to remove mundane repetitive tasks out of the way which will also pop up more creative ideas through R-mode. Workplaces should also help ease the norms of equating the number of hours in seat to productivity.

Push the problem out of your foreground mind, and just “hold it lightly”. Then go for a walk, etc. That’s when insights and breakthroughs come to me.— Henri Poincaré