Build it like a sports team

Is it easy to get a crash course in football by Pele or Maradona for a week and produce a world cup winning football team?

Answer is NO. Then why do lots of people in the corporate world think of hiring scrum trainers & expert developers to train their team for a week and then expect their team to be undergo a transformation at a magical scale?


German football team made it a point to transform their team and it took them a lots of years before they were able to reach the pinnacle. A quick side by side comparison of what is causing agile transformation to fail.


Football: Someone was there owning this entire transformation, the German football association spent a lot of time identifying talent in their teens and groomed them.

Office: In the corporate world switching jobs every few years have become common, but there is no passing on of the context, resulting in the new person taking charge, starting from all over again, as well as frustrating existing good performers who have to rebuild the perception.


Football: Players expecting state of the art training facilities, fitness programs and new shoes are not a luxury, it is a necessity.

Office: Computers have become so cheap compared to the salaries, yet the policy of providing the best tools and good work environment are archaic.

Coach vs Management

Football: Coaches are given their due powers to help the team achieve the goal. It is very easy for anyone to comment on how professionals should play their game, there would be no use adhering to the metrics if the team cannot win. Winning is the only measure for management.

Office: Often coaches are seen as part of the management or management tries to heavily influence coaching which results in a team which will work either for metrics or to please higher ups without the actual result that it had aimed for.


Football: Just the ability to kick the ball does not make a footballer. Training will be introduced to increase physical strength & stamina, better mental wellness, injury prevention, tactics and strategy.  A heavy investment is made in the training facilities.

Office: In the software industry a generation is about 2-3 years. Computer science degrees are nowhere near what is state of the art in the industry. At many places the on boarding process is either very shallow or not up to date with the recent developments, leaving people to learn most of the things hard way. Given too many things to learn and the information overload, this results in inefficient learning and application of knowledge on the job. We need to prepare people to find answers that are not available on Google.

Team composition

Football: Rookies don’t learn by watching greats from the bench, instead they play along with the veterans. Every sports team makes sure to have the right composition with a mix of rookies, emerging players and veterans. That is how they sustain a winning team.

Office: Architects and Leads often do not code or not part of the team every day, this means that most of the time the team just looks up to for advice or waits for reviews. There should be a good mix of people at all experience level so that there are enough people to try new things, enough people who have mastered few things and enough people who challenge change.

Above all – Persistence

Nothing in the world can take the place of persistence. Talent will not; nothing is more common than unsuccessful men with talent. Genius will not; unrewarded genius is almost a proverb. Education will not; the world is full of educated derelicts. Persistence and determination are omnipotent. The slogan ‘press on’ has solved and always will solve the problems of the human race. ~ Calvin Coolidge

Image courtesy of Salvatore Vuono at

Leave a comment

Filed under Help me help you, Workplace

Building applications ‘Ship Ready’

Last mile problem is ubiquitous. Most of the developers think that the deployment or production readiness is not their cup of tea and stay focussed at getting their output for an input given according to the specification. Usually the last week of the release is chaotic with many dry runs and hot fixes. It is so easy to avoid the last mile problem yet so many people avoid those ways. What if the inertia of setting up build scripts & configuration are taken away? Will it be easier for developers to build ship ready applications?

Spring Boot and Gradle is a great combo to get started in the morning and ship a prototype in the evening. Much of the inertia that is present in writing ant scritps and configuring a spring application is blown away by making very simple entries. Here are some examples that makes the life of a developer easy by eliminating the complexity involved in project setup and deployments.

gradle wrapper – This creates a wrapper script for gradle such that only the first developer who sets the project needs to install or have gradle on their machine. From the next developer onwards who checks out the code, they can start using gradle through gradlew script. No installations required except a JDK and a VCS.

gradle build – If the Spring Boot’s starter web is used then this creates a uber jar with an embedded tomcat and all the library dependencies. All we need to deploy is run ‘java -jar myapp.jar’ in the required locations. Configurations can be overridden either through command line arguments or through external property files.

gradle eclipse or gradle idea – Helps in setting up the project in IDE. Once imported in IDE running a web app in debug mode is just right click, debug application on the main class.

gradle bootRun – Command line way to quickly bring up the application and test it as a whole.

Building a 12 factor app with gradle and spring-boot is very easy and uses less effort. Get the project setup with this and pair it up with a continuous delivery tool, you get a ‘Ship Ready’ application right from the first day of development.

Leave a comment

Filed under Uncategorized

Engineering practices – What is that?

What does a boom in an industry bring in? It brings in a shortage of talent.

