Enable javascript in your browser for better experience. Need to know to enable it? Go here.

From specification to production: Building enterprise software with agentic AI

How agentic AI is reshaping software implementation

 

A production-grade, cloud-native enterprise platform with multiple backend microservices, a web frontend, a full test suite and a complete cloud infrastructure deployment pipeline, was built entirely from natural language specifications.

 

Tens of thousands of lines of code across hundreds of source files. Zero lines written by a human developer.

 

This is not a claim about a prototype or a weekend toy project. It is a claim about production-grade software: layered architecture, security controls, database migrations, infrastructure-as-code, CI/CD-ready deployment scripts and automated tests: all generated by an AI agent working from conversational prompts.

 

This article documents how it was done, why it worked and what it signals about the future of software delivery.

 

 

What is agentic AI?

 

Before getting into the project, it is worth being precise about terminology.

 

Earlier AI assistants were largely designed to respond to prompts rather than independently plan, act, inspect results and iterate across a multi-step task.

 

An agentic AI is fundamentally different. It:

 

Plans: Breaks a high-level goal into a sequence of steps

 

Acts: Uses tools to gather information and make changes

 

Observes: Inspects the result of each action before proceeding

 

Iterates: Revises its approach based on what it observes

 

Persists: Maintains context across a long, multi-step task

 

The agent operated inside an IDE with access to the file system, the terminal and the running services. It could read any file, run any command, inspect any log and edit any code, all in response to natural language instructions.

 

This is the core capability that makes the claim above possible. Not just code generation,  but agentic code generation with verification.

 

 

The specification-to-implementation loop

 

Traditional software delivery has a well-known bottleneck: the gap between what a business stakeholder can describe and what an engineer can build. Requirements go through analysis, design, refinement, implementation, testing and review. Each handoff introduces delay and distortion.

 

Agentic AI collapses this loop. The process looks like this:

 

Stakeholder describes a requirement in plain language. 

                 │                                                  
                 ▼                                                   

Agent reads the existing codebase to understand context. 

                 │                                                  
                 ▼                                                   

Agent designs the implementation. 

                 │                                                  
                 ▼                                                   

Agent writes code across all affected files simultaneously. 

                 │                                                  
                 ▼                                                   

Agent runs the code and observes the output. 

                 │                                                  
                 ▼                                                   

Agent identifies failures and diagnoses root causes. 

                 │                                                  
                 ▼                                                   

Agent applies fixes and verifies. 

                 │                                                  
                 ▼                                                   

Working software.

 

 

Each iteration of this loop happened in minutes, not days. The human role was providing the specification and validating that the output matched the intent.

 

 

How requirements were expressed

 

None of the requirements were written as formal specifications, user stories or technical design documents. They were expressed as natural language messages the same way you would explain something to a colleague.

 

 

Functional requirements

 

”A user should be able to complete a key transaction without needing to log in  just using their account reference.”

 

”After completing an action, the summary shown on the dashboard should update immediately without a page refresh.”

 

”The administrator should be able to initiate a batch processing run for a specific period and review the results.”

 

 

Operational requirements

 

“Create a script that resets all the demo data so we can run the demo again from a clean state.”

 

”Make sure the script is safe to run multiple times without causing errors.”

 

 

Infrastructure requirements

 

”Deploy this to the cloud. The frontend should be behind a CDN and only accessible from our office network.”

 

”The database should not be publicly accessible.”

 

 

Debugging requests

 

“Authentication isn’t working. I get an error even with the correct credentials.”

 

“The transaction is completing on the frontend but the status isn’t reflecting the change.”

 

In every case, the agent translated the natural language intent into working code without requiring the human to specify implementation details.

 

 

How the agent worked: Five core behaviors

 

1. Read before write

 

Before making any change, the agent read the relevant files to understand the existing patterns, naming conventions and architecture. It never overwrote a file blindly. This meant the generated code was consistent with what already existed: same patterns, same error handling, same test structures.

 

When a session was resumed after a break during which some files had been changed, the agent re-read each file before editing it rather than assuming its previous version was still current.

 

 

2. Minimal, targeted changes

 

The agent did not refactor existing code when asked to fix a bug. It identified the precise location of the problem and made the smallest change that would resolve it.

 

When a transaction flow was broken due to a wrong field name being sent to an external API, the fix was one line. The agent did not rewrite the entire service.

 

This discipline of fixing what is broken, leaving what works, is what separates a capable agent from a naive code generator.

 

 

3. Cross-file coherence

 

A single business requirement typically requires changes across multiple layers. A new capability requires coordinated changes across the API layer, the business logic layer, the data layer, the frontend and the configuration, all of which must be consistent with each other.

 

The agent held all of these in context simultaneously. When implementing a feature, it identified every file that needed to change, made all the changes in the correct order and verified that the system worked end-to-end.

 

 

4. Autonomous debugging

 

When code failed at runtime, the agent did not ask the human to diagnose the problem. It read the log output, traced the error back through the call stack, identified the root cause, which was often in a different file or service from where the error was thrown, applied the fix and verified the result.

 

Distributed system bugs where a failure in one service is caused by a misconfiguration in another were diagnosed and resolved the same way.

 

 

5. Security by default

 

