Articles

Software engineering lessons from production, raw and honest from the heart — almost 20 years of them. Jump to a year in the sidebar, or browse categories and curated collections.

68 articles from 2025 · show all

June 2025

It's like surfing

The weird thing about engineering management is that you feel kinda useless. Yet if you stop, projects stop.

Why utils are bad, an example

Last week we ran into the perfect example of how utils-based code will smack you over the face at the worst moment. So much time wasted

Why AI won't replace you

Complexity.

3 sticky insights from 3 eng management books

Ever feel like your brain is blended and you can't even keep up with the things you're learning? Me too. But the good shit stays.

May 2025

Software architecture IS Conway's Law

Can you even have architecture before there's a team?

You're a business

Quick thought from a conversation with friends

Common abstraction traps

Here's a few common abstraction traps that suck you in, look like they improve your code, then turn into bad ideas as your system grows.

DRY – a common source of bad abstractions

The worst and hardest to maintain code that I've seen or written has been in pursuit of DRY

Why websites and webapps are different

The website vs webapp debate is at least as old as my career. And it keeps coming up. One camp says "React is too complex you don't need any of that", the other camp goes "I don't understand how you live like this". Both are right.

Stateless decision making

Do you ever feel like your brain is full and there's so much going on you can barely keep up? Me too.

Your interview is a sales call

I've been doing hiring manager screens lately. Here's a few tips.

How do you find time for cleanup work

A reader asks how do you find time for technical cleanup work. If OKRs and bugs take priority, when will you make improvements?

April 2025

Say no to abstract code

The trick, then, is to keep related code close together to reduce context boundaries and to limit the amount of relevant detail so it fits in your working memory.

re: The Industrialization of IT

I guess if AI is what it takes to finally get people to care about architecture and team structure then mission accomplished?

What to work on next?

Younger engineers keep asking how I prioritize in a chaotic environment. Here's my approach.

Always deploy at peak traffic

A hard-won lesson for ya: Always deploy when you've got lots of traffic.

10 years in America

10 years ago yesterday I moved to America with 1.5 suitcases, ~2k in the bank, a place to crash, and a freelancing client lined up. A few thoughts.

The difference between a product and a project

A project is something you do, a product is something you own.

March 2025

Sprint vs Shape Up vs Kanban

Whenever I talk about sprints, someone mentions Shape Up. So you have 9 week sprints – what's the difference?

Why sprints

For the past few months I've been introducing sprints into a chaotic startup that's been growing so fast everyone's got whiplash. Since August, 5 engineers turned into 12. I think it's starting to work.

What I mean by "tests can be slop"

Tests may look like slop, but make them clear, not clever. Best practices are key: Test outcomes, not code. Name with intent. Keep tests independent. More straightforward tests beat fewer abstract ones.

AI writes good tests, actually

I've been using AI to write tests and it works surprisingly well! Here's how.

Principles of high output engineering teams

A few engineering principles I aim to instill in every team I join. Lead or not.

Talk to more users sooner

Debate less, ship more.

February 2025

What I learned from Inspired

Products not projects. Outcomes not features. Iterate.

Depth takes time

It takes about 3 years to experience the consequences of your own decisions.

Code yourself out of the job

Let go of your legos and let others do the work.

I was wrong about databases

The best part about writing is that you get to learn new and exciting ways you were wrong. Databases are smarter than I thought!

*Why* the relational data model is so good

You've heard that array or list columns in a database are bad. But why? Yesterday it clicked for me

A pattern for composable UI in Flask

Turn your unwieldy Flask codebase into manageable, composable fragments with this UI pattern. Very close to HTMX.