What does shortage of talent bring in? It brings in a great demand for the talent.

What does great demand mean in a shortage of talent? It increases the supply in an inorganic manner and inverse vandalism occurs.

In a country called Noviland, carpentry was an expensive business dictated by undersupply of wood as the wood cutters only had access to axes. This kept carpentry and arts related to wood accessible only to the elite and the academics who studied carpentry. This brought in many skilled and intelligent people to the field who were well respected and well paid, people were committed to workmanship. Even though the forest cover was huge in Noviland, technology of axes led to a limited supply.

A wood cutter’s daughter invents a circular saw that can be driven through the bicycle gears which helps to cut trees at 10 times the pace they were used to. Suddenly the supply of wood increased ten fold and there were not enough carpenters. The demand for carpenters grew way too much that it drove their paychecks very high, prompting people to switch careers. Those who learnt other trades, tools and works now did a simple study of hammer, nails & saw and jumped into the profession.

Maintaining old work was easy as everything was in place and simple maintenance tasks were all required to keep up. New work is were all the hell broke loose. People were now getting furniture that does not last long, wooden bridges collapsed on a few days of exposure to heat and rain. People who wanted to replace their furniture dreaded at the cost of replacement and replacement failures. There were way too many carpenters and finding passionate people was next to impossible. Carpentry became a high paying job where no passion or study was required, all it matters was to know about hammer, nails and saw. Some of them who did exceptionally well were immediately made a manager and given interns to manage thereby killing passionate carpenters in the interest of scale.

Software engineering in a few countries is at this state, merely having a crash course in Java and understanding of few libraries are enough to be called as a programmer. Programming is not just writing code, it is solving a communication problem which involves many aspects. Lots of productivity is lost because of the failure to understand and implement good engineering practices. Some people pick agile as a tool to enhance productivity but do nothing to improve the capability of the developers. There are so many practices which can help us develop and release software in days & weeks but many of us are still stuck at the timescale of months & years because of the ignorance of practices as well as reduced progression on the skill level.

Below is a table which helps us to find where we stand in terms of skills, I can say with confidence that even with 10 years of experience many of us will not rate ourselves proficient. We should let skill and passion dominate engineering fields.

 Table source:


Leave a comment

Filed under Developer, Workplace

Inbox (0)

The first time I created an email account, I subscribed for newsletters, turned notifications on all the accounts I created in the net and was happy to spend time reading the emails I received, still the number of emails were manageable. Fast forward to now, emails have grown to be a necessary evil. Lots of people whom I meet are finding it difficult to handle the volume of emails they receive. Since it is easy to create digital copies and apparently costs nothing to include another person in the email for Just FYI, people are given an information overload through emails. It is not uncommon to hear people saying they have 10,ooo+ unread emails in their mailbox.


Here are some simple rules I created so that my Inbox shows ‘Inbox (0)’ at regular intervals. It also helps me to quickly act on only the important emails when I check through my phone.

Newsletter subscriptions – Most of the sites where we use our email id, will by default have the newsletter option checked, we should make sure to uncheck it before creating new accounts. In case we accidentally subscribe to one it will still carry an unsubscribe link. Some email systems do not unsubscribe well, ruthlessly mark them as spam. It is our inbox and we have every right to deny entry to it.

Forums - These have to be filtered into a bulk folder like ‘forum/abc’, ‘forum/xyz’ depending on the no of forums and frequently read ones.

Notifications – Twitter, facebook, linkedin and many other accounts have email notifications, if we have the habit of using those accounts directly and frequently then we do not need the email notifications to be turned on.

Projects and distribution list – We will be part of the distribution lists of projects and business units, filter those into appropriate ones like the ones created for forums.

Finance - Create a filter for all financial transactions like payslips, transaction advices, statements. It should be a one stop folder to view the mails for all the transactions.

CC - The mails which we are CCed are an FYI which do not need any action, people also have a tendency to just add another person to CC; which we can read the subject line later and choose to read or drop.

Bookmarking – Time to time we get interesting links and forwards, instead of leaving them in the inbox to read later use a site that is helpful for bookmarking so that you can read them later.

With the above filter we can drastically reduce the number of emails that arrive at the inbox and we will be able to manage the lesser number of emails. The filters should be such that only the mails which are addressed to us in the ‘To’ field should be delivered in the inbox. Spend time at a manageable frequency to glance through the filters to triage them. Maintenance of the inbox is not an one time act, it is an ongoing activity

“Image courtesy of Patchareeya99 /”.

Leave a comment

