Don't Automate Roles. Automate Processes.
Autonomous AI agents have become one of the technology industry's biggest bets. We are being offered digital analysts, developers, researchers, support specialists and even complete virtual teams.
The idea feels natural. If people perform a large share of knowledge work, why not build software workers that can perform the same jobs faster and at lower cost?
But that framing may be sending us in the wrong direction.
When we model an autonomous agent after an employee, we often automate the entire human role rather than the useful work itself. Along with the work, we reproduce the need to search for information, reconstruct context, interpret ambiguous instructions, coordinate with others, make intermediate decisions and evaluate the result.
A powerful process automation technology ends up imitating a person trying to navigate a poorly designed process.
A role is not a process
Organizations are built around roles. An analyst gathers requirements, an architect makes technical decisions, a developer writes code and QA verifies the outcome.
But a role is not a single function. It is a bundle of unlike responsibilities.
An analyst does more than formulate requirements. They find documents, speak with stakeholders, decide which information is current, resolve contradictions and transfer their understanding to the next person.
A developer does more than write code. They reconstruct the intent behind a task, investigate the existing implementation, discover architectural constraints, choose an approach and check whether the change has broken another part of the system.
These responsibilities are bundled into roles because organizations need a practical way to divide human knowledge, communication and accountability. That does not make the role the ideal unit of automation.
A role is a useful interface for managing people. A process is the better interface for designing a system.
The digital employee inherits organizational complexity
Consider an autonomous developer agent asked to implement a feature. Before it can produce useful code, it may need to:
- find related files, tickets and documents;
- decide which sources are authoritative and current;
- reconstruct the product intent;
- infer the relevant architectural constraints;
- discover inconsistencies;
- choose an implementation plan;
- make the change;
- evaluate its own result.
Most of this is not feature implementation. It is cognitive scaffolding required to operate inside an environment where knowledge is scattered across a repository, documentation, issue trackers, chat history and people's memories.
For a person, these costs are often unavoidable. For a software system, they are an architectural choice.
We can ask an agent to reconstruct the project state from scratch every time. Or we can make that state explicit, structured and directly accessible to the machine.
Autonomy is a tax on an informal process
Autonomy gives a system flexibility. An agent can select tools, revise its plan, return to an earlier step and adapt when it encounters something unexpected.
That flexibility has a cost.
Every decision consumes time and computation. Every search can return incomplete or irrelevant context. Every intermediate conclusion becomes another potential point of failure. The longer the agent's trajectory, the harder it is to understand where it diverged from the intended outcome.
In a conventional program, many decisions are made when the system is designed. In an autonomous agent, those decisions move into execution time.
An autonomous agent is therefore often a process whose architecture has been deferred to runtime.
An explicit route becomes planning. A defined source becomes search. A formal transition becomes interpretation. Independent validation becomes a request for the model to judge its own work.
This can look impressive in a demonstration. In production, it can also mean higher cost, longer latency and failures that are difficult to reproduce.
The question is not whether a model can navigate this uncertainty. Increasingly, it can. The question is how much of that uncertainty should exist in the first place.
More agents do not necessarily mean more automation
A popular response to the limitations of one agent is to build a multi-agent system. One agent acts as the analyst, another as the architect, a third writes code and a fourth reviews it.
This resembles a human organization. It also reproduces the need for coordination between roles.
The agents must transfer context, interpret one another's output, reconcile decisions and determine responsibility for errors. The uncertainty does not disappear. It is distributed among more participants and compounded by communication overhead.
Sometimes separation is valuable. An independent critic can catch an executor's mistake. Specialized agents can work in parallel when their boundaries and outputs are clear. But adding another AI role does not, by itself, make the system more reliable.
Before adding an autonomous reviewer, ask whether the process needs another participant or a formal verification stage.
A coding example: before and after
Imagine a team needs to change an invoicing system so that only approved invoices can be exported. Approval must come from a finance manager, the API must enforce the rule even when called without the UI, and every successful export must create an audit event.
Before: a free-ranging coding agent
The agent receives a prompt: “Add approval before invoice export.”
It searches the repository, finds the export button and an API endpoint, reads a few nearby tests and infers the likely design. It adds a disabled state to the button, inserts a check in the controller and updates one test.
The result may be plausible and still be wrong. The agent may not discover that a background job also exports invoices. It may use the wrong permission model, miss a required audit event, or implement a new status that conflicts with the existing data contract. A self-review is unlikely to find assumptions that the agent never realized it had made.
The agent was given freedom over implementation, but also over the definition of the problem.
After: an agent inside an engineered process
Now give the same agent a stable Change Request key instead of a loose paragraph.
The Change Request identifies the current change, branch and affected specifications. The linked requirements define who can approve an invoice and what “approved” means. The API specification states that direct export attempts for unapproved invoices are rejected. The data specification defines the existing approval state and the audit event. The acceptance criteria make the expected outcomes testable.
Software units then identify the implementation responsibilities involved: the export API operation, authorization policy, background export service, audit publisher and their tests. Each Unit connects the agent to the relevant files, dependencies, architectural rules and implementation guidance.
The coding agent still decides how to implement the change. That is where autonomy is useful. But it no longer has to invent the scope, guess which files own the behavior or decide what a correct outcome means.
After implementation, the result is checked against two distinct boundaries:
- deterministic checks such as type checking, automated tests and API contract tests;
- alignment verification that compares the changed software units with their linked specifications and records concrete findings when they diverge.
This does not guarantee perfect software. It does something more practical: it reduces the number of hidden decisions the agent must make and makes failures easier to locate, explain and correct.
Automate the process, not the org chart
An alternative architecture begins with a different question. Not “Which digital employee should we create?” but “How should this process work if it is not constrained by the way humans organize labor?”
In such a system:
- work state is represented explicitly;
- sources of truth are defined in advance;
- context is connected to the specific task;
- known transitions are deterministic;
- outputs have structured contracts;
- important changes pass through external verification;
- people enter at points that require judgment or accountability, not to continuously supervise a model.
The LLM remains an essential component. It is used where work genuinely requires meaning: interpreting natural language, reconciling heterogeneous information, finding contradictions, generating alternatives or investigating an unfamiliar situation.
The model is not a virtual employee running the entire process. It is an intelligent component inside a designed system.
Where autonomous agents genuinely help
None of this means we should abandon autonomous agents. They are especially useful when the correct sequence of actions cannot be known in advance: researching a new domain, diagnosing an unknown failure, exploring an unfamiliar codebase or operating in a changing environment.
Autonomy is justified when:
- the space of possible actions is large;
- the required information cannot be predicted in advance;
- intermediate results may legitimately change the plan;
- the outcome can be independently evaluated;
- designing every possible branch would cost more than reasoning during execution.
But when a process repeats, its states are known and its outcomes can be formalized, repeated agent reasoning becomes overhead rather than an advantage.
Good architecture gradually converts patterns discovered by agents into explicit rules, tools and workflows. The agent explores what is unknown. The system preserves what has become known.
What this means for AI-assisted software development
Coding agents are often expected to work inside environments designed exclusively for people. Product meaning lives in tickets and conversations. Architectural decisions remain in developers' heads. Requirements are separated from code. Change history is fragmented across pull requests, documents and messages.
Expecting an agent to reconstruct this picture reliably for every task places a bigger bet on its ability to recover organizational memory than on its ability to write code.
Reqode's product model is built around the opposite assumption: product context should be part of the system. Requirements and specifications express intended behavior. Change Requests preserve the current change scope. Software units connect responsibilities to files, dependencies and architectural constraints. Reqode MCP gives coding agents focused, read-only, branch-aware access to this connected context. Verification then checks whether implementation and specification still describe the same system.
The practical workflow is simple: start from a stable change or specification key, load the connected context, implement within the relevant software units, run deterministic checks and verify the result for divergence.
This makes autonomy manageable. The agent decides how to perform the work without independently inventing what should count as correct.
Aim for sufficient autonomy, not maximum autonomy
The important question is not whether autonomous agents can perform complex work. Their capabilities will continue to improve.
The question is whether maximum autonomy is a good architectural objective.
The more uncertainty we transfer to an agent, the more flexibility the system gains. But cost, opacity and the space of possible failures grow with it.
A better goal is the minimum autonomy sufficient for the task.
We should not ask AI to copy every part of a person's job. We should decide which parts of that job need to exist in a well-designed process at all.
Perhaps the most important promise of LLMs is not that we can create millions of digital employees. Perhaps it is that we can finally redesign the processes for which employees have long served as the necessary universal interface.