One often underlooked core principle of the agile manifesto is technical excellence.
Implementing agile practices only in management, neglecting the technical excellence, is one the common errors leading to insufficient value delivered and lack of effectiveness of the team.
It is a crucial point but nothing is specified on how to implement it inside the Scrum framework, so here are some of my thoughts.
The goal of technical excellence is to reduce the frictions in the current and future developments. This means improving (or at least keeping constant) the maintainability of the code, every time we make changes into it.
Leave this world a better place than you found it.
In my opinion, there are some means to focus on technical excellence:
Having unit and acceptance tests is a good way to ensure that you meet the expect value and do not break the existing application. To reduce friction, those tests should be automated and integrated into continuous integration.
One of my personal favorite approach for testing is TDD (test-driven development), but ultimately each team need to evaluate and select the ways that work the best for itself.
Architecture & design
The architecture and design of a software should always emphasize on the simplicity and evolution capabilities.
Concentrating into making the code readable and understandable for humans is the best way to ensure the frictionless future of the application. I cannot say it enough, read the clean code book and encourage every single team member to read it and apply it.
See the manifesto
Constant learning & growth
Team members should always try to improve and learn, by themselves and through their peers.
If we limit ourselves to perfect work, we'd never accomplish anything! - Jon Acuff in Finish
Keep in mind that you have to deliver working software frequently.
Strong code ownership
A strong code ownership is a limitation factor in a team:
- Limit the opportunity to learn from your peers
- Reduce the self-organization of the team (difficulties when the "owner" of the piece of code is in vacation for instance)
- Decrease the readability of the code
Technical excellence should be deeply anchored into the team culture. Teams that are always targetting those goals are the most effective, produce more value and adapt faster to changes.