We spent six months measuring agent impact properly at a 12-person product team, because "it feels faster" was not going to survive our CFO. Sharing methodology and the surprises, since most ROI threads here are vibes with a dollar sign.
What we measured: cycle time per ticket (estimate-normalized), review iterations per PR, rework rate (changes to agent-authored code within 30 days), model spend per merged PR, and — the one we almost didn't track — time-to-first-PR on unfamiliar code areas.
Headline numbers, agent-assisted vs not, same team, similar tickets:
- Cycle time: -38% median. Real, large, survived normalization.
- Model spend: $3.20 per merged PR average. Rounding error against salaries — the CFO stopped reading here, satisfied.
- Review iterations: +40% (2.0 → 2.8 per PR). The cost center nobody puts in the demo.
- 30-day rework rate: +9 points (14% → 23%). This one hurt. A chunk of our speed was borrowed, not earned.
The surprise: the strongest predictor of net-positive ROI wasn't task type, model, or engineer seniority. It was whether the engineer wrote an explicit spec before starting the agent. Spec-first agent tickets: rework rate indistinguishable from human baseline, full cycle-time win kept. Prompt-and-pray tickets: all of the rework regression concentrated there.
We now require a three-line spec (goal, constraints, done-when) in the ticket before agent work starts. Rework has been dropping since. The uncomfortable summary: agents are ROI-positive roughly in proportion to how well you'd have briefed a contractor — which means the ROI was always partly a measurement of our own specification discipline, and agents just made the bill visible.
Happy to share the measurement scripts. What's everyone else's rework rate? Nobody publishes that number and I suspect I know why.
Our rework number, since you asked and since somebody has to go second: 26% at month two, 17% now, measured the same way. What moved it wasn't specs (we had those) but banning agent PRs that touch more than one concern — our rework clustered in PRs that did a feature and an opportunistic refactor. Split them and the refactor rework stopped contaminating the feature. Publish the scripts; this thread could become the site's de facto benchmark protocol.
Scripts going up this week. And the single-concern finding matches something in our residuals I couldn't explain — spec-first PRs that still reworked badly were disproportionately 'and also' PRs. You may have just named my mystery variable.