Security controls were applied without being requested. Every generated system had:

 

  • Password hashing using industry-standard algorithms with appropriate cost factors.

     

  • Token-based authentication with short expiry windows.

     

  • Parameterized database queries with no string interpolation.

     

  • Non-root process execution in container environments.

     

  • Credential management via secrets vaults; never hardcoded in source.

     

  • Network access controls restricting public exposure of internal services.

     

These were not in the specification. They were applied because the agent understood that production software requires them.

 

 

The scale of what was generated

 

The platform spanned the full breadth of a modern enterprise system:

 

  • Multiple independent backend services, each with its own database, domain model and API surface.

     

  • A web frontend with separate portals for different user roles.

     

  • A full cloud infrastructure stack: container orchestration, managed database, load balancer, CDN, access controls, object storage and secrets management.

     

  • A mock layer simulating third-party integrations so the system could be tested end-to-end without live external dependencies.

     

  • Automated tests, database migration scripts and operational tooling.

 

Across all of this, every file, source code, infrastructure definitions, SQL scripts, shell scripts, configuration was generated by the agent. The human contribution was the specification and the validation.

 

The backend services followed Domain-driven Design principles: domain entities, application services, repository interfaces and infrastructure implementations clearly separated without this architecture being specified. The agent chose it because it recognized the problem domain warranted it.

 

 

What the agent could not do alone

 

Agentic AI can operate autonomously within a task, but it cannot do everything alone.

 

 

What to build 

 

The agent is excellent at determining how to build something. Deciding what to build: which features matter, which user journeys to prioritise, what the business rules actually are is a human responsibility. The agent executes specifications; it does not originate them.

 

 

Domain knowledge 

 

Business rules specific to the domain had to be provided. The agent encoded them correctly once stated.

 

 

Real credentials and secrets

 

The agent created the structures for managing secrets but never generated or guessed actual credentials. Those required human input.

 

 

Taste and product judgment

 

Whether a user interaction feels right, whether a feature genuinely solves the problem are human judgments that the agent cannot make.

 

 

What this changes about software delivery

 

For decades, one of the major bottlenecks in software delivery has been implementation: the time it takes to turn a clear specification into working code. Agentic AI can now compress that part of the process dramatically.

 

As implementation gets faster, specification quality becomes an increasingly important bottleneck. The clearer and more precise the intent, the better the output. Vague requirements produce vague software. Precise requirements produce precise software.

 

This places new demands on product managers, business analysts and domain experts. Their ability to articulate requirements precisely and to evaluate outputs critically is now the rate-limiting factor in delivery.

 

 

The role of the engineer is shifting

 

Engineers who work alongside agentic AI are not replaced, they are elevated. Their value now lies in reviewing generated code for correctness and security, identifying architectural problems before they propagate, diagnosing complex failures and making judgment calls on trade-offs the agent cannot evaluate.

 

The engineer who can direct an agentic AI precisely, review its output critically and course-correct effectively is vastly more productive than one who writes every line manually.

 

 

The cost structure changes

 

In cases like this, work that would traditionally require substantial engineering effort can potentially be delivered by fewer people and in significantly less time. 

 

A project of this scope was estimated to take around 96 weeks using a traditional delivery approach. With agentic AI, it was completed in four weeks. While that comparison reflects this specific project rather than a universal productivity benchmark, it illustrates how significantly agentic development can compress implementation timelines.

 

 

Prompting patterns that produced good results

 

Describe intent, not implementation. State what you want to achieve, not how to achieve it. ”A user should be able to see their current status without refreshing the page” rather than ”Add a polling mechanism to this component.”

 

Describe symptoms, not fixes. When debugging, describe what is wrong, not what you think the fix is. ”The transaction completes but the status display doesn’t update.”

 

Specify constraints explicitly. State non-functional requirements directly. ”This script must be safe to run multiple times.” ”This action should not require the user to be logged in.”

 

Reference existing patterns. Point the agent to patterns it should follow. ”Follow the same structure used in the other services.”

 

Validate outputs incrementally. Test each piece of functionality before moving to the next. Ask the agent to verify the current state is healthy before proceeding to the next feature.

 

 

The broader signal

 

This project is a data point in a much larger shift. Agentic AI systems are moving from demonstration to production use across software engineering. The capability demonstrated here, specification to working, tested, deployable software will become a standard part of how enterprise software is built.

 

The question is increasingly shifting from whether AI can generate production-quality code to how organizations can use that capability safely and effectively.

 

The questions that matter now are: How do organizations restructure their delivery processes around agentic AI? What new skills do product and engineering teams need? How do quality and governance practices evolve when the author of most code is an AI? Where does human judgment remain irreplaceable, and how do we protect that role?

 

These are not distant questions. They are immediate.

 

 

Conclusion

 

A complete enterprise platform. Multiple services. Full cloud deployment infrastructure. An automated test suite. Operational tooling. All from natural language specifications, with zero lines written by hand.

 

This project demonstrates how far the capability has progressed. The harder question now is how teams choose to incorporate it into real delivery environments.

 

Agentic AI does not eliminate the need for human expertise in software delivery. It concentrates that expertise where it actually matters: understanding the problem, expressing it precisely and evaluating whether the solution is right.

 

Increasingly, implementation itself can become a conversation.

Disclaimer: The statements and opinions expressed in this article are those of the author(s) and do not necessarily reflect the positions of Thoughtworks.

Explore a snapshot of today's tech landscape