I hire the judgment to catch AI, not the fluency to use it
An agent burned real money being confidently wrong while I was in meetings. That is where my thinking about hiring engineers in the AI era starts, and it does not end where the hype does.
Blog
Notes on engineering leadership, platforms, and applied AI. Direct, and built from what actually shipped.
An agent burned real money being confidently wrong while I was in meetings. That is where my thinking about hiring engineers in the AI era starts, and it does not end where the hype does.
There was a confident note in my toolbox. Dated, specific, cited error codes. I wrote it. It was wrong, and I only found out because I tried to show off about it. What eighty cents of apples taught me about believing myself.
Every study of AI and developer productivity measures how long a task took. That number stops meaning anything the moment you run five sessions across four repos. I went looking for research on people who work this way and found one note, seven people, and an author begging me not to build on it.
Hand a coding agent the whole feature and you get a 2,000-line diff you can't review and shouldn't trust. A better prompt won't fix that. A smaller unit will: the review-sized slice. Spec first, failing test second, one worktree each, straight through the door.
Context rent: every mounted tool schema charges you on every turn, called or not. My admin plane fronts a drifting capability catalog with one read-only ask tool and makes a disposable sub-agent pay the discovery bill.
The honest anatomy of my cross-vendor review fleet: three model vendors under three GitHub Apps, a 21-subagent full matrix, a Gemini that spent three months benched, and a house rule that no finding ever gets lost.
Three AI providers, an async video client, and Google Cloud Storage on raw net/http. 1,993 lines, 11 direct deps, 10 MB static binaries. What it cost, what broke, and why SDKs insure the wrong layer.
Every toggle in your GitHub org settings is a production change with no plan, no diff, no reviewer. So the governance layer became code: 273 lines of HCL, two isolated states, import-first, hardened in 47 minutes, with a $30/month near-miss caught in review.
A six-month spend sparkline, refreshed hourly from my own FinOps API, sits in my homepage's proof strip. The whole integration is 198 lines, 39 lines of Terraform, and one scoped token. Here is why I published the bill, and how it never breaks.
The cover pipeline behind this blog: two stages, two human picks, and a same-day rewrite that fixed bad AI art by moving the human earlier instead of buying a better model.
My whole observability stack (logs, metrics, dashboards, alerting, probes) runs on one $49 GCP VM for about $61 a month. What it costs instead of a bill: a 42 GB log file, one deleted container, and why I call the trade rent versus tuition.
My second brain is 211 Markdown files in a git repo. Machines committed to it 930 times in three weeks, the engine on top was rewritten from scratch, and not one note was lost. The mechanism, the gates that make direct-to-main sane, and the one-commit blast radius.
A quarter of a five-month-old fleet, archived inside a 21-day window. Why AI-assisted velocity makes repo-killing routine, and the checklist (successor first, verified bundles, a Kill Ledger) that makes it safe.
I replaced a 62-day-old Python service with Go. Cutover in 12 days, old repo dead in 20. Then almost every feature I swore I'd cut came back, one scoped slice at a time. The real math of a rewrite, with receipts.
Three models rewrote the same transcript chunk in parallel and a 99-line judge merged them, anchored to the original. Seven weeks of audited production later I fired the jury for one reasoning model, and parked the machinery one HTTP call from revenge.
I replaced my 85,000-line Python admin toolkit with a single Go module. One capability registry, three transports, guardrails stamped across 40 connectors. The real numbers, the mechanism, and what the rewrite cost.
The worst part of managing engineers is the nagging. So I built night-watch, a Go service that chases missing ticket IDs and tickets with no epic, by private Slack DM only. Nobody resents a robot for being consistent. Spend your authority budget on something better.
The ladder deal says you trade the keyboard for the org chart and never get the keys back. Agents rewrote that clause. Typing got cheap. Judgment didn't, and a decade of management sharpens exactly the half that got expensive. The receipts are one link away.
The transcriber demoed after one evening. The product is two quarters of work around one API call: per-owner encryption, client-held keys, voiceprint identity, five connectors, and authz that answers snoops with a 404. The evening-demo gap is the product, and agents are why one person can cross it.
Finance wants one number: AI spend per team. You can build it. Five vendor grains normalized, attribution with receipts, estimates that admit they're estimates. What you cannot do is let the number rate a person. The moment it does, the data dies.
Every team I inherit asks for headcount first. It's almost never the fix. Ownership gaps, the wrong people, or too much noise: diagnose, fix, then hire. Plus the two years I spent killing matrix management.
Everyone has a loud opinion on whether AI coding tools pay off. Almost nobody has data. So I built a one-binary meter, ran it on myself for 60 days, collected two ugly receipts, and deleted the whole thing in an afternoon. The Disposable Meter, and why the teardown is the point.
Hundreds of "review this for security" sessions sat in my logs as noise. Then one caught a bug I was about to ship. So I wired the noise into a gate and changed jobs: the fleet reviews, I edit the reviewers.
Time-to-hire fell from 45 days to 30 everywhere the blocker was process. Israel, my home site, moved zero, because the blocker was a salary band. You can't interview your way through a 40% comp gap. The pipe-or-wall test I should have run in week one.
I gave my best engineer the promotion's workload without the promotion, then cheered from the sideline while the organization ate him. The project shipped. The engineer didn't. The lesson has a name: cover, not cheerleading.
People tell the truth on the way out for one reason: you have no power over them anymore. The mechanism behind that honesty, four rules for mining it, and the ghost who rewired how I run teams.
Conception asks how. Discovery asks whether, what, and who. Skip the second and you ship a flawless answer to a question nobody asked. I skipped one stakeholder on a native-app build and paid in tickets. The team holding the answer was one meeting away.
If you think you don't have time for a conception phase, you really don't have time for the dumpster fire that happens without one. When backend planning earns its keep, when to skip it, and the deadlock that taught me the difference at 3am.
You will not out-argue the PM whose entire vocabulary is "make it pop." Stop trying. Four moves that work instead: the boring confirmation, the handed-back tradeoff, the loaded "interesting", and framing asks as their win. Minus the sabotage fantasies.
I said yes to everything and got worse at everything that mattered. The fix: four ways to say no without the word, said early, without the apology tour.
Write the 100-day plan anyway. The three classic new-EM faceplants, why month one is for mapping the local balagan instead of fixing it, and the quiet Flink timezone bug that erased events during a pre-Black-Friday code freeze.
Day one in a new company is a reset button. The logistics, the watching, and the classic rookie faceplants.
Tech leads are made, mostly. The asterisk is the short list you cannot install in an adult: honesty, empathy, the credit reflex, decency under pressure. The two-pile sort, the promotion I refused at a real cost, and the legibility trap that hands brilliant jerks the title.
"Trust your gut" is the best advice you can give a senior and the worst you can give a junior. A gut is compressed experience with a domain and an expiry date, and the confidence never tells you which one you're holding.
He was right to ask. The promotion confiscates the scoreboard an engineer can read and hands them one they can't. The Scoreboard Swap, and the unglamorous weeks of prep that keep a new tech lead from breaking.
A clean no that leaves someone stranded is abandonment with manners. The skill that takes years: refuse the task, keep the problem, then prove the yes with something that costs you.
The day you become a lead, your calendar stops being yours. One dumb 2x2 grid, sorted as a team and out loud, got mine back. Includes the meeting that nearly cost me an engineer.
HR's pulse survey scored me as a bad manager. Three minutes with the team proved the questions were aiming at someone else. The real finding: headquarters and I had spent two years grading the same team with each other's rulers.
Engineers swear we are not creative, then rewrite the same Flink job five ways before lunch. The two modes of technical creativity nobody teaches new leads, and the four words I keep repeating to mine: don't chase the yelling.
One honest test: what someone does when nobody knows the answer. Vague requirements, a misbehaving system, nothing to look up, and someone has to keep moving. The rest is decoration.
Everyone recites SMART. Then they cheat on Measurable and Achievable. The cheating is rational, the acronym can't fix it, and the fix is safety, not writing craft.
Written in January, read in December, dead in between. An objective is a lifecycle, not a sentence: hand over the choosing, calibrate the bar per person, build a stairway of small wins, and kill the dead ones in month two.
One unwritten rule cost my team a year of quiet resentment and took four minutes to fix, once it was on a wall. The Team Canvas, honestly: what it is, when to run it, and the Laminated Lie that ruins it.
Three meetings spent handing an engineer debugging strategies for a flaky service. The real problem was a man quietly deciding the company didn't have his back. The craft of shutting up, and the status-shaped sentence that hides what people actually mean.
The 1:1 is the first meeting sacrificed when the week catches fire. It should be the last. Quiet signals only travel down a channel that already exists, and trust vaporizes in one betrayal. The never-cancel case.