In our previous post, we explored the mathematical realities of agentic LLM architectures, detailing how deterministic harnesses and human-in-the-loop (HITL) evaluations prevent cascading failures. But if we step back from the probability formulas, a profound realization emerges: the architectural challenges we face with AI agents today are almost identical to the human management challenges we faced two decades ago.
In 2006, I co-authored a paper titled "Degree of Freedom - Experience of Applying Software Framework". Back then, we were not managing Large Language Models; we were managing global virtual system development teams. Yet, the core software engineering principle we applied then is exactly what we rely on now. We just use a different vocabulary.
Whether dealing with offshore human developers in 2006 or autonomous digital colleagues in 2026, unchecked freedom in a complex system inevitably leads to entropy.
The 2006 Problem: The Design-Implementation Gap
Twenty years ago, a major challenge in programming-in-the-large (PITL) was managing the control between upstream design teams and downstream implementation teams. Ideally, an implementation team would take a user-requirement-based design and execute it closely. In practice, this was incredibly difficult to enforce across different geographical locations and time zones.
We realized that the primary cause of this design-implementation gap was the degree of freedom granted to the implementation developers. Given system design, developers simply had too many ways to implement it.
When developers are given too much freedom, human nature and individual coding habits take over:
- Developers would frequently bypass the structure of the original design by adding new classes to make their own coding easier.
- Junior developers, failing to recognize necessary architectural layers, would mix persistence operations, presentation logic, and business operations all into a single server page.
- Developers would bring in their own pre-existing habits, causing the implementation to drift further from the intended design.
Object-oriented programming was supposed to impose discipline, but we discovered that OO without strict discipline was just as chaotic as unstructured programming with goto statements.
The 2006 Solution: Limiting Freedom via Frameworks
To bridge this gap, we adopted and eventually open-sourced a software frameworks (Struts, Hibernate, MVC pattern, etc). Our original goal was to standardize development and reuse major components. However, the most powerful benefit came as a surprise: the framework allowed us to efficiently manage the design-implementation gap.
The frameworks solved our problems by fundamentally limiting the developers' choices:
- It constrained developers, forcing them to follow the framework's structure rather than improvising their own designs to make things work.
- It homogenized the highly diversified coding styles and habits of developers, which was especially crucial in development centers with high turnover rates.
- It made any deviations highly visible; if a developer tried to overload a single page with too much logic, the framework violation became immediately obvious during code reviews.
By limiting the degree of freedom, we standardized the process and ensured reliability.
Fast Forward to Today: Harness Engineering for Digital Colleagues
Today, we are building agentic pipelines where LLMs act as our "downstream implementation team." And once again, we are facing a massive design-implementation gap.
An LLM has a near-infinite degree of freedom. If you give an open-ended prompt to an LLM, it has billions of latent pathways it can take to generate an answer. Without constraints, it will "improvise"—which we now call hallucinating. It will mix logic, ignore the intended architecture, and output unstructured data, much like a junior developer in 2006 trying to cram all business and persistence logic into a single script.
In our previous post, we discussed how to fix this using Harness Engineering. A harness is simply the 2026 term for a framework.
When we build a deterministic harness around an LLM (such as enforcing strict JSON schemas, unit test validation, or routing the agent through a rigid LangGraph state machine), we are doing exactly what the frameworks did two decades ago. We are removing the agent's degree of freedom.
- Instead of hoping the AI formats correctly, a structural harness forces it into predefined operational layers.
- Instead of relying on the AI's "creativity," a deterministic evaluator acts as the ultimate code review, instantly catching any deviation from the required schema.
- Instead of unconstrained generation, we limit its choices so that its output is homogenized, predictable, and manageable.
The Enduring Principle of Software Engineering
Technology evolves at a blinding pace, but the fundamental laws of systems engineering do not. The transition from human offshore teams to digital LLM colleagues has not changed the rules of the game.
Discipline is the bedrock of production software. Twenty years ago, we instilled that discipline by building frameworks to constrain human developers. Today, we instill it by building deterministic harnesses to constrain AI agents. The names have changed, but the secret to reliable architecture remains exactly the same: carefully control the degree of freedom.



