TSM - How a software craftsman learns: deliberate practice

Alexandru Bolboacă - Agile Coach and Trainer, with a focus on technical practices

The software craftsmanship movement promotes the idea that the only way a developer can be fast is by behaving rationally during crisis periods. This way of thinking is a reaction to the behaviour of writing code that is hard to change and to understand, basically producing technical debt, in the moment when you need to deliver software during a short period of time.

The way the software craftsmanship movement believes that a developer can become that fast is by practicing as often as possible, in most diverse environments, on platforms and languages as different as possible. Thus deliberate practice is very tightly related with any developer that calls themselves "aspiring software craftsman" or "software craftsman".

What is practice?

Practice is the act of rehearsing a behavior over and over, or engaging in an activity again and again, for the purpose of improving or mastering it, as in the phrase "practice makes perfect". Sports teams practice to prepare for actual games. Playing a musical instrument well takes a lot of practice. It is a method of learning and of acquiring experience. The word derives from the Greek "πρακτική" (praktike), feminine of "πρακτικός" (praktikos), "fit for or concerned with action, practical"[1] and that from the verb "πράσσω" (prasso),"to achieve, bring about, effect, accomplish" en.wikipedia.org/wiki/Practice_%28learning_method%29 .

There are numerous parallels between sports, music and programming. Performance on field, on stage or in production is an essential success factor in these domains. But as a sportsman or a musician needs practice to become expert while being active, the same way a developer needs practice to master better and better their area of knowledge.

The essential problem in the software industry is that, unlike sports or music, a developer spends too much time "on the stage", and not enough time in a learning environment. And this happens in a very dynamic domain, where change and novelty is the question of the hour. This means that an aspiring software craftsman needs to allocate time to become better. He or she can make an investment, and instead of effectively working 40 hours per week, works just 30 and the rest of the time is used for practice. Another option is to allocate time during each evening and/or morning as well as Saturdays and Sundays to learn new things.

But how to practice? Well, there are a number of established formats of deliberate practice, but in the following we will focus on: Coding Kata, Performing Coding Kata, Coding Dojo, Cyber Dojo, Testing Dojo, Coderetreat, Test Automation Retreat, Pair-programming, Pet projects, Coaching.

Coding Kata

The concept of this type of practice is very simple: I find out what I want to become better in and I want to practice this during a short 10 - 60 minutes interval by performing an activity which will make me better. This idea comes from the martial arts, where a trainee must repeat some movements until they are happy with the progress and can show to the sensei the progress. For developers the same model applies: the developer repeats the solution of the same problem, in the same way, during the same timebox until he considers that the solution and its steps are correct and done in a short enough time period.

A software craftsman wants to practice for minimum 10 hours per week, because this is the only way they can become faster and more efficient.

How much do you practice per week?

Performing Coding Kata

A speaker writes code in front of an audience on an established topic and during an established timebox. The speaker needs to explain what their actions are while writing code. The audience is asked to not cut in, excepting the case they do not understand at all what is going on. This type of exercise is very intense for the speaker and can be very instructional for the audience, because the people from the audience can learn new things just by seeing how a fellow solves a problem.

I know you would like to do a coding kata. When will you?

Coding Dojo

This is a format that comes from the martial arts and it is adapted for developers. Coding dojo is a group exercise that has the purpose of spreading knowledge amongst the members of the audience. A topic is suggested and a period of time during which the group will try to solve a problem, by exercising some specific practices.

An essential characteristic of this format is that it needs to have an established timebox and a very specific topic. An experienced developer needs to facilitate this meeting, focusing on imposing the rules, the timebox and the topic.

Coding dojo randori is the most known form, during which two programmers write code by using a projector so that anyone can see. They use pair-programming, and the first that started the session is replaced at a time interval (of around 5-7 minutes), by the next programmer from the audience. The pair of the programmer who leaves starts writing code, and the new one just observes. After the same time interval the programmer who is writing code goes back to the audience and is replaced with someone from the audience. A list can be made in advance, so that everyone knows whose turn it is at any moment. Thus, by rotation, everyone will write code and will see how others write code.

A variation exists, when someone from the audience has something to say they need to go to the keyboard and only then talk. Nobody is allowed to talk, unless they write code on the projector.

Coding dojo has another variation: a very experienced person makes a coding kata with a very well defined purpose and with a clear timebox (20-30 minutes). Then the audience is asked to repeat the steps made by the speaker. During the second phase, when the audience repeats the initial steps, the speaker becomes a facilitator, making sure that the purpose of the exercise is kept and that the rules are observed. This format is much closer to the moment when a sensei wants to show the class how to make some movements and then asks them to repeat the moves, while giving them suggestions and feedback for improvement.

Did you find out when and where will the next coding dojo take place in your city?

