AI coding agents are a tool. Probably the highest impact tool ever built for developers, but still a tool, with a learning curve like any other. So a developer’s output today tracks the skill set they built around that tool more than the tool itself. Giving the agent the right context is where everyone starts. Being able to properly test what gets built is the part nobody skips. That does not mean a human reads every line. With enough automation around it I am fine with code that gets written and reviewed without me in the loop, as long as the checks are strong enough to catch it when it is wrong. Which is where the real gap opens, and it is an engineering gap. Writing skills the agent can reuse instead of re-explaining the same thing every week. Shaping the harness it runs in: which tools it can call, what it is allowed to touch, where it gets its data. Setting up loops where it plans, runs, tests and corrects itself before anyone opens the diff. One example from our engineering team at Nebuly: for every bug that gets reported, a routine writes the end to end test that reproduces it. That test becomes the acceptance criteria for the fix, whether the ticket is picked up by an autonomous agent or by a person driving one. That work is not prompting. It looks a lot more like systems engineering applied to your own development process. How you make the software get built is the difference now.
The reproduction test as acceptance criteria is the right move - it turns "looks fixed" into something checkable. What I'd want to know is the layer above it: what verifies the reproduction test itself actually reproduces the reported bug, rather than just failing for an unrelated reason? A wrong-but-failing test would happily pass a fix that fixes nothing.
BTW, we're hiring! If you're a developer currently optimizing your harness to work more and more efficiently with AI, check out our open positions at https://jobs.ashbyhq.com/nebuly