We ran a small experiment for a month: on a subset of tickets, a QA engineer worked alongside a coding agent from the start, rather than receiving a finished diff at the end. The result changed how we sequence testing on agent-assisted work more generally.
The usual order and why it's backwards
Normally the agent implements, then testing happens against the finished change. By the time a tester sees it, the implementation choices are baked in, and any gap between what was built and what was actually needed is now a rewrite rather than a conversation.
What pairing looked like in practice
The tester wrote the acceptance criteria as executable checks before the agent started, the same discipline we already use for tickets written for humans. Then, as the agent produced a first pass, the tester ran exploratory sessions against it immediately rather than waiting for a "done" flag, treating an early draft as something to interrogate rather than something to wait on.
What came out of it
- Faster feedback on missing edge cases, because the tester found them while the context was still fresh in the ticket, not two days later in review.
- Fewer defects that were actually requirement gaps, since the tester was effectively reviewing the requirement against the implementation continuously rather than once.
- A slower first day, because two people were now actively engaged on one ticket, which only paid off on tickets complex enough to have real edge cases.
Testing late in a fast pipeline doesn't make the pipeline safer. It just moves the cost of finding out to a more expensive point in time.
Where we wouldn't do this
Small, well-specified tickets didn't benefit — the overhead of pairing cost more than the defects it caught. We now reserve this for tickets touching money, permissions, or anything with a genuinely ambiguous edge case, and let the rest run through the normal review order.
The honest limitation
This needs a tester who understands the domain well enough to write good acceptance checks quickly, which is the same constraint good testing always had. The agent didn't lower that bar; it just made the cost of skipping it visible sooner.
