Last year I used Claude Code to write something in Rust. I'm "read the book" familiar with Rust, but not much of a coder in it. I could follow along with the AI, but unlike other languages, I didn't feel the need to nitpick. Not quite vibe-coding, but in that direction. It was extremely productive and liberating.
That got me thinking: which of my everyday skills could I hand over the same way? The common thread is deep prior art and tight feedback loops. Areas where AI has vast training data and I can verify the output without needing to have written it myself.
I don't think giving up skills to AI arbitrarily is a universally good idea. But doing it with consideration is the way forward. Here is my current shortlist:
-
CSS: I've had the elegance explained to me (convincingly on occasion), but I've never built a mental model that's really been satisfactory for me personally. Mostly I'm simply happy to hand it over.
-
SQL: I like SQL and I've been deep into it in different career spans, but dipping in and out is trying. AI is better than me at this point.
-
Bash/Shell Scripting: To avoid too many gear-changes I usually write scripts in TypeScript (which is really only passable in this role). Being able to smash out a Bash script via AI is very appealing.
-
Regex: I generally avoid regex, which means it's a stale skill. AI is excellent at it, and it's easy enough to create a test suite. It's also a major security vector so :eyes: are still very much recommended.
-
Docker/CI config: YAML-heavy, well-documented patterns, not customer-facing, and easy to verify. The kind of thing where you'd be copy-pasta from docs anyway.
My aim on all these fronts is to stay competent enough to be "read-only" — a good reviewer, not a writer[1].
Then there are skills where the feedback loop is slow or the failure modes are subtle:
-
git: Compared to my peers my git skills are "journeyman-like", but equally AI isn't there yet. The major divide I've not crossed is getting reliable rebases from Claude. This is frustrating as it's a common intermediate step in my workflow.
-
React: I'd like to hand this over more, but there are too many edge cases with state and re-renders and the like. I'm spending a lot more time investing in the design system; this helps, but it's not a slam dunk.
-
Database schema design: The decisions around indexing, normalization, and migration ordering have downstream consequences that are hard to verify from output alone. Plus decisions tend to echo over a long period of time — years, sometimes decades. Needs taste and a complex set of tradeoffs that are hard to throw over a fence.
-
TypeScript types: Especially the complex ones: generics, conditional types, mapped types. AI can write them but the failure mode is subtle: it'll produce types that compile but don't actually constrain what you intended. I think Claude's default "be helpful" behavior gets in the way here; it'll do whatever it takes to get the code working and types can suffer for it.
Another motivation here is the "Death of the Full-Stack Developer".
I've been (arguably) in the Full-Stack space for some time[2], but I do realize the limitations of keeping that title. Jumping from SQL to yet-another-browser-api to CORS to cookie edge-cases makes your head spin.
There are now enough APIs and frameworks that you really do need to pick your battles. AI lets you pick them more deliberately — cede the areas with deep prior art and tight verification, hold the ones where taste and judgement still matter.