Blog
Posts on software development, careers, and craft.
I thought AI would lead to worse code
I thought AI would lead to worse code. I was wrong. My code is better than ever because I'm more willing to refactor when AI does it for me. I'm mo...
My personal site has been on Wordpress for 14 years
My personal site has been on Wordpress for 14 years. Just found out the DB is corrupted and I have no recent backup. Solution: I told Claude "Use d...
Hot take: 🌶️ An agent should be generating nearly all code today
Hot take: 🌶️ An agent should be generating nearly all code today. If the agent fails, the focus should be on improving instructions, prompts, arch...
Problem: How do I quickly tell AI exactly which elements I want to change
Problem: How do I quickly tell AI exactly which elements I want to change? Solution: Agentation This npm package displays a toolbar in your app so...
In 2026, many dev teams still fail to get the basics right
In 2026, many dev teams still fail to get the basics right. Click ops No CI server No feature flags No automated tests Long-lived branches Big, amb...
Teammate wanted to try Claude's new expensive ultrareview but didn't have access
Teammate wanted to try Claude's new expensive ultrareview but didn't have access. So he told Claude "just do what ultrareview does"... Result? It s...
Wild realization: AI means I shouldn't write *any* code anymore
Wild realization: AI means I shouldn't write *any* code anymore. Why? Because AI is better than me. 1. AI sees more than me. It sees *all* the conn...
The acceleration from AI is unbelievable
The acceleration from AI is unbelievable. After *only 5 weeks* of development on a new project with 4 devs, we have over 4,000 tests. That's ~200 t...
Pet peeve: Projects where many files are named index
Pet peeve: Projects where many files are named index. Result? Every tab in my editor is named index. Every file in my diff is named index. So I hav...
Problem: AI generates code that doesn't match our formatting and linting...
Problem: AI generates code that doesn't match our formatting and linting standards. Solution: Create a stop hook that runs Prettier and ESLint afte...
Dev team red flags 🚩 “We do Scrum” “We do Git flow” “We use <insert...
Dev team red flags 🚩 “We do Scrum” “We do Git flow” “We use <insert inferior tech here>” “We have a change approval board” “We rarely deploy...
Ya know how in a job interview you can tell if someone is a good candidate...
Ya know how in a job interview you can tell if someone is a good candidate in the first 5 minutes? I’ve found the same thing with dev teams. You ca...
Been building a new Next.js app over the last few weeks and I'm happy to say...
Been building a new Next.js app over the last few weeks and I'm happy to say Next has been stable, fast, and all around enjoyable. RSC works great....
I thought AI would lead to more slop
I thought AI would lead to more slop. I've actually found it's leading to the best code I've written. Here's why: I can fix anti-patterns quickly....
The near future: AI generates code
The near future: AI generates code. AI tests code. AI commits code. AI pushes code. AI reviews code. AI deploys code. So, developers don’t write or...
Today at a conference, I asked a room of 250 developers this question: "If...
Today at a conference, I asked a room of 250 developers this question: "If your child was 18, would you recommend they pursue a career in programmi...
4 weeks of coding by 4 developers and over 1,000 unit tests that pass in...
4 weeks of coding by 4 developers and over 1,000 unit tests that pass in under 10 seconds. Over 90% code coverage. How? Heavy use of Claude Code wi...
I’ve never been great at regex
I’ve never been great at regex. But now, AI generates it for me. It writes tests for each regex it generates, and quickly explains existing regexes...
This is so slick
This is so slick. It used to be tricky to create an ESLint rule. Now I just tell Claude. Example: We want to assure all SQL queries are multi-line...
I used Windows for 20+ years
I used Windows for 20+ years. Then I spoke at a frontend conference in San Fran...the entire audience was laptops with Apple logos. I actually hid...
I see many people running multiple agents simultaneously
I see many people running multiple agents simultaneously. I avoid it. Instead, here’s what I typically do while my *one* agent is running: - Review...
The problem with an immature IT org is it tends to repel the people who are...
The problem with an immature IT org is it tends to repel the people who are most capable of fixing it. When easy things are needlessly hard, and th...
Just learned a team at Microsoft is doing code reviews *after* merge
Just learned a team at Microsoft is doing code reviews *after* merge. Why? To move faster. No more pausing work to wait for code reviews. No need f...
I’ve spent 8+ hours a day building with Claude Code and Opus over the last...
I’ve spent 8+ hours a day building with Claude Code and Opus over the last few weeks and I’m going to call it: Programming is more fun than ever. I...
Y'all out there running multiple agents at once scare me
Y'all out there running multiple agents at once scare me. Why? Because it only saves time if I skip reading the code! And I've found human code rev...
Problem: HTTP status codes in code aren't type safe and require looking them...
Problem: HTTP status codes in code aren't type safe and require looking them up or memorizing them all. Solution: http-status-codes Now I have auto...
Bun test is crazy fast, but unfortunately we just switched back to Vitest
Bun test is crazy fast, but unfortunately we just switched back to Vitest. Why? Because Bun has an awful mocking bug: Mocks leak. A mock in one tes...
Rule: If the prompt is likely to be longer than the code change, I should...
Rule: If the prompt is likely to be longer than the code change, I should probably code it myself instead of using AI.
Even in the age of AI, I can do many tasks more quickly manually than via...
Even in the age of AI, I can do many tasks more quickly manually than via prompting. Entering the right prompt, granting access, waiting for respon...
One of the most common reasons I leave GitHub Copilot is to try a new model...
One of the most common reasons I leave GitHub Copilot is to try a new model the moment it's announced. The Copilot team usually quickly adds new mo...