I started using AI coding assistants before they were fashionable to discuss. I have now used them on everything from greenfield projects to debugging gnarly production issues in legacy systems. Here is the honest version of what I have learned.
What AI Tools Are Genuinely Good At
- *Boilerplate generation is where these tools save the most time. Writing a standard Express route handler, a React component skeleton, a database migration file — tasks that are mechanical and repetitive, where the pattern is well-established. AI handles this faster than any snippet library.
- *Explaining unfamiliar code is underrated. When you land in an unknown codebase or encounter a library you have not used before, being able to paste a 50-line function and ask "walk me through what this does" is faster than reading documentation in many cases.
- *First-draft tests — AI can generate a reasonable set of unit test cases for a function in seconds. You still need to review them carefully, but the starting point is usually usable.
Where AI Tools Consistently Fail
- *Architecture decisions. Ask an AI to help you structure a complex system and it will give you something that looks plausible but is often superficially wrong for your specific constraints. It does not know your team, your deployment environment, or your existing codebase dependencies.
- *Debugging subtle runtime errors. AI is pattern-matching on code. Real bugs in production are often caused by environment differences, race conditions, or data edge cases that do not show up in static code analysis.
- *Anything security-critical. I have seen AI suggest SQL query constructions that were injection-vulnerable, recommend cryptographic approaches that were outdated, and miss authentication edge cases entirely. Always treat security-related AI output with extra skepticism.
The Mental Model That Actually Helps
Think of AI coding tools as a very fast junior developer who has read everything on the internet but has never debugged a production incident.
They are fast, knowledgeable at a surface level, and useful for well-defined tasks. They need supervision on anything complex or high-stakes. With that mental model, they fit naturally into a workflow.
Without that mental model, you either trust them too much and introduce bugs, or distrust them entirely and miss real productivity gains.