I've been using AI tools in my daily work for 2 years. Some uses saved me hours. Others cost me hours. Here's an honest breakdown.
**Where AI genuinely helps -->
1. Boilerplate and repetitive code
Config files, CRUD endpoints, form validation, test scaffolding. This is the code I know how to write but don't want to type. I describe what I need, review the output, and move on.
2. Explaining unfamiliar code
When I join a new codebase or hit a library I haven't used, I paste a function and ask what it does and why. It's like a patient colleague who never gets tired of "wait, what does this line do?"
3. Debugging help
I paste the error message, the relevant code, and what I've already tried. Often it points me at the cause in seconds, especially for config or dependency problems. Even when it's wrong, listing possible causes helps me think.
4. First drafts of tests
AI is good at generating edge cases I forgot, like empty input, null values, and unusual formats. I treat its tests as a checklist, not as finished work.
Where it failed me -->
1. Confidently inventing APIs
[Describe your example.] For instance, it once suggested a method that didn't exist in the library version I was using. The code looked perfectly reasonable, and I only caught it when it failed at runtime.
2. Subtle bugs in code that "looks right"
[Describe your example.] Off-by-one errors, wrong async handling, and missed edge cases tend to hide in clean-looking code. This is more dangerous than obviously broken output, because it passes a quick skim.
3. Security blind spots
Generated code sometimes skips input sanitization, uses weak defaults, or exposes more than it should. I never accept auth, crypto, or database-query code without checking it carefully.
4. Losing the big picture
AI answers the question I ask, not the one I should have asked. It will happily help me build a bad design faster. Architecture decisions still need a human who understands the project's constraints.
My rules of thumb -->
- Never merge code I don't understand. If I can't explain it, I don't ship it.
- Verify against official docs for anything involving a specific API or version.
- Run it and test it. Plausible-looking is not the same as correct.
- Give context. Language, framework version, constraints, and what I've already tried make answers much better.
- Use it as a pair programmer, not an autopilot.
Final thoughts -->
AI hasn't replaced the hard parts of my job, like understanding requirements, making trade-offs, and taking responsibility for what ships. It has made the tedious parts faster. The developers who benefit most are the ones who keep their own judgment switched on.
Top comments (0)