Is there a rockstar in your development team ?


In software development, the performance difference between a good and an average developer can be in order of magnitudes, much more than any other field. In my experience, a good developer is at least ten times or more productive vs an average developer. The performance difference is even higher when there are poor developers in the team, since a significant portion of your good developer’s time is spent in ‘baby-sitting’ – insuring that the bad developer is writing acceptable code. If you want to have a quality product having developers with poor development skills in your team is not even worth it, since in the long-term the net gain will be negative like when you may have to go back and start from scratch. A rockstar software developer is someone who is even better than a good developer, and while rockstars do exist, finding one is quite a task.

Therefore, having a rockstar in your software development team is like having a precious diamond. Not only is the rockstar developer able to quickly build up new features in your products, he or she is able to guide and mentor other team members and motivate them to be rockstars one day. Unfortunately it is too easy to fall into the trap that if a developer is getting features out fast and is finishing tasks on time (or even before), she or he is a rockstar.



One of the fundamental problems with software development is the intangible and abstract nature of software. Unlike other undertakings like those in civil, mechanical and even electronics engineering, it is impossible to gauge the completeness of a product just by looking at it. Sure by watching a program execute you can check feature completeness, and by keeping an eye on metrics such a maintainability index and cyclomatic complexity you can get some idea on quality. However, a good working software with high maintainability index and low cyclomatic complexity may still hide a serious problem behind those pretty screens and cool features.

This serious problem is called ‘technical debt’ and it increases exponentially as new features are added. Everything works fine till the day the ‘debt collector’ comes calling, which believe me they do at some stage in any software. You know that day has come when the software edifice falls like a pack of cards after few lines of code change for a simple feature. Fixing the issue, opens up two new ones, fixing which opens up four and your commercial software doesn’t look that stable anymore. You are forced to devote more than 50% of the development/testing time for refactoring and smoke testing before releasing any product impacting revenue and growth, until the time you throw in the towel and start from scratch at a huge cost.

Managers and team leads will try to figure out what happened, after all you had some rockstar developers who wrote most of the initial code (Note that in most cases, the technical debt collector comes much after the rockstars have left the company). Due to the former rockstars you were able to make every release in time, made lots of revenue and paid the rockstarts 6 –figure bonuses. Hence, the blame will generally fall on your current developers who all seems to lack the magic of a rockstar. To fill the problem the tendency will be bring back some of the rockstars back as consultants and pay them hefty sums to fix the bugs. However, managers and leads should do this only after careful code analysis as this may exacerbate the problem and only postpone what is inevitable.

Looking at the code history throughout the lifecycle of the product will reveal the root cause of the problems, and it may turn out that your rockstars weren’t rockstars after all. While they did deliver all features in time, they took shortcuts which remained invisible to the non-coding world. Your initial design had classes without any inheritance or composition design (just so that you can claim object-oriented methodology, which sounds cool) and unit tests were written without full integration tests. Or things could be much worse, rather than refactoring existing routines the rockstar developers copy-pasted code and created new routines (btw, this is equivalent to a ‘felony’ in software development) and created new unit tests for these routines (this way all unit tests passed). Maybe there were no unit tests at all (a ‘felony’ too) leaving you no way to regression test your code changes.

Technical debt comes in other forms. To save time and focus on functionality no one added any comments, having some poor non-author of the code to use breakpoints and print statements (requiring countless hours) to figure out why your recursive routine is crashing into its 1000th call. Perhaps you did raise that point only to be told by the rockstars that code is the best documentation. Remember that code is the best documentation to only the people who wrote it, for others it’s just chaotic logic that without comments, takes valuable time investment to figure out.

All managers and team leads in software development need to remember that timely delivery of assigned tasks should not be the sole criterion in ascertaining a rock star. You need to have a formal code review process in place and should do some code reviews yourself to identify if you really have rockstar(s) in your team whom you can trust with. Apart from delivering required feature sets in time, rockstar developers constantly refactor the code, make necessary design changes and back up with good unit test coverage. Rockstar developers inherently feels uncomfortable in writing code that only meets the bare minimum, they realize the value of consistent design and do not shy away from making changes on their own initiative that will improve code readability and maintainability. A rockstar developer constantly improves her and his skills and looking at the code she/he wrote last year, thinks a better job could have been done. If you have such a person in your team, he or she is better than having ten or more average developers. Do everything you can do to retain them as there are worth their weight in gold.

Love or hate this post ? Have other ideas ? Please leave a comment below!

Comments

Popular posts from this blog

Part III: Backpropagation mechanics for a Convolutional Neural Network

Introducing Convolution Neural Networks with a simple architecture

Deriving Pythagoras' theorem using Machine Learning