The Architecture of Intent: Why Large Organizations Need Specification-Driven Development

The Architecture of Intent: Why Large Organizations Need Specification-Driven Development

I remember the first time I truly understood the power of a specification. It wasn’t in a boardroom or a high-level strategy meeting; it was back in the 80s, staring at the technical reference manual for a Commodore 64. That machine didn’t care about my intentions; it cared about the memory map, the registers, and the precise sequence of operations required to make a sprite move across the screen. If I got the hex code wrong—say, a bad POKE to the VIC-II registers—the system didn’t "fail gracefully." It crashed. Or worse, it did something entirely unexpected. That environment taught me a fundamental truth: technology is a conversation between human intent and machine logic. If you don’t define the intent with absolute precision, the machine will fill in the gaps with its own, often chaotic, logic.

Fast forward to today, and we find ourselves in a strange, paradoxical era. We have more abstraction, more "reassuring" frameworks, and more agile ceremonies than ever before. Yet, in large enterprise environments, we are drowning in what I call "vibe-coding"—a state where we rely on the implicit understanding of teams, the "magic" of AI agents, and the hope that if we just keep moving fast in two-week sprints, the system will somehow coalesce into something coherent.

It won’t.

In large agile scrum organizations, we have mistaken the process of delivery for the substance of engineering. We have turned Agile into a religion of Jira tickets and stand-ups, forgetting that the original manifesto was about individuals and interactions over processes and tools. When you scale this to hundreds of developers, the "individuals and interactions" become diluted, and the "processes and tools" become the only thing holding the structure together. This is where Specification-Driven Development (SDD) isn’t just a technical choice; it is a survival strategy.

The Problem with "Vibe-Driven" Agile

In large organizations, the biggest risk isn't that we can't write code; it's that we don't know what to write. We have become experts at building features, but we are losing the ability to build systems.

Article content

I recall a project at a previous firm where we were tasked with automating a complex regulatory reporting workflow. The user story was simple: "As a compliance officer, I want to generate a quarterly risk report." We treated it as a standard ticket. The team, eager to show velocity, started coding immediately. Three months later, we had a system that generated reports, but the underlying data reconciliation logic was inconsistent across regions. Because we hadn't defined the state transitions of a "report" or the invariants of the data, the system was a black box. When the regulators asked for an audit trail, we couldn't explain how the numbers were derived. We spent the next six months refactoring a system that should have been designed correctly from day one. That was a $2 million lesson in the cost of "vibe-coding."

But here is the messy, uncomfortable truth: sometimes, the spec is the problem. I once spent six months meticulously architecting a state-machine-heavy system for a legacy migration, only to realize that the business requirements were fundamentally shifting underneath us. We had built a beautiful, rigid, and entirely useless cathedral. The "spec-first" approach had blinded us to the reality that the business didn't actually know what it wanted yet. We were so obsessed with the purity of our invariants that we ignored the chaotic, shifting reality of the market. Sometimes, you need to build a shack before you build a cathedral.

Speaking of shacks, I once spent an entire weekend trying to fix a corrupted tape drive for a friend’s backup system, only to realize the "corruption" was just a loose cable I’d been ignoring because I was too busy trying to rewrite the driver code. It was a humbling reminder that sometimes the most complex-looking problems are just physical, stupid, and entirely unrelated to the "architecture" you’re so proud of.

The Specification Mandate

SDD demands writing durable intent down before implementation. It is the practice of defining the "what" and the "why" with such rigor that the "how" becomes a logical consequence of the specification.

Article content

Think of it like protocol engineering. When the architects of the Internet defined TCP/IP, they didn't just start coding. They wrote RFCs—documents that defined the behavior of the system so clearly that anyone, anywhere, could build an implementation that would interoperate with everyone else.

In a modern enterprise, your "spec" should be the equivalent of an RFC for your business logic. Instead of a vague user story, consider a state machine definition. For our reporting project, a spec snippet might look like this:

  1. State: Draft -> (Validate) -> Validated
  2. State: Validated -> (Submit) -> Submitted
  3. State: Submitted -> (Audit) -> Approved | Rejected
  4. Invariant: A report cannot be 'Approved' unless 'Data_Source_Checksum' matches 'Target_System_Hash'.

This is declarative. It describes the desired state, not the steps to get there. It is layered, separating product vision from technical constraints. And it is executable—you can write tests against this state machine before a single line of production code is written.

Integrating SDD into the Scrum Machine

The common objection I hear is that "specs are waterfall." This is a misunderstanding. A spec is not a 200-page document written in a vacuum. It is a living, breathing artifact that evolves.

Article content

How do you handle mid-sprint changes? You treat the spec as a versioned asset. If a requirement shifts, you update the state machine or the invariant first. The code follows. This isn't waterfall; it's engineering discipline. If you are running Scrum, use your refinement sessions to build the spec. Use process maps and state transition diagrams to expose the logic. If you can't draw the state machine of your feature, you don't understand it well enough to code it. This compresses the waste that would otherwise show up as bugs, rework, and technical debt.

