Skip to main content

Top Project Risk Number 5: Technical Risk

Can it really be done?

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!

Technical risk mitigation in Scrum

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.

Technical debt mitigation in Scrum 

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.

Comments

Popular posts from this blog

Sample Definition of Done

Why does Scrum have a Definition of Done? Simple, everyone involved in the project needs to know and understand what Done means. Furthermore, Done should be really done, as in, 'there is nothing stopping us from earning value with this function, except maybe the go-ahead from the Product Owner. Consider the alternative:
Project Manager: Is this function done?
Developer: Yes
Project Manager: So we can ship it?
Developer: Well, No. It needs to be tested, and I need to write some documentation, but the code works, really. I tested it... (pause) ...on my machine. What's wrong with this exchange? To the developer and to the project manager, "done" means something rather different. To the developer in this case, done means: "I don't have to work on this piece of code any more (unless the tester tells me something is wrong)." The project leader is looking for a statement that the code is ready to ship.

At its most basic level, a definition of Done creates a sh…

Explaining Story Points to Management

During the February Scrum Breakfast in Zurich, the question arised, "How do I explain Story Points to Management?" A good question, and in all honesty, developers can be an even more critical audience than managers.

Traditional estimates attempt to answer the question, "how long will it take to develop X?" I could ask you a similar question, "How long does it take to get the nearest train station?

The answer, measured in time, depends on two things, the distance and the speed. Depending on whether I plan to go by car, by foot, by bicycle or (my personal favorite for short distances) trottinette, the answer can vary dramatically. So it is with software development. The productivity of a developer can vary dramatically, both as a function of innate ability and whether the task at hand plays to his strong points, so the time to produce a piece of software can vary dramatically. But the complexity of the problem doesn't depend on the person solving it, just …

Money for Nothing, Changes for Free

“Money for Nothing, Changes for Free” encourages both customers and suppliers to focus on value.

A key advantage of Scrum projects is that at least once per sprint you have something that could be shipped and no work in progress. You can change direction every sprint, and you can reevaluate whether the project is a good investment or if your money could be better spent elsewhere. Abrupt cancellation is risky for the supplier.

While the concept of an early-exit penalty is not new, Jeff Sutherland gave it a unique allure with his allusion to the Dire Straits hit.
Desired Benefit Incentivize both customers and suppliers to focus on functionality that provides genuine value.
Structure This works with Agile software projects because there is little or no work in progress. After each Sprint, functionality is either complete or not started. Work is basically on a Time and Materials basis with a cost target, often with the intention that the project should not use up the entire project budge…