Cyber Dojo

Cyber dojo is an online application created by Jon Jagger on the coding dojo principles. It lets parallel connection of more persons or groups or single connection to a server. In the online application code can be written in most usual programming languages. It contains quite a big number of problems that can be solved. The advantage of cyber dojo is the easiness and the short time until starting using it. There is no need of any setup for a development environment.

After you finish reading this article, you will start using it, right?? Here is the link: www.cyber-dojo.com

Testing Dojo

After coding cojo became very popular amongst the programmers, the same principles were applied for testers to be able to learn from one another. For more details go to http://www.testingdojo.org.

What are you waiting for to attend a testing dojo?

Coderetreat

In the year 2009 a group of programmers met at the Code Mash Conference in USA and thought they would like to have a one-day format to exercise, different from the usual coding dojo format that lasts just a couple of hours.

The idea of a code retreat is to combine more elements from a coding dojo or coding kata into one day of practice. Code retreats take place usually on Saturdays and last the whole day. The event is structured in 6 sessions of 45 minutes, divided by short retrospectives. The rules are simple: during each session the programmers work in pairs with the purpose to write code within certain constraints required by the facilitator, chosen so that the learning process is fast. The code is deleted completely after each session, the pairs and the constraints change and the code writing starts again.

Romania was from the beginning very active in this area, Alexandru Bolboacă and Maria Diaconu being two of the ones that helped crystallizing the current format. Also the coderetreats are organized usually in the AgileWorks communities from Romania.

Every year the "Global Day of Coderetreat" is organized, when cities from the whole world are invited to attend an event with the same format. During 32 hours the programmers from all the continents learn to become better by practice. Many of the cities communicate by video call to meet and to share their learning from that day.

When is the next coderetreat? The answer is here: coderetreat.org!

Test Automation Retreat

Following the format of a coderetreat, Makus Gärtner created this variation where the testers are invited to attend 6 sessions of 45 minutes to automate tests for a web application. The format is yet new and fresh, but very valuable .

When will you attend the next test automation retreat?

Pair-programming

This is a very simple form of practice. You want to do something and you call someone else to help you because another point of view is welcome.

From the experience we can say that pair-programming is the fastest way of learning. You need just another professional that has the same interests as you have. Then, working together you will both learn a lot from each other. This is as well tiring, so try not to over do it, but it becomes easier to accept while the experience with this practice grows.

Pair-programming can be even done remote.

When did you do pair-programming last time?

Pet projects

A very good way of practice is a pet project. Any technology and any topic is welcome with one condition: be passionate about what you are doing. A pet project helps because it is a real development environment, but the decisions are not taken by a customer or by a boss, but by you. In this way you can learn and take architectural decisions, design decisions, see how important it is to have clean code and other usual practices from the software craftsmanship world.

Starting a pet project is very simple. Anyone of us has at least one idea we want to explore by writing a program. So we just need to allocate some time to make it happen. It often happens that pet projects turn into a marketable product.

How much time do you work per month for your pet project?

Coaching

Any form of deliberate practice can be put into place by yourself, or backed by a technical coach. When a technical coach is involved, the learning process is fast accelerated, because continuous feedback and concrete suggestions, even working in pair-programming sessions, are key factors for an efficient learning process. This relationship resembles with the relationship between a trainee and a sensei in martial arts. Anyone can learn martial arts from books or from less experienced practitioners, but a sensei helps out with advice for having a fast and coherent learning process.

When did you work last time with a technical coach?

Community

Being part of a community of professionals from the area of activity is another factor that helps continuous improvement. Here you can meet people with the same passions, with different levels of knowledge, but who have a common purpose: learn from each other. There are communities of programmers, testers, architects, etc in all the big cities from Romania and Europe. Also there are communities that deal with a specific language or a specific technology, in the case when the purpose of learning is a technology itself.

Most events from the local communities are free of charge, this being one more benefit for attracting as many passionate people from the IT world, and not only.

The Software Craftsmanship Communities (AgileWorks in Romania) focus rather on the fundamentals from the software professionals should master. The specializations of members, their ages or experience are very different.

If you do now know already what the communities in your city are, search on the internet or on meetup.com!

Conclusion

An expert breaks down the skills that are required to be expert and focuses on improving those skill chunks during practice or day-to-day activities, often paired with immediate coaching feedback. Another important feature of deliberate practice lies in continually practicing a skill at more challenging levels with the intention of mastering Ref. Mayer, R. E. (2008). Learning and Instruction. Upper Saddle River, New Jersey: Pearson Education, Inc.

One thing is very clear, without practice we cannot become experts in a domain that is so vast and dynamical as the software industry. So we invite you to start practicing home or at work. And then we invite you to get involved in the local communities by attending group practice activities. What are you waiting for?