Skip to Content

Specification-Driven Development

The record before the code
September 24, 2026 by
Luis Roberto Aguirre Salazar

Most custom software for a critical process does not fail because the code was wrong. It fails because, six months after it went live, nobody can point to the document that says what it was actually supposed to do.

What exists instead is usually a trail of Slack messages, a few calls, a change request mentioned in passing and never written down, and a system that behaves the way the last conversation left it. Everyone involved could probably reconstruct most of the logic if asked. Almost nobody could produce the record that proves it.

Specification-driven development (SDD) is a response to exactly this gap. The idea is not new in principle, write down what the system must do before building it, but the discipline is usually the first thing dropped under deadline pressure. SDD treats the specification differently: not as a document written once at kickoff and forgotten, but as the artefact of record for the life of the project. The code implements the specification. The specification is what gets reviewed, approved and updated when scope changes.

For processes that matter, the ones that get audited, inspected or challenged after the fact, that distinction is not a technical preference. It is the difference between being able to explain a system and being able to guess at it convincingly.

An audit trail, not a formality

A specification written and kept as the reference for a project does something a chat thread cannot: it creates a single place where "this is what we agreed the system would do" lives, with a version history. When a requirement changes, the change happens in the specification first, with whoever owns the process signing off on it, and only then in the code.

This matters most at the exact moment a project usually cannot produce it, during a review, an audit, or simply a new team member trying to understand why the system behaves the way it does. Rebuilding that understanding from code alone is slow and unreliable. Rebuilding it from a specification that was actually kept current is a matter of reading it.

Where accountability usually breaks

The common failure pattern is not a single dramatic mistake. It is a series of small, reasonable-sounding shortcuts: a scope change agreed verbally to save a day, a business rule clarified in a meeting and never fed back into any document, an edge case handled one way in code without anyone deciding, in writing, that it should be handled that way. Individually, none of these look like a problem. Collectively, they are why nobody can say with confidence what a system is actually supposed to do a year after launch.

None of this requires bad intent. It is simply what happens by default when the specification is treated as a starting document rather than a living one.

What this changes for the people commissioning the system

SDD is often framed as a discipline for engineers. Its more important audience, for a critical process, is the person who owns that process and is not writing any code at all. A specification that is kept current is something a compliance lead, an operations owner or a director can read and approve without needing to interpret code, and can point to later when asked why the system does what it does.

The question worth asking a technology provider is not only "how was this built", but "where does what was agreed live, and who approved the last change to it".

A specification is not a guarantee

It is worth being direct about the limits of this. A specification reduces ambiguity about what was intended, it does not, by itself, guarantee the system was built correctly, or that the specification itself was right. It is a record, not a warranty. Its value is in making disagreements and mistakes visible and attributable, not in preventing them outright.

What this means in practice

None of this replaces good engineering, and a specification kept sloppily is not much better than no specification at all, it still requires discipline to update it every time scope moves. What it does, is remove the excuse. If the specification exists and is current, there is no ambiguity about whether a behaviour was intended or improvised. That is a lower bar than perfect software, but it is a bar most critical-process projects do not currently clear.

For anyone commissioning custom development on a process that matters, where "we are not entirely sure why it does that" is not an acceptable answer six months from now, specification-driven development is less a methodology choice than a precondition for being able to answer that question at all.

This is the discipline Rhisco applies to On Demand Development: starting from a clear understanding of the specification and using it as the working record for a solution built for a critical process, not a document filed away once the build starts. If that is the gap in a project you are commissioning, rhisco.com/services has more on how we work.

This article was co-created with the assistance of artificial intelligence under strict supervision, editing, and verification of our team.


You don’t need a lab or a platform
You need an owner and the right piece.