«    »

How to Become an Expert Developer

What if I told you there was only one activity you needed to do to become an expert, high-performing software developer? You might be doubtful of my claim. Yet this is exactly the finding reported in the book Talent Is Overrated by Geoff Colvin. Across multiple professions research points to the same activity as being the key factor to becoming an expert or world-class performer: deliberate practice. The use of the word 'deliberate' is crucial: this practice does not just involve doing one’s regular work or playing around. It instead is a focused, disciplined activity whose goal is to improve a specific aspect of performance for an individual. Both the quality and quantity of practice are critical to becoming an expert.

Quantity of Practice Required

The research is surprisingly consistent on the quantity of high-quality practice necessary: approximately 10,000 hours. This amount of practice seems to take a minimum of about 10 years to achieve which works out to a rate of 20 hours of practice per week, or about 4 hours per day excluding weekends. It is interesting that this rate of 4 hours per day corresponds to what the research says is the apparent maximum amount of quality practice that can be performed each day. The activity being practiced can be performed for longer, but improvements due to practice do not occur. The reason for this limitation is mental: deliberate practice requires high levels of concerted mental effort that can only be maintained for a limited duration, and a period of sleep is needed during which the brain consolidates the learning that occurred during the day. These limitations explain the 10 year minimum duration: you cannot double the amount of practice you do per day and cut the total duration in half.

Key Elements of High-Quality Practice

It is quite common to see workers with more than 10 years of experience who are nowhere near being an expert. This is because simply performing an activity is not the same as deliberately practicing an activity, although the difference may not always be visible to laypeople. Many people just go through the motions in their work, repeating what they have learned and done before, and thus fail to continue to improve. I have heard this described as having one year of experience repeated for nine years. This explains, therefore, why there is no correlation between the years of 'experience' a developer has and their ability to write code.

So if our goal is to become experts, how do we ensure that we are engaged in high-quality practice rather than just repetitively performing the activity? Here are some key elements of high-quality practice:

  • Practice must be specifically designed to improve performance for an individual. The practice must push or stretch the individual beyond their current abilities, outside their comfort zone, but not too hard that it causes anxiety and complete failure.
    Comfort, Learning, Panic Zones

    Each practice session should focus on one (or more) specific elements of performance. The more precise your goal(s) for the session, the better the quality of your practice. You need to seek out what you are not good at. Clearly identifying this yourself can be difficult for a number of reasons. Your ego tends to cause you to fail to notice areas of weakness. You might simply lack knowledge about specific areas. And for areas of performance you know about, it may be difficult for you to evaluate your performance compared to the level of an expert. The guidance of a coach or mentor is therefore extremely helpful. In the realm of sports, even experts like Tiger Woods have coaches to help them improve.

    In business, unlike sports, access to coaches and mentors is much more limited, if not completely non-existent. So as software developers we need to be more creative in finding ways to obtain guidance. One option is to engage in as much pair programming as possible with as wide a variety of developers as possible. You will not always be paired with an expert, but with a wide variety you will encounter situations where your partner reveals some aspect of development you were unaware and can learn from. Another option is to seek out material – blogs, articles, and books – produced by respected developers about coding & design and study their material carefully to absorb their approach to software development. One example of this is Robert C. Martin’s book Clean Code which provides step-by-step transformations of code into a cleaner form. He also provides on his website a presentation and even a video demonstrating the process of doing test-driven development.

  • Practice activities must be easily repeatable. To reach expert level requires putting in lots of repetition during practice. The number of repetitions performed by experts during individual practice sessions and over the lifespan of their career can be mind-boggling to laypeople.

    Repetition is especially important for those aspects of a field that normally occur less frequently. If a specific aspect is normally only encountered once a year and you never practice it then you will function essentially as a beginner each time you encounter it.

    A good example of this in the field of software development is performing the actions leading up to the release of the software: integration / stabilization of the software, acceptance testing, and final packaging / deployment. Traditionally under a waterfall methodology this is done once in the last phase of the project. Modern Agile development methods instead mandate more frequent releases, with some potentially being practice releases that are not actually provided to real users. Activities such as code integration or acceptance testing that were traditionally done once prior to a release are done much more frequently as part of each iteration.

  • Practice must include feedback regarding the quality of the performance: what was done perfectly versus what can be improved. The more specific the feedback, the easier it is to adjust your actions and tailor future practice sessions to address deficiencies. Feedback should be available immediately, without delay, as part of the practice session.

    One of the best ways of obtaining feedback is through a coach or mentor who can evaluate your performance and make recommendations for improvement. Without such a resource there are still ways of gaining feedback. One approach is to find problems done by an expert, solve them yourself, and then compare your solution to the expert's. Another approach is to regularly set aside time to reflect on your performance and identify specific improvements.

    Obtaining sufficient feedback soon enough is challenging in the field of software development. Many modern development practices are deliberately designed to maximum the feedback developers receive. Test driven development provides immediate feedback regarding the correctness of the code. Pair programming provides immediate feedback regarding the readability and maintainability of the code. Root cause analysis of defects helps identify specific mistakes that practice can address.

  • Deliberate practice is mentally highly demanding. This is a consequence of pushing beyond your comfort zone. If you are able to do an activity on auto-pilot, without really thinking, then it is too easy. To grow and improve requires you to be sufficiently challenged.

    Research suggests that one’s ability to sustain mental concentration and focus is the main governing factor determining the amount of effective practice that can be performed. The limit seems to be about 4 to 5 hours per day, divided into sessions of no more than 1 to 1.5 hours in duration. (I find it interesting that this maximum session duration for deliberate practice is the same as the recommended maximum duration for code review sessions, which is no surprise given that both activities require a high level of focus and concentration.) It would be interesting to know what kind of rest and recuperation between practice sessions is recommended, but I have not seen this discussed.

  • Conclusion

    To become an expert requires approximately 10,000 hours of high-quality deliberate practice, which must consist of training activities designed to improve performance, lots of repetition, specific and immediate feedback, and sustained high levels of mental effort.
    This is simple to state but is definitely not an easy endeavor to do, which explains why in every field there are so few experts and why the majority are at much lower levels of performance. Yet if becoming an expert is your goal, then this is the path you need to take.

    If you find this article helpful, please make a donation.

2 Comments on “How to Become an Expert Developer”

  1. Jeremy says:

    This is really good I think, going to be looking at this to further my own personal development, I am wanting to setup network logins using a Linux box I have (specifically CentOS), but as you said pushing the learning side of work rather than just repeating tasks over and over, which I have been doing in the past!

    Thank you for this great post!

  2. Somnath says:

    Really a good article… I learned a lot from this about the factors that need to be involved, to become expert in development.
    I really appreciate the article.
    Thank you for the great post!!

«    »