Filed under Uncategorized

Performance is related to the local group

I have always shunned the idea of hiring people only from the top institutions at my workplace. The reason for that was my observation; that there were people from many relatively not so top institutions ending up top performers at the organization compared to their peers from top ones. This was not an one off observation, I had been observing this year on year that recruits from top institutions and not so top institutions were many at times on par with each other and there were few exceptions on either sides.

My school was a very competitive place to study, scoring in the 90s out 100 just meant that you are in the 50th percentile. It was getting increasingly tough as grades went higher and people were merely looking to outscore each other without gaining deep understanding of the subjects studied. Parent’s pressure on the ranking meant students had no choice but to play in the rat race getting stressed out and not learning much except scoring marks. There was a shuffle of groups happened after grade 8 and that was a breather in my school life, the competition eased out and it was so easy to be at the 75th percentile. This sudden ease of pressure made me learn subjects like science and maths with greater depth in understanding without worrying about optimizing learning only from the exam point of view. I could see that depth of understanding eventually helping me at my college and work place and I feel the positive effects of that even now. Had I been in the ultra competitive environment, I would have given up on learning.

I stumbled on the talk by Malcolm Gladwell which had rekindled my memories while I kept nodding at many his points in the talk.

Top institutions always gets the brightest of the minds, there is no doubt in that. But increasingly these institutions are getting competitive that people in the lower percentile in these places may face too daunting a task to accomplish something even though they were the best among their their peers in the country. It will favour the ‘smart gets more smarter’ culture. So as mentioned in the talk it will be better if we recruit the toppers from multiple other institutions rather than focussing on getting talent from top institutions. This may apply to organizations which forms A-teams as well.

Leave a comment

Filed under Learning

It works in my machine

One of the common answers a developer gives when s/he notices a bug is that “it works in my machine”. This was so common and always boils down to the configuration difference between the testing environments and development environments. It is not so easy to keep the development and testing environments very similar but lots of those could be scripted and made automated such that it is an executable document. There are also lots of development hygiene practices that needs to be strictly adhered to avoid these kind of bugs.Confused

Where could things go wrong?

There are many things that could go wrong, here are some of them in no particular order.

  1. Poor version control – Either the code is not checked in(sometimes extra files locally modified for debugging) or the branching/merging is mismanaged.
  2. Incorrect dependencies and libraries – The dependencies/libraries are manually copied to the servers. Example – copying some jar files to tomcat, could easily go out of version between different machines.
  3. Testing only in debugging mode – When testing at the developer’s machine, developers have a tendency to run in debug, breakpoints in the code will give ample time for the application so that synchronous issues do not crop up during developer’s testing.
  4. Not testing at all - This sounds silly, but when the pressure is high chances are that the code is committed without tests and then bugs have to appear to give time to finish the coding.
  5. Incorrect environments and test data - Large projects have a tough time managing test data and environments, developers could be pointing to an outdated external environment or using only a narrow set of test data.

“Image courtesy of Grant Cochrane /”.

1 Comment

Filed under Uncategorized

Pair Programming

If you want to walk fast, walk alone; if you want to walk far, walk together

When I talk about pair programming, I am confronted with things like return on investment, efficiency etc. The arguments which come against are with very simple programs and simple domains where it does not matter you pair to program or test drive the code. Beyond the fibonacci and measurement problems there are complex domains which people get involved to solve problems and pair programming helps there.

A good analogy is racing. Racing falls into circuit racing and rallies, if we note that circuit racing like Formula-1 or driving around in circles like in NASCAR has only one driver. These ones are repetitive with relatively very few unknowns and parameters for the driver to take care. The moment you know about the car condition and the track conditions and few laps taken then the driver’s mind is on autopilot. Rally unlike circuit racing has lots of challenges, we just roughly know the route and it could be riddled with lots of surprises and obstacles. There is no way that a driver without a co-driver (navigator) could win the race.

Pair Programming

Programming at work is like rally driving, many of the examples which people take up for classroom sessions are similar to Formula-1 or NASCAR driving; which is the primary reason that most of them fail to see the potential benefits of pair programming. Depending on the nature of the task at hand we should be able to decide if we need work in pairs, group or alone to find a solution to the problem. Having a blanket rule to always program in pairs or avoid pair programming will force us to fit into one of the styles of work which may prove counter productive. Always failures are taken as strong examples than successes and if we fail in choosing the wrong approach, chances are high that the approach itself will be called a failure.

Image courtesy of patrisyu /

Leave a comment

Filed under Developer, Workplace