I believe that this nation should commit itself to achieving the goal, before this decade is out, of landing a man on the moon and returning him safely to the earth.
When American President John F. Kennedy made this speech in 1961, did anyone know if it was possible to get a man to the moon? If you are going to build rockets you need a certain tolerance for explosions – and you will learn the importance of testing and when to be careful!
In Scrum, the Whole Team collaborates to identify the best step forward each sprint. This includes identifying and handling risks. The Team advises the Product Owner, who has the final say about deciding which backlog items come to the top of the backlog and into the sprint. Business value usually trumps technical issues, but the Product Owner should be an educated client and listen to the Team.
An insidious form of technical risk is the ‘Technical Debt’. Technical Debt is the consequence of poor engineering practices that make a program difficult and expensive to modify. Technical debt is pretending something is really done and fixing the problems (bugs) later.
Financial debt is what happens when you buy something that you don’t really have the money for. You pay it off later, paying both principal and interest. Like financial debt, technical debt has to be paid off in the form of maintenance and support costs. These support costs are a substantial multiple of the initial development costs.
Like financial debt, technical debt must be paid off or technical bankruptcy will follow. A change here causes a problem there, which also has to be fixed. As the code quality declines, the time spent fixing problems increases, while the Team’s velocity and its ability to develop new features decline.
By the time the Team is spending two-thirds of its time or more on ‘daily business’, i.e. bug fixing, you are close to achieving technical bankruptcy. You have little choice but to throw away the code and write it again from scratch.
From the perspective of total cost of ownership, emphasizing the quantity of features delivered over the quality of features delivered is an expensive choice.
The antidote to technical debt is good engineering practices and a focus on quality over quantity.
To prevent this, Scrum requires that all features be completed according to the definition of done. This agreement among the Scrum Team members covers more than just the individual acceptance criteria, it also ensures the quality of the code produced.
Scrum does not prescribe particular engineering practices, because they are context-specific and are improving all the time. The definition of done is expected to become more inclusive, that is to define higher quality standards, as the project advances.
Extreme Programming and Software Craftsmanship are two movements focusing on the quality of software. Automated testing is critical to ensure that what was delivered last month still works this month.
A contract that focuses on delivering scope without a corresponding emphasis on technical excellence and internal quality could result in a product with high technical debt that is expensive to maintain.