Agile software development requires technical excellence

tl;dr; If you want the fastest possible schedule, pay continuous attention to technical excellence.

In response to my complaint about letting deadline pressure lead to poorly designed, buggy code, one of my colleagues wrote this:

... we're doing agile. We are going to iterate and make it better.

That response gave me pause, because as far as I can tell, Agile requires focusing on technical excellence not skipping it. For instance, the Agile Manifesto has this principle:

Continuous attention to technical excellence and good design enhances agility.

An important corollary to that principle is that technical mediocrity and poor design hurt agility. Ironically, by brushing off attention to technical excellence because Agile, my colleague was breaking an Agile principle.

Technical excellence is arguably one of the more important Agile principles. One of the Agile Manifesto signatories is Robert C. Martin, author of Clean Code and other popular books on Agile software development. When an Agile manifesto signatory writes an entire book on clean code, the implication is that technical excellence is important.

Even if the team is not doing Agile, quality remains key to achieving rapid delivery. In his book Rapid Development, which is not about Agile, McConnel (2014, ch. 3) enumerates fourteen classic mistakes in software development process, five of which implicate lack of technical excellence:

  • Overly optimistic schedules which abbreviate "critical upstream development activities... such as design."
  • Shortchanged upstream activities which usually lead to doing "the same work downstream at anywhere from 10 to 100 times the cost."
  • Inadequate design with a "design emphasis is on expediency rather than quality."
  • Shortchanged quality assurance such as "eliminating design and code reviews..." or giving "design reviews and code reviews... short shift."
  • Code-like-hell programming which is a "fast, loose, all-as-you-go coding" approach which is sometimes presented as "entrepreneurial."

These classic mistakes make us stiff and slow whereas continuous attention to technical excellence makes us agile and fast. Our development velocity increases by doing the opposite of those classic mistakes.

  • Make a realistic schedule.
  • Attend to upstream activities.
  • Do adequate design.
  • Attend to quality assurance.
  • Do slow-and-steady coding.

Attending to technical excellence is hard, but it is doable, it is faster, and it is worth it. In addition to increasing delivery velocity, it has positive side effects such as increased team morale.

References Free, peer-reviewed reading on Agile and code quality in the Software Quality Assurance site in StackExchange.

Martin, R. C., Coplien, J. O., Wampler, K., Grenning, J. W., Schuchert, B. L., Langr, J., Ottinger, T. R., ... Feathers, M. C. (2016). Clean code: A handbook of agile software craftsmanship.

McConnell, S. (2014). Rapid development: Taming wild software schedules. Redmond (Washington: Microsoft Press.