← All articles

Technical Excellence: Why Craftsmanship Matters for Sustainable Scrum

By XNM Technologies · June 7, 2023 · 5 min read
Technical Excellence: Why Craftsmanship Matters for Sustainable Scrum

The twelfth principle of the Agile Manifesto reads: "Continuous attention to technical excellence and good design enhances agility." Of the twelve principles, it is among the most frequently cited in theory and the most consistently ignored in practice. The reason is structural. Technical excellence is invisible to stakeholders until it degrades enough to become visible as slowness, defects, or fragility. Every sprint, a product owner faces a real choice between a feature that a customer has asked for and a refactoring that no customer has requested and cannot see. Without a clear understanding of what the cost of that choice is over time, the product owner will almost always choose the feature. This is not a failure of values — it is a rational response to the incentives and visibility the product owner has. The technical excellence argument fails not because it is wrong but because it is usually made in the wrong currency: code quality, architectural purity, and engineering principle, none of which translate directly into the delivery outcomes the product owner cares about.

Why technical debt is a velocity killer

Technical debt is the accumulated cost of design and implementation decisions that optimised for short-term delivery speed at the expense of longer-term maintainability. Like financial debt, it compounds over time. The first consequence is a rising defect rate. As the codebase accumulates shortcuts, workarounds, and poorly understood interactions between components, changes to one part of the system increasingly produce unexpected failures in other parts. Regression testing grows to cover the expanding surface area of risk. Each Sprint Review includes a longer tail of bugs discovered during testing. The second consequence is slower feature delivery. In a clean codebase, adding a new feature means implementing the feature. In a highly indebted codebase, adding a new feature means first understanding the existing code well enough to add to it safely, then navigating the entanglements that make the change more complex than it should be, then testing more thoroughly than the feature complexity would warrant because the test suite does not provide sufficient confidence. Teams that track velocity rigorously over two to three years in a codebase that accumulates debt without repayment consistently observe a declining trend that has nothing to do with team capability and everything to do with the structural condition of the code.

The technical practices that sustain delivery speed

  1. Test-driven development. Writing a failing test before writing production code is not primarily a testing technique — it is a design technique. The discipline of writing the test first forces a clarity about what the code is supposed to do before committing to how it does it. The test suite that accumulates over the life of a product is a safety net for refactoring: it provides the confidence to change the internal structure of the code without breaking the external behaviour. A codebase without a comprehensive test suite cannot be refactored safely, which means it cannot be maintained, which means debt accumulates without the ability to repay it. TDD is the foundational practice that makes all the other technical practices sustainable.

  2. Continuous refactoring. The boy scout rule of software development — leave the code better than you found it — is the operational expression of continuous refactoring. Refactoring means changing the internal structure of the code without changing its external behaviour, to make it easier to understand and modify. Done continuously in small increments as part of normal feature work, refactoring prevents debt from accumulating to the point where a dedicated debt-repayment sprint is needed. Dedicated refactoring sprints are a symptom of a team that has been prevented from refactoring continuously — the better approach is to never let the codebase degrade to the point where extraordinary intervention is required.

  3. Architecture fitness functions. Architectural decisions — the choice of layering strategy, service boundaries, dependency directions, or patterns for handling cross-cutting concerns — are difficult to enforce through code review alone. Architecture fitness functions are automated checks that verify that the codebase stays within the constraints the team has agreed are important. They might check that no module in the domain layer directly references a module in the infrastructure layer, that cyclomatic complexity in a given module does not exceed a threshold, or that no new dependencies are introduced on deprecated libraries. Running fitness functions in the continuous integration pipeline makes architectural drift visible at the point where it is introduced rather than months later when it has become entrenched.

  4. Mob programming for knowledge sharing. The most dangerous form of technical debt is knowledge debt — the condition where one or two team members are the only ones who understand a critical part of the system. Mob programming — the whole team working together on one thing at a time at a single keyboard — is the most aggressive approach to distributing knowledge. Even teams that do not practice full mob programming benefit from regular ensemble sessions on the highest-complexity parts of the system, on architectural decisions, and on the parts of the codebase that carry the highest concentration of knowledge debt.

Making the technical excellence argument to a product owner

The argument that works is not about code quality — it is about delivery predictability and feature throughput. Three approaches have practical traction. First, translate debt into cycle time. If the team can demonstrate that the same type of feature took four story points two years ago and now takes eight, the debt is no longer abstract — it is a measurable deterioration in the team's capacity to deliver what the product owner wants. Second, show the defect trend. If each sprint brings more bugs from the previous sprint's work, the defect rate charts tell the story without requiring the product owner to understand anything about code structure. Third, make debt visible through team agreements. Establishing a team definition of done that includes refactoring to the boy scout standard, keeping test coverage above an agreed threshold, and passing all fitness function checks creates a structural commitment to technical quality that does not depend on winning each debt-versus-feature argument one at a time.

If your team is struggling to sustain delivery speed — dealing with a codebase where every feature takes longer than it should, where defect rates are climbing, or where technical quality and product delivery are in constant tension — XNM's programme and project delivery practice works with development teams and product leaders to establish the technical practices and governance that make sustained delivery speed achievable, not just a target.