Ця стаття ще не доступна вашою мовою. Показуємо англійську версію.
AI Agent Workflows for Engineering Teams: What Actually Works
What actually works when you put AI agents into an engineering team workflow, from someone who did it on a Fortune-500 iOS team and measured the result, including the setup that failed.
The first agent workflow I put in front of an engineering team optimized the wrong thing beautifully. It had a clean prompt, it closed tickets fast, the burndown looked great. It also shipped work that was technically done and missed what the customer actually needed, because “ticket closed” was the only signal it had. That failure taught me more about agent workflows than any of the ones that worked.
Most of what you read about AI agents for engineering teams is written by people selling the platform. It describes the architecture diagram, not the Tuesday. I put Claude Code agents, MCP servers, and browser automation into the real review and test loop for a multinational iOS team, and in my own measurement it saved about 30 minutes per engineer per day without dropping review quality. Here is what actually moved that number, and what quietly wasted our time.
The mistake: automating output instead of judgment
The seductive pitch is that agents write the code, so engineers write less. That is the part that works least well and matters least.
An LLM gives you the average of the internet. In Swift, where there is less training data than in JavaScript or Python, that average is worse. So an agent left to generate freely produces plausible code that a senior engineer then has to read line by line to trust, which is not obviously faster than writing it. The time did not come from letting agents build. It came from letting them do the mechanical verification a human is slow at and bored by.
Every PR review is really two jobs stacked on top of each other. Mechanical verification: does it build, are edge cases handled, did someone forget to localize a string, is the naming consistent with the module. And judgment: is this the right abstraction, does it fit where this code is heading, will it bite us in six months. Humans are slow at the first and irreplaceable at the second. Classic review forces senior engineers to do both, so the mechanical part crowds out the judgment part until reviewers skim, type LGTM, and architectural drift accumulates one skimmed PR at a time.
The agent’s job is the first stack. Never the second.
What actually worked
A first-pass reviewer on every PR. Agents fan out over the diff before any human looks, one dimension each: correctness and edge cases, consistency with surrounding patterns, whether tests cover the behavior change or just mirror the implementation, and mobile-specific checks like hardcoded strings and touch targets under 44pt. Every finding has to cite a file, a line, and a concrete failure scenario. A finding with no failure scenario gets dropped. That one rule is the difference between useful output and “consider improving readability” noise. I wrote up the exact mechanics in a separate post on the review workflow; the point here is that this is where the measured 30 minutes came from, not from code generation.
The metric decided before deployment. My biggest process mistake: I set the metric of record after the agents were already running, so for the first stretch I was tuning against a feeling. Decide what you are optimizing before an agent touches the workflow. For us it was review-cycle time held against review quality, not lines generated, not tickets closed. An agent optimizes exactly the proxy you hand it, so the proxy has to be the real goal.
A human owns every architectural decision. Module boundaries, offline-first, when to break MVVM, when not to rewrite. The agent executes those decisions faster once a person has made them. It does not make them. On a Williams-Sonoma build I stood up a modular SwiftUI codebase so two shopping apps could share it; that call, and the taste behind it, is not something I would ever hand to a model. Agents scaled the wiring underneath it.
What did not work, and what I would do differently
The ticket-speed agent is the clean example of the general failure: an agent with a prompt but no encoded intent will optimize the nearest measurable proxy and confidently ship the wrong thing. The fix is not a better model. It is encoding review taste and product intent into the workflow itself, the same standards a senior reviewer would apply, so the agent is pointed at the real goal instead of a number that correlates with it on a good day.
The second thing I would change is trust calibration. Early on I let agents touch too much at once and spent the saved time re-reviewing their output, which defeats the purpose. Draw the line explicitly: what the agent is trusted to do unattended, what it drafts for a human to approve, and what it never touches. That line is the whole design. Get it wrong toward trust and you inherit debt; get it wrong toward caution and you built an expensive linter. The same boundary question runs through my whole Claude Code iOS workflow: the setup is an afternoon, deciding where the agent may make decisions is the months-long part.
A framework you can actually apply
If you lead a team and want agents in the workflow without the theater, four questions in order:
- What is slow because it is mechanical, not because it is hard? That is your first candidate. Review triage, test scaffolding, changelog and release notes, flagging missing localization. Not architecture, not product decisions.
- What is the metric of record, decided now? Write it down before anything runs. If you cannot name it, you are not ready to deploy an agent against it.
- Where is the human explicitly in the loop? Name what the agent does unattended, what it drafts for approval, what it never touches. This is a design decision, not a default.
- What did you standardize versus leave autonomous? Standardize the few things that compound, the review bar and the definition of done, and leave the rest to the team. When I ran mentorship and review standards across EU locations, standardizing everything would have killed local ownership; standardizing nothing meant quality drifted. Agents make this sharper, because whatever you standardize, the agent will enforce relentlessly and literally.
None of this requires a swarm architecture or a control plane. It requires taking one pattern you already trust by hand, deciding what you are measuring, and moving it onto a trigger with a clear human boundary. Start with the smallest mechanical task you are sure about. Measure it against the number you wrote down first. Expand only where the measurement earns it.
The teams that get value from agents are not the ones with the most agents. They are the ones that kept judgment human and were honest about which of the two review jobs they were actually automating.
If you are working out where agents fit in your team’s workflow and want a second opinion from someone who has measured it on a real product, that is what I do in a strategy session.
What is the one mechanical task on your team that everyone hates and no one would miss doing by hand? That is almost always where to start.