§ 13 Practice Makes Perfect
Context
You are working on your software developer skill set to achieve a state where you have Adequate Skills to better seize the capabilities of the tools and processes in use.
Problem
People learn differently, and some approaches have better results. Each approach has its pros and cons, requiring developers to assess the most effective way that works for them to hone their skills.
How can developers effectively develop their skills with the tools and processes they use?
Forces
- Developing skills by building on prior expertise speeds up learning, but diving into unfamiliar domains can broaden versatility and prevents tunnel vision.
- Theory and conceptual models help with building mental frameworks, but fluency with languages, frameworks, and tools comes from repeated hands-on practice.
- Focused practice approaches assist with skill growth, but limited budgets and scheduling constraints can railroad developers away from practice time.
Solution
Acquire first-hand experience through practice exercises, and regular daily work to learn more about the intricacies of the tools and processes in use.
Developing first-hand knowledge through practice by directly engaging with the tools and processes and exploring their capabilities enables a developer to build their skills with them, becoming more acclimated and proficient in their use.
This skill-building activity will come naturally as the developer uses their tools during their regular work tasks and projects. These provide real-world challenges to overcome and requirements to meet, and it is natural to see the developer grow their skills by working with their tools and learning from their mistakes.
In his exhaustive work on practice and skill proficiency, Ericsson, along with his colleagues[1], state that experts in a given skill showcase a lifelong deliberate commitment to improving their competence and technique in the domain, denying the necessity for a predisposed talent to the topic.
Ericsson’s work[2][1] also discusses different types of practice: deliberate, purposeful, structured, and naïve. Deliberate practice entails the task having a clear goal which is understood by the participant, needs to be able to perform it by themselves and to gain immediate and actionable feedback to make adjustments. The participant also needs to be able to perform the same tasks repeatedly, and that the practice task has to be designed and performed considering the teacher’s personalised guidance. Purposeful practice is done alone by the trainee, but is still guided by teachers. Structured practice is also guided by a teacher or a coach, but are comprised of activities not tailored to the trainee’s skill level and their strong and weak points. Finally, naïve practice stems from regular work and play activities (such as the ones encountered by a developer in their work); these activities differ from those found in the other types of practice due to their goal being different, such as, for example, a developer’s work tasks being focused on delivering software instead of becoming a better programmer.
Considering these differences in types of practice, developers should consider setting aside time for partaking in practice exercises and experimenting with other features outside of their regular tasks, enabling them to branch out from their work routine and learn more about how their tools work.
Examples
- Coding katas provide developers with structured exercises that help them develop their skills through repetition, having the developers revisit the same problems and improving on their solutions. The concept is borrowed from martial arts like karate, where these practice exercises are used to fine-tune moves and build muscle memory[3].
- Hackathons are events where developers have the opportunity to code a program or solve a problem in a short period of time, such as an afternoon, a day, or a weekend. These events provide developers with the chance to explore new technologies and approaches, while encouraging creative thinking and teamwork[4].
- Developers often learn incrementally through their normal development work, as they are faced with and solve real-world problems. Tasks like debugging, refactoring, and exploring new frameworks provide developers with lived experience[5].
Consequences
- Regular practice and hands-on experience enables developers to become more confident and aware of their capabilities, fostering deeper knowledge of their tools, processes, and codebases.
- Hands-on learning solidifies abstract knowledge into concrete experience.
- Practice can help developers be familiar with challenges early, helping them be more prepare when they show up in their work.
- Solely relying on practice can lead to blind spots, mainly regarding edge cases or concepts that are still out of a developer’s depth.
- Trial and error can make developers be reliant on poor habits or practices, but these can be mitigated through employing a diverse learning process that also includes guidance and reference material.
- Practice takes time that could be used for making progress on work which, depending on the project, may not be well available.
Related Patterns
This pattern is one of several approaches to developing §5 Adequate Skills, alongside §14 Learning From A Master and §15 Written Knowledge.
References
- K. A. Ericsson, R. T. Krampe, and C. Tesch-Römer, “The role of deliberate practice in the acquisition of expert performance.” Psychological Review, vol. 100, no. 3, pp. 363–406, July 1993, doi: 10.1037/0033-295X.100.3.363.
- K. A. Ericsson and K. W. Harwell, “Deliberate Practice and Proposed Limits on the Effects of Practice on the Acquisition of Expert Performance: Why the Original Definition Matters and Recommendations for Future Research,” Front. Psychol., vol. 10, p. 2396, Oct. 2019, doi: 10.3389/fpsyg.2019.02396.
- D. Thomas, “Code kata.” Accessed: Oct. 16, 2025. [Online]. Available: http://codekata.pragprog.com/2007/01/code_kata_backg.html#tp
- M. Komssi, D. Pichlis, M. Raatikainen, K. Kindström, and J. Järvinen, “What are Hackathons for?” IEEE Software, vol. 32, no. 5, pp. 60–67, Sept. 2015, doi: 10.1109/MS.2014.78.
- D. Kolb, Experiential Learning: Experience As The Source Of Learning And Development, vol. 1. 1984.
Last updated: December 18, 2025