What Developers Should Never Outsource to AI

AI can now write the code, draft the post, explain the concept, even review its own work. That's incredibly useful. It's also a trap: it has never been easier to outsource the parts of the work that make you good at it.

This free guide isn't anti-AI, it's the opposite. I walk through three times I used AI heavily, in coding, writing, and learning, while deliberately keeping the parts I couldn't afford to hand over. The tools changed. The principle didn't: use AI to remove low-value friction without outsourcing the work that builds judgment. Here's a taste of what's inside.

Subscribe to get the full guide + insights on Python, Rust, and AI.


Coding: the AI did the typing, I owned the engineering

I let an agent build most of a discussion feature: models, voting UI, reply notifications, moderation. Then I reviewed the diff like a teammate's pull request and caught an XSS hole where comment bodies went unescaped into notification emails. A bug no test surfaced, because I put my hands on the feature: I could upvote my own comment. Passing tests told me the code did what it was written to do, not that it was missing a rule.

Review AI code like you're accountable for it, because you are. And a diff too big to review is a problem with the change, not with the review.


Writing: the AI edited, I owned the thinking

I wrote the draft myself, then asked AI for a critique, not a rewrite. It sharpened the structure and exposed the symmetry I already believed. But a suggestion being reasonable isn't reason enough to keep it. I tested every one against the same questions: does this represent what I believe, and is the point actually clearer?

Good AI use isn't about maximizing how much AI-generated output you keep. It's about generating useful possibilities and staying responsible for what survives.


Learning: the AI accelerated the path, I still had to walk it

Learning Rust, I didn't ask the chatbot for the answer, I asked why: why a borrow here, an owned value there. The sharpest lessons came from the compiler, not the AI. When I hit a "value used after move" error, I could have pasted it in and taken the patch none the wiser. Instead I sat with it, and understood ownership once, for good.

A junior can have AI produce working code faster than they could ever learn to write it. That's borrowing a skill you never acquired, due back the moment something breaks.


The same framework, three times

CaseAI doesYou keep
CodingImplementationEngineering judgment
WritingSuggestions / editingThinking & authorship
LearningExplanation / translationUnderstanding & struggle

AI can accelerate doing. It can't take responsibility for knowing whether the result is good. The full guide covers all three cases in depth, with real code, the bugs I caught, and the calls I made.

Subscribe to get the full guide + insights on Python, Rust, and AI.


Want to put it into practice right now? Before your next build, run it through scopefirst.dev, a free 30-minute flow that decides what's worth building, and what it should do, before AI writes a line.

For more, browse my Python tips on GitHub. If you use Claude Code, you can pull them straight into it via MCP.