For years, the software industry has been chasing the dream of "zero-overhead" development. The narrative was seductive: remove the bureaucracy, bypass the lengthy requirements gathering, and let the developers—or, more recently, the AI agents—simply build. The prevailing sentiment suggested that detailed specifications were relics of an "old-world" engineering culture, a heavy anchor slowing down the lean, high-velocity ship of modern development.
However, a critical shift is underway. As we transition from simple LLM chatbots to autonomous, agentic workflows, the illusion that "vibe-coding" is a sustainable methodology is shattering. In the agentic era, implementation has become remarkably cheap, but that very efficiency has exposed a dangerous gap in our processes: when you can build a system in minutes, you can also build a fundamentally wrong system in minutes.
The Mirage of Cheap Implementation
The allure of the "rough goal" prompt is powerful. It gets a project off the ground immediately, providing a dopamine hit of progress as the agent begins churning out code. But as any experienced engineer knows, the "correction loop" is where the hidden costs live.
When a prompt is underspecified, the human developer becomes the "oracle." You review the output, clarify the intent, ask for changes, rerun tests, and find the next gap. This cycle is not merely a refinement process; it is the iterative labor of defining the problem on the fly. In the old world, human slowness acted as a natural brake on this process. We were forced to think because writing code was physically and mentally expensive.
Today, agents eliminate that friction. An underspecified idea can now reach a state of "plausible functionality" before anyone has formally agreed on what the system is supposed to do. In the old world, vague requirements hit human slowness. In the agent world, vague requirements hit machine speed. The result is a system that looks coherent but is conceptually hollow, leading to diagnostic nightmares.

The Evolution of the Engineering Lifecycle
Historically, software engineering was never primarily about typing code. It was about decision-making: determining what should exist, identifying the "never-events," navigating trade-offs, and defining what "done" means in the messy context of the real world.
For decades, teams uncovered missing specifications through a process of human friction. A QA engineer would find an edge case; a senior developer would translate implicit requirements during a meeting; a product manager would catch a logic flaw during a demo. It was an inefficient, often messy process, but it served a vital purpose: it forced ambiguity into the open.
The Shift in Effort Distribution
Data suggests that as implementation automation increases, the relative effort required to write code plummets, while the effort required for specification and verification rises to become the primary bottleneck.
If you view the development lifecycle as a curve, the "minimum total cost" has shifted significantly to the right. The most successful teams are finding that the sweet spot is no longer "minimalist" but "structured." It requires:
- Enough structure to constrain the agent’s path.
- Concrete examples to ground the intent.
- Executable checks that prevent review from becoming a game of guessing.
Specification Validation: The Missing Line Item
The industry has largely adopted a flawed sequence: "Write the spec, then let the agent build." The missing, and most expensive, step is the validation of the spec itself.

Even a carefully drafted document can fail in familiar ways. It may contain internal contradictions, cover the "happy path" while ignoring critical failure modes like rate limits or retries, or describe behaviors that are precise but impossible to verify. Worse, a spec can be "precise in the wrong way"—describing exactly what was written, but not what was intended.
To mitigate this, forward-thinking teams are implementing a "Spec-as-a-Product" workflow. Before a single line of implementation code is generated, the specification must undergo a stress test:
- Drafting: Use an agent to draft the smallest possible spec that allows for safe implementation, focusing on nongoals, acceptance criteria, and edge cases.
- Adversarial Review: Hand that draft to a different agent with instructions to find contradictions, ambiguous terms, and hidden dependencies.
This adversarial workflow lowers the cost of reaching a "human-judgment-worthy" specification. By the time a human reviewer looks at the spec, it has already been stripped of its most obvious logical flaws.
Multi-Agent Systems and the Contractual Necessity
When a single agent works on a bounded task, it is easy to steer. The "blast radius" is small, and human oversight is intuitive. Multi-agent systems, however, represent a paradigm shift.
In a multi-agent pipeline, the output of Agent A becomes the input for Agent B. If Agent A suffers from "interpretive drift"—a slight misunderstanding of a requirement—Agent B will treat that flawed output as ground truth. By the time the final result reaches a human, the original error is buried under layers of competent-looking, yet fundamentally incorrect, work.

In this environment, the spec is no longer just guidance; it is a contract. This contract requires:
- Schemas and Invariants: Rigid definitions of data shapes.
- Validation Rules: Machine-checkable criteria that trigger before handoffs.
- Executable Acceptance Tests: Using BDD (Behavior-Driven Development) to ensure that the handoff between agents is stable and repeatable.
Context Rot and the "Code as Spec" Ideal
There is a point of diminishing returns in specification. As teams add more design prose, tickets, and legacy documentation, they encounter "context rot." For current AI models, larger input contexts can actually lead to lower reliability.
When a prompt contains current implementation, historical design notes, and stale documentation, the model ceases to follow a single source of truth. It begins to "average" across competing sources, often failing to distinguish between an active requirement and a note from a discarded session.
To combat this, teams must learn when to delete. Once a system reaches a certain maturity, the code should—ideally—become the spec. This is achieved through AI-friendly API design:
- Explicit over Implicit: Avoid magic, convention-based hidden behavior, and loosely typed parameters.
- Task-level Methods: Ensure methods align with real-world business tasks.
- Introspection: Design APIs that allow agents to query their own capabilities and constraints.
When an API is designed for discoverability, an agent can inspect the surface area, understand what is legal, and recover from errors without needing a massive, stale document to guide it.

Implications: The New Role of Agile and XP
Does the agent era make Agile or Extreme Programming (XP) obsolete? Quite the contrary—it makes them more relevant, albeit in different ways.
Methodology as "reassurance"—the ceremony used to coordinate humans—is fading. However, methodology as "error detection" is becoming essential.
- Feedback Loops: Because agents can generate large-scale systems in a morning, the need to discover that the idea was "wrong" by lunchtime is more critical than ever.
- Test-First Thinking: Executable checks are the only way to gate the high-speed output of agents.
- Small Releases: When agents can perform massive changes, the temptation to ship 4,000-line diffs is high. This must be resisted. Reviewing, rolling back, and diagnosing small, discrete batches remains the most effective defense against the "perfectly confident" errors machines can produce.
Conclusion: The Responsibility of the Architect
The promise of agentic development is not the elimination of effort, but the optimization of it. The teams that achieve the highest leverage will not be those who discard specifications, but those who understand the nuance of the specification curve.
For exploratory work, specify boundaries. For deterministic work, specify outcomes. For multi-agent systems, specify contracts.
The agents are evolving, and their capacity to produce code will continue to outstrip our capacity to review it. Ultimately, the burden of definition remains ours. We are moving from an era of "writing code" to an era of "engineering intent." The machines can do the heavy lifting, but we must be the ones to define the shape of the world they build.