The Role of AI: Spec-as-Code

We are currently in a phase where everyone is excited about AI coding agents. But if you feed an AI agent a vague user story, you get "vibe-coded" software—code that looks correct but is fundamentally flawed.

Article content

AI agents are excellent at pattern completion, but they are terrible at understanding implicit business intent. If you want to leverage AI, you must provide it with a "Spec Layer." This is where "Spec-as-Code" comes in. By using formalisms like JSON schemas for data contracts or even TLA+ for critical logic, you create a bridge between human intent and AI execution. You aren't just asking the AI to write code; you are asking it to implement a defined set of invariants. The AI becomes a tool for verification and implementation, not a substitute for thinking.

The Tooling Trap

Article content

Jira, for all its ubiquity, is a primary culprit in the "vibe-coding" epidemic. It encourages a fragmented, ticket-based view of reality where the "what" is buried in a comment thread and the "why" is lost in the shuffle of a sprint board. It treats software development as a manufacturing process—moving widgets from 'To Do' to 'Done'—rather than an engineering discipline. When the ticket becomes the source of truth, the system architecture inevitably suffers. We need to stop treating Jira as a design tool and start using it for what it is: a glorified task tracker that should remain subservient to the actual specification.

The Gray Area: When to Skip the Spec

Article content

I am not suggesting we write a formal specification for every minor UI tweak or CSS change. There is a place for high-velocity prototyping. If you are building a throwaway experiment to test a market hypothesis, don't waste time on formal specs. The cost of the spec will exceed the value of the learning. SDD is for systems that need to last, systems that need to be audited, and systems that need to scale. Know when to be rigorous and when to be fast.

The Discipline of the "Narrow Interface"

The most elegant systems I’ve worked on all shared one trait: they had narrow, well-defined interfaces. They didn't try to do everything for everyone. They had clear boundaries.

SDD forces you to define these boundaries. It forces you to ask: "What is the absolute minimum I need to define to make this work?" It’s the 8-bit philosophy applied to architecture: small, meaningful, and precise steps.

Article content

When you move from "vibe-coding" to "spec-driven development," you change the culture of your organization. You stop rewarding the person who closes the most tickets and start rewarding the person who defines the most elegant, robust, and clear specifications. You move from a culture of "just get it done" to a culture of "get it right."

Here is a controversial take: I believe that if your team cannot explain the system’s state machine on a whiteboard in under ten minutes, your architecture is already bankrupt. No amount of "agile maturity" or "DevOps tooling" will save you from the rot of an undefined system. Stop hiding behind the complexity of your microservices; if you can’t map the state, you’re just guessing.

A Final Thought: Your First Step

I’ve spent my life moving between the abstraction of mathematics and the concrete reality of code. I’ve learned that the most dangerous thing in technology is the assumption that we understand each other. We rarely do.

Article content

If you want to pilot SDD without a total process overhaul, try this: in your next sprint, pick one complex feature. Before any code is written, require the team to produce a single-page "Logic Contract." It should define the inputs, the outputs, the state transitions, and the critical invariants. No Jira ticket can be moved to "In Progress" until the contract is reviewed and agreed upon by both the product owner and the lead engineer. It’s a low-friction experiment that will immediately reveal how much of your current "velocity" is actually just guessing.

To view or add a comment, sign in

More articles by Francesco Morini

  • The Ghost in the Machine: Why Orchestration is the Only Truth in Enterprise AI

    I spent a significant portion of my formative years in the glow of a Commodore 64, not as some wunderkind building the…

  • When Everything Changes, Look for What Remains the Same

    I grew up in Pistoia in the late 70s and 80s. It was a town where the sound of the evening was the clatter of shutters…

    1 Comment
  • Why Things Happen: A Geek’s Guide to the Stack of Reality

    I was eight years old, hunched over the glowing, phosphor-green CRT of my Commodore 64. I was trying to write a routine…

  • Claude Mythos

    The model too powerful to sell There is a special kind of technology announcement that makes me feel I have…

    1 Comment
  • Simple As A Service

    Every few months, technology discovers a new apocalypse and gives it a very marketable name. Right now, one of the…

    2 Comments
  • How much for a pint?

    There are few questions more innocent than this one. How much for a pint? It sounds like the kind of sentence that…

  • Tech screws up sometimes, and that’s okay

    here's a comforting little lie that comes with every big tech launch. This time it's different.

  • To the spirit that lives in the computer

    To the spirit that lives in the computer I understand vibe coders. I understand them so well that I reserve the right…

  • Fight, Win, Prevail?

    There’s a specific kind of delusion that only hits at the end of an era. It’s not there at the start, when everything…

  • How many neurons do you need to play Doom?

    Every era gets the benchmark it deserves. The 1990s had MHz.

Explore content categories