Throughout the years I have worked in and with agile teams, a lot of great progress has been made towards getting value from developing software by agile values and principles. A lot of focus has been on maturing agile teams in terms of collaboration in and between teams. In recent years more focus has also been put on bringing value to the customers with Lean Product Discovery, and DevOps is beginning to bridge the gap between development and deployment. However, you cannot expect to succeed with agile events and frameworks, customer development, and DevOps practices alone. All important and vital areas — but in my experience one area is being neglected.
In the Agile Manifesto, one of the 12 principles read
Continuous attention to technical excellence and good design enhances agility.
What is key here to me — is the Continuous attention.
I see teams setting up a deploy pipeline and calling that DevOps, write unit tests and call it Extreme Programming, without focusing on the bigger picture and why it brings value. I meet a lot of developers who do not strive for technical excellence, but for specific practices, and then leave it at that. I feel that a more continuous focus and effort within the technical areas will make a huge impact in agile teams and organizations.
To me, technical excellence starts and ends with culture. Technical excellence evolves around the culture in which continuous improvement is key, both in terms of hard developer skills, and soft skills such as team collaboration and the ability to help and coach others.
Technical excellence is curiosity towards continuously learning new skills, trying out new approaches, and strive to enhance the quality of products and code.
Technical excellence is culture in the sense that it’s not a one-man-army approach, it’s a workplace and team effort. One excellent developer should not embark on a journey of sophisticated architecture, code, and tests, without bringing the rest of the development team along. It is a team responsibility to include each other, and raise the overall bar for the technical competencies in the team, by teaching, coaching, and helping each other continuously.
Technical Excellence is about egoless development.
Technical excellence is about “uncovering better ways of developing software by doing it and helping others do it.” (opening statement in the Agile Manifesto)
The thing is, that a framework like Scrum is made for continuous improvement. Small iterations do not only improve on the direction and feature-set of a product, but it is also an invitation to reflect on the team processes, software craftsmanship, and code quality. It is an invitation to always keep improving. Instead of seeing the Scrum events as wasting your time and keeping you away from the keyboard and the code, utilize the events as an opportunity to keep focus on improving the technical competencies of you and your team, and thereby the product and the code.
Technical Excellence and Software Craftsmanship is about getting better…. Every single day!
Where to start?
A lot can be blamed on the organizations for not encouraging a culture of technical excellence, but start with yourself and your behavior and mindset as a developer (I’ll get back to organizational support for developer culture in another post).
So where do you start? First and foremost stay curious and stay current. A lot of very bright people write books and blogs on developer culture and software craftsmanship and is a good place to start. Martin Fowler and Robert Martin (Uncle Bob) could be great sources to start with. Read up on Extreme Programming practices. They have been overshadowed by the rise of Scrum and other process frameworks but should be an integrated and natural part of you as a software craftsman.
Involve yourself in the developer community in the area in which you live and work. You can get a lot of inspiration and learn from listening and talking to developers from other companies. Try to join or create guilds, book clubs, geek nights, and the like, within your organization. Creating an active community internally can provide a more focused learning environment, dealing with topics that are relevant to your daily work.
Experiment with pair programming/mob programming within your team. Introduce new patterns, tools, frameworks, and architecture, and utilize the agile events and iterations to reflect and improve in short cycles.
Experiment, make mistakes, and learn from the process.
Remember that agile/Scrum events do not only exist to improve team collaboration and process. Use it to initiate improvement of the team’s codebase as well.
I’ll end with a quote from Uncle Bob, I couldn’t have written it better myself
What does it take to be a craftsman? It takes time. It takes experience. It takes mentoring. And, it takes a lot of trial and error. In our industry the best, and possibly the only, way to refine your skill is to make lots and lots of mistakes; and to learn from others who have made lots and lots of mistakes.
Curious about agile? Never miss a post!
Sign up for our newsletter (in Danish) right here 👉🏻 syndicate.dk/backstage