A DTO with a dozen fields, a framework migration, a slow query incident. Three tasks from the last few months, all done with Copilot and ChatGPT open. Here is where the line runs for me.

Task one, boilerplate. The DTO, its validation rules, a test with fixtures. The assistant writes this faster than I type, and the result needs only a quick read. Same for converting an array-shaped legacy structure into typed classes. This is honest time saved, maybe an hour a day. The code is the kind where being generic is correct.

Task two, the migration. Mixed. It knows the official upgrade guide, sometimes in a version from last year. It confidently suggested a config format that does not exist in the version I was moving to. Useful as a reminder of what to check, dangerous as an authority. Trust level: a junior who read the docs once.

Task three, the slow query. Here the model has nothing. It produced five generic tips, add an index, avoid SELECT *. The answer lived in EXPLAIN ANALYZE on production-sized data, in the fact that the planner chose a nested loop because the statistics on one column were stale. The model cannot see my p99, my data distribution, my execution plan. Nobody trained it on my database, and a better prompt does not fix that.

So the rules I settled on. Generated code gets the same review as human code, no exceptions for confidence of tone. Nothing from the incident channel goes into a public model. Performance work starts from the profiler, not from the chat window.

The assistant is a very fast typist with wide but shallow memory. Useful. I still caught myself pasting the slow query into the chat first, before opening EXPLAIN. Old habits are three months old now.