Blog
2026
- Humans Out of the Loop
- Build the Harness Before You Hand the Agent Real Work
- Whether You Think AI Can or Can't, You're Right
- AI Writes Fast. It Doesn't Know What's Good.
- Two Code Review Loops I Handed to Agents
- From Doers to Directors
- AI Agents Are Running Errands Now
- The Agentic Test Pyramid
- There Is No Fixed Amount of Work
- Let an AI Agent Take the First Page
- Building a Platform Is a Balancing Act
- Don't Just Build with AI — Learn Through It
- Speed Is Only Useful If You're Going in the Right Direction
- Review the Outcome, Not the Output
- Don't Hire Me
- Use AI Agents to Break Your App
- If You Can't One-Shot Your Feature, It's a SKILL.md Issue
- Turning Your Terminal Into an AI Dev Team
- Coding Agents Need a Faster Feedback Loop
- Every CLI Should Include Agent Skills
- A Bad Line of Research Is a Hundred Bad Lines of Code
- AI Never Would Have Installed left-pad
- Code Was Never the Goal
- Vibe-Coded Apps Need Real Security
- Code Quality Still Matters
- My AI Recruiter Honeypot Worked
2025
- Stay Out of the Dumb Zone
- I Got Tired of Writing Bad Commit Messages
- Your Tests That Make Network Requests Are Flaky
- Cat and Mouse at Machine Speed
- Over-Engineering Is Just Future-Proofing Gone Too Far
- Building a Platform Is Raising the Floor for Everyone
- Ship as Fast as Possible, but Not Faster
- Turn the Shit Around!
- Describe the What, Delegate the How
- Sparse Is Better than Dense
- Better Conversations Make Better Software
- How Do You Know You've Fixed a Flaky Test?
- Flat Is Better Than Nested
- I Built an AI Tool to Write My Brag Document
- Complex Is Better Than Complicated
- Simple Is Better Than Complex
- Explicit Is Better Than Implicit
- Beautiful Is Better Than Ugly
- Build Your Team a Garden
2024
- Behavior Tests Tell You Why the Code Exists
- Leave On-Call Better Than You Found It
- Test the Sad Path
- Slow Down to Speed Up
- Stop Counting Incidents
- Write Less About the Options You Rejected
- Rules Tell You What, Principles Tell You Why
- False Alarms Train You to Ignore Real Fires
- Today I Learned: There Are Three Kinds of Jitter
- Use example.com in Your Tests
- Go Wide, Then Go Deep
- Tests Are for Your Future Self
- Throw Something Back
- Upgrade Your Dependencies Before You Have To
- HTTP and the Database Don't Belong in the Same File
- Security Adoption Is a Developer Experience Problem
- LeetCode Interviews Are on Borrowed Time
- Deploy Is Not Release
- The Slow Part Is Between the Boxes
- Measure Your Leadership by Your Absence
- Make the Change Easy, Then Make the Easy Change
2023
2018
2017
- Microservices Are a Team Decision First
- Communication Should Take the Shortest Path
- Agile Is About People and Results
2016
2014
- Datomic Performance with Clause Ordering
- Setting Null Values in Datomic
- Clojure Protocol Namespaces
- Mixpanel Mock
- Implementing Clojure Protocols
- Null Object in Groovy