· 7 min read
I Replaced My Entire Engineering Team with Agents. Now I Have 17 New Bugs and 42 Slack Messages
By N. Wijaya
- guides
- humor

At 9:04 on Monday morning, I replaced my entire engineering team with agents. By 9:06, I had a project plan, a fresh repository, three competing interpretations of the requirements, and an agent asking whether “production-ready” meant “has a Dockerfile.” By lunch, the system had 17 new bugs and 42 Slack messages, all written in the serene tone of a person who has never had to explain an outage to a customer.
This was not a failure, exactly. It was a management transformation. The agents were fast, tireless, and admirably free of opinions about the office temperature. They also did what software teams have always done: they made locally reasonable decisions that became globally alarming once connected together.
What an agent team actually replaces
A coding agent can replace portions of engineering work: reading a ticket, locating relevant files, drafting a change, running tests, opening a pull request, and describing the result in prose that suggests the task was always straightforward. A group of agents can parallelize those activities. That is real leverage.
What it does not replace is the collection of decisions hiding between those activities. Someone still has to decide what the product should do, which trade-off is acceptable, whether a migration is safe, whether a test is meaningful, and whether the apparent green checkmark was produced by testing the code or merely by failing to test the interesting part.
Humans call this coordination. In an agent setup, it is often called orchestration, which is coordination wearing a lanyard and charging by the token.
Why my 17 bugs arrived so efficiently
The problem with assigning separate agents to frontend, backend, database, tests, documentation, and review is not that they are incapable. The problem is that each agent receives a slice of reality. The backend agent can make a clean API. The frontend agent can consume a clean API. Neither may notice that they have independently invented two clean APIs with incompatible names, pagination rules, and opinions about whether an empty string counts as a value.
Agent teams amplify a classic distributed-systems problem: state is shared, understanding is not. The more parallel work you create, the more interfaces you create. Interfaces need contracts. Contracts need owners. Owners need enough context to say no when an apparently elegant local improvement makes the whole system slightly haunted.
- An agent changes a schema while another writes code against the old schema.
- An agent adds a dependency because it solves its immediate task, while another introduces a library that solves the same problem differently.
- An agent writes tests that validate its interpretation of the requirement rather than the requirement anyone meant.
- An agent reviewer sees a plausible diff, not the missing conversation that would make the diff obviously wrong.
- An agent posts a status update saying the task is complete, which is technically true in the same sense that a smoke alarm has completed its purpose.
The Slack messages are not a side effect
The 42 Slack messages were a clue. Every time an agent reports progress, requests clarification, summarizes a decision, or escalates an ambiguity, it is surfacing the work that a functioning team normally carries in meetings, tickets, comments, code review, and the occasional long silence after someone says, “It should be a small change.”
You can reduce that chatter, but do not confuse reduced chatter with reduced uncertainty. If you tell agents never to ask questions, they will make assumptions. If you tell them to document every assumption, you will discover that your small feature contains a doctoral thesis’ worth of unspecified behavior. Both outcomes are informative. One is merely louder.
A less theatrical way to use multiple agents
The useful pattern is not “replace the team.” It is “give a responsible engineer a very fast, very literal staff.” Start with a narrow workflow where the boundaries are clear and the blast radius is containable.
- Write a short implementation brief before dispatching agents. Include acceptance criteria, non-goals, affected systems, and constraints such as performance, compatibility, or data handling.
- Assign one agent to implementation and another to adversarial review. Do not let the implementation agent grade its own homework with a second tab open.
- Make tests concrete. Ask for unit tests, integration tests, and negative cases appropriate to the change. “Add tests” is a request for decorative confidence.
- Use a human or a designated lead agent to own interfaces: API shapes, schemas, package choices, deployment steps, and migrations.
- Keep agent work in small branches or isolated worktrees. Parallelism is wonderful until six bots edit the same configuration file like raccoons discovering a pantry.
- Require a final verification pass that starts from the user-visible behavior, not the task summary. Run the app, inspect logs, exercise failure paths, and check the diff for unrelated enthusiasm.
The manager is now the bottleneck
Once agents can generate code faster than you can read it, your scarce resource becomes judgment. The bottleneck moves from typing to specification, review, integration, and prioritization. This can feel unfair. You bought the robots to avoid work, and they have promoted you to principal engineer of a company whose employees never sleep and all need extremely precise instructions.
Still, that is a good problem if you treat it honestly. Agents are excellent at producing options, mechanical changes, first drafts, test scaffolding, codebase reconnaissance, and repetitive implementation. They are much less reliable at knowing which option matters, when a requirement is underspecified, or when the fastest route to a passing test is quietly cutting the wire that connected the test to reality.
Keep the team, change the job
The practical goal is not an autonomous engineering department that sends its own celebratory emojis after merging to main. The goal is a smaller loop between intent and validated software. Let agents accelerate the parts of engineering that are expensive because they are repetitive. Keep people accountable for the parts that are expensive because they are consequential.
My agents eventually fixed most of the 17 bugs. They also produced a thorough incident summary, a proposed prevention plan, and several new bugs caused by the prevention plan. This is, in fairness, an unusually faithful simulation of software development. The difference is that nobody asked to move the retrospective because they had a dentist appointment.