MODERN, RELEVANT AND SHOWN TO WORK:
Training for Development Teams in Software Excellence
Executive Summary
Higher quality code is easier to understand and change, so you can deliver more value, sooner. Everyone wants that! Software developers often take pride in their work and enjoy writing good code that will provide benefits to users. What prevents them from achieving excellent code quality is often a combination of two main factors - skill and coding culture. Technical coaching is a good way to address both of these aspects. This article outlines an innovative approach to enable ordinary developers to do some technical coaching that benefits themselves, their teams, and their whole organization.
We offer training and mentoring together with packages of materials including video, activity boards and coding exercises. Ordinary developers, experienced coaches and teams leads can all use these to lead regular short training sessions with their teams. The goal is to improve code quality by building up the team’s capabilities and coding culture. This approach has already been adopted at a large European software organization and taken up by experienced Technical coaches around the world. Read on to find out more about this training for developers that is modern, relevant and shown to work.
A new approach to raising code quality: Regular, short interactive training for teams of developers, led by a peer. High quality materials and content designed by Emily Bache.
The problem of Code Quality
What everyone wants is sustainable development, where deliveries happen at a predictable frequent cadence with few reported defects. These desirable traits are closely tied to code quality. Higher quality code is easier to understand and cheaper to modify, so you can add features more easily. It is also less likely to contain defects. Practices like TDD and Refactoring enable higher quality code and other important practices such as Continuous Delivery (see sidebar). High code quality comes from a long-term appropriate use of TDD and Refactoring by skilled practitioners and will ultimately make short-term crises less likely to happen.
Many developers understand it would be a good idea to use TDD and Refactoring as part of their work, but levels of adoption vary widely. Despite training, many developers struggle with it. Some software systems are built on code that is 20 or 30 years old. It is challenging to apply these development techniques in older code that doesn’t have great unit tests or use modern designs. Even in newer codebases, adoption of TDD can be patchy as deadlines and other pressures intrude. Not every developer receives good training and mentorship, or has come across other developers who can teach them to write good quality code.
Test-Driven Development (TDD) was introduced by Kent Beck, signatory of the Agile Manifesto and co-author of the unit testing tool JUnit. Although adoption of unit testing by developers has swept across our industry, adoption of TDD, where you use the tests as an essential tool to drive quality design, has not caught on as widely.
Refactoring, where you transform a software design incrementally in safe steps towards a more maintainable and higher quality solution, is a related technique described by Martin Fowler, another industry luminary. There is good support for refactoring in most programming language IDEs but again, use of these tools is not widespread.
The ‘Accelerate’ research from DORA has identified particular software development capabilities that predict software delivery performance and ultimately organizational outcomes. They show that ‘elite’ performing software organizations do Continuous Delivery, which is enabled by a number of underlying technical practices. Refactoring is one of the enablers of “Code maintainability” and high performers practice Test-Driven Development as part of their “Test automation” capability.
TDD Training courses don't work
For many skills in IT, it’s a good idea to go to a training course. There are lots of reputable providers that will teach you to use specific tools and programming libraries in a few days of instruction. Combined with support from your team when you get back to your normal production environment, that is often all that’s needed to become productive with a new tool. However, experience shows a similar approach just doesn’t work for a skill like TDD or Refactoring.
Part of the reason for that is the sheer complexity of the codebase you step into when you return from the training course. It will be on a totally different scale from the examples you learnt on. The other main reason is the lack of ongoing support from your peers, or mechanisms to address difficulties.
Will AI solve this?
AI coding assistants have taken our industry by storm, promising increased productivity for developers. However, according to a recent research study, the effect on code quality is in the wrong direction (reference 1).
There is undoubtedly value in these tools, but developers need to be skilled enough to use them well and maintain high quality for the long term. There are hopeful signs that AI-assisted refactoring may be able to raise code quality automatically, but these tools are not yet widely available. The tools currently in the hands of developers have been shown to produce correct refactorings in less than half of cases - in other words it introduces bugs more than half the times you use it (reference 2).
Samman Technical Coaching
The Samman method is an approach to technical coaching pioneered and developed by Emily Bache, together with members of the Samman Technical Coaching Society that she founded. The main idea is that developers improve the way they work through a combination of training and mentoring, and that the unit of change is the development team. A coach works part-time with a team and hosts both team learning and ensemble sessions. The society is a not-for-profit organization that provides free materials, exercises and advice to technical coaches everywhere.
Reference 1: “Coding on Copilot: 2023 Data Suggests Downward Pressure on Code Quality” article published by GitClear.
Reference 2: “Refactoring vs Refuctoring: Advancing the state of automated code improvements” By Adam Tornhill, Markus Borg & Enys Mones.
This is a new training format, enabled by the modern internet and online collaboration tools, that is much more suitable than traditional training forms for learning a skill like TDD. It’s aimed at teams, because that is the natural unit in which software is built today. It is built around key individual developers who are often already enthusiastic about TDD and want to see higher quality code. Supported by video, coding exercises and online activity boards, development teams gather regularly to learn new ways of working.
All team members join these sessions as active participants. They do hands-on exercises, talk, discuss, and work out how to apply the topics to their own situation. Emily Bache is not present in these sessions, but the training materials that they use are designed by her. The content is based on many years experience of how to teach TDD and refactoring in a variety of companies.
Each session is led by a “team learning facilitator” - a colleague and peer who has done a small amount of preparation. They will host the session, answer questions and interpret the provided materials for the specific team situation. Each session is short, just one hour, and the team does one each sprint. The aim is to create a regular forum where the team can learn to adopt effective practices and how to raise their collective code quality.
Training materials
A traditional online training course is done by an individual, watching videos and doing exercises at their own pace. They might also take part in online forums where they can compare notes with other learners and hopefully get help when they are stuck. However this learning is often disconnected from the real work that developers are doing in their teams. Also, the hands-on component might be rather small compared with what is actually needed to master a practical coding skill. The hardest problem is keeping learners engaged with this kind of training. It’s easy to drift off, and watch the videos without really taking it in.
The Guided Learning Hour training materials from Emily Bache aim to tackle all of these problems. As with a traditional online course, there is a video. A big difference though is that you watch the video in a group - your team - and you pause the video at strategic moments in order to do interactive group exercises. There isn’t a video section of more than 15 minutes before you get a chance to discuss or challenge or process or use the materials being presented. This is key for making the learning interesting, and more likely to stick. It’s also essential to making it relevant for the team’s situation.
Alongside the video, there is an online activity board prepared with various frames of sticky notes and other interactive elements the team can use to work through the concepts being discussed. These online activity board tools, for example Miro, Mural and ConceptBoard, are rather a new invention. They make it possible for an instructor to design compelling interactive materials for wide distribution in a way that wasn’t feasible before.
Perhaps the most important element of the training materials is the coding exercise. For a practical skill like TDD or Refactoring, it’s not enough to learn about the theory of how to do it. You have to get some hands-on experience before you’ll be able to transfer these skills and change how you work in your production code. Emily Bache has an extensive collection of more than a hundred exercises that she has been developing ever since she started writing her book “The Coding Dojo Handbook”, published in 2011. These exercises have been used in thousands of hours of training she has led personally.
Individuals
If you haven't facilitated or led training before, then it can be a little daunting to just call a meeting and ask your team to go through a Team Learning Session with you as host. The Samman Society offers relevant online training for people in this situation.
Sign up for training: sammancoaching.org/training/index.html
Technical Coaches
Take advantage of the free materials that we publish on YouTube, GitHub and the Samman Society's website. Activity Board templates are available for a small fee via Emily Bache’s Patreon, which also gives access to community support via Discord. You can contribute your own materials and get involved in the community.
Join Patreon: patreon.com/EmilyBache
Enterprises
We have an enterprise package of training, mentoring and materials for a Software Quality initiative that can make a difference accross a whole department or sofware product.
For ambitious organizations with particular areas of concern, there are opportunities for Emily Bache to develop additional materials and customized sessions.
Contact: bacheconsulting.com/contact/
Who should be a team Learning Facilitator?
Ideally the person leading the Guided Learning Hour is a member of the tam or a colleague from an adjacent team. They could also be an external coach - so long as they are familiar with the team’s situation. This person hosts sessions using the video and other materials provided. Their job is to gather the team, encourage everyone to participate, and to ensure the discussions are productive, on-track and relevant for this particular team.
There are plenty of excellent developers in the world who understand the benefits of TDD and Refactoring. Not all of them are able to teach these skills to others, even if they’d like to. Often team leads and architects know they have a responsibility for mentoring more junior developers, but aren’t sure how to go about it. It’s these kinds of developers who we recruit and train as Team Learning Facilitators. We invite them to additional training where they are shown how to use the materials and advised about how to get the most out of the team sessions. This includes improving their facilitation and mentoring skills.
Training as a Team Learning Facilitator will deepen and consolidate knowledge of TDD and Refactoring, and is hugely beneficial on its own terms. Participants in this programme will benefit themselves even before they move forward and use what they've learnt to coach others. And of course, the subsequent team coaching is hugely beneficial for them as well, since teaching something to others is a great way to learn it yourself.
Training
that actually happens
Software projects are notorious for being late and over budget. When deadlines are looming or customers are impatient for fixes, what often happens is that all training is put ‘on hold’. Developers cancel all their other activities and focus solely on the urgent features and bug fixes. As a technical coach, Emily Bache has experienced first hand how quickly the situation can turn from “coaching is great, we're learning loads and everything is improving” to “Sorry, we don’t have time for this any more. Please go away until we’ve cleared our current crisis”.
This training initiative is designed to be robust enough to continue even when projects are under pressure. We’re talking about 1 hour sessions for the whole team that happen once every sprint. To put that into perspective, it’s comparable with a sprint retrospective, which is a form of team development. Perhaps you agree with me - team development is important enough to devote time to even in a crisis, and these sessions are also team development.
If a team training session leads to better code quality the following sprint, or even simply more effective communication around code reviews, then it will benefit the schedule overall. The time taken for this training is designed to be short enough that even in the worst case, project managers still shouldn’t see a significant impact on schedules from investing just one hour a sprint.
What about the ‘team learning facilitator’ though - perhaps this will take up more of their time? Well, not in our experience. The initial training is just a couple of half days, with the option to follow up with further courses later down the line. Facilitators are also provided with a short “session briefing” video before each occasion they lead with their team. Our experience is that after the first few, they can prepare a team session in 1 - 2 hours. Participants so far have told us they have no difficulty upholding their existing work commitments alongside this role.
Experiences so far
Emily has been working closely with a large European software company to introduce “team learning sessions”. She has trained a group of developers as ‘team learning facilitators’ and they have successfully led a series of sessions with their teams. Emily has begun to roll this training out more widely across the organisation and is providing more materials. Results indicate that the teams enjoy the sessions, find the topics relevant, and they want to continue. The biggest feedback is that they want more: more topics, more materials in more programming languages and more sessions overall.
In addition to developers in a large company, Emily has begun to publish the training videos on YouTube and make the materials available to a small group of early adopters in the Samman Technical Coaching Society. Experienced coaches from around the world have used the videos, activity boards and coding exercises designed by Emily with small mixed groups of developers on the internet. These people do not even work together in the same team, yet still benefit from learning together, saying afterwards they enjoyed the sessions and learnt new skills. The experienced coaches reported that these sessions are fun to lead, easy to follow and need relatively little preparation.
Based on these successes, we are starting to train team learning facilitators with other organizations, and bring in additional coaches to lead public sessions. This is modern, relevant training that has been shown to work. It’s time to reach every developer and software team in the world.
NEXT STEPS
Technical coaching beyond
Team Learning Sessions
A Software Excellence programme to raise code quality should include Team Learning Sessions to improve developer skills and raise team awareness. Full Samman Technical Coaching also includes a great deal of mentoring in the production code. The Samman Society also provides training in Ensemble, which is a collaboration technique for software development teams.
Once Team Learning Facilitators have got started and found some initial benefits from doing sessions with their teams, we expect some will want to take further steps and do more technical coaching activities like Ensemble with their teams. To address this need, we are currently trialling follow-up training and mentoring.
Ways to get started with Team Learning Sessions
Individuals
If you haven't facilitated or led training before, then it can be a little daunting to just call a meeting and ask your team to go through a Team Learning Session with you as host. The Samman Society offers relevant online training for people in this situation.
Sign up for training: sammancoaching.org/training/index.html
Technical Coaches
Take advantage of the free materials that we publish on YouTube, GitHub and the Samman Society's website. Activity Board templates are available for a small fee via Emily Bache’s Patreon, which also gives access to community support via Discord. You can contribute your own materials and get involved in the community.
Join Patreon: patreon.com/EmilyBache
Enterprises
We have an enterprise package of training, mentoring and materials for a Software Quality initiative that can make a difference accross a whole department or sofware product.
For ambitious organizations with particular areas of concern, there are opportunities for Emily Bache to develop additional materials and customized sessions.
Contact: bacheconsulting.com/contact/