Software Engineering
144 articles · all categories
Software Engineering articles
May 2025
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.
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.
March 2025
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.
February 2025
Depth takes time
It takes about 3 years to experience the consequences of your own decisions.
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.
How *do* you break down a large project? INVEST
Going from Big Vision to Series of Executable Steps is a key skill for senior+ engineers. PMs can help but they don't know everything.
January 2025
Build the abstraction first
Hardcoding logic when you're tight on time doesn't need to make a mess. You can build the abstraction first!
What I learned from Accelerate
Accelerate is the empirical research behind books such as The Phoenix/Unicorn Project and (parts of) Software Engineering at Google. I loved it.
Why you need a task queue
Task queues have been on my mind lately so here's a little primer on what they are, how they work, and why you need them when your project starts to grow.
December 2024
Atoms, molecules, organisms
Here it is: 20+ years of programming experience distilled into 378 words. From the book I'm writing.
Smart core, thin interfaces
Here's an approach to writing code that I've been using for years and couldn't quite put into words until now. One of those _"This feels wrong but I can't explain why"_. Now I can!
Empirical evidence for code modularity
Few of your engineering decisions matter long-term. Software is soft. You can change your mind. But how you structure your components is here to stay.
November 2024
Why even care about code structure
As long as it works, right?
The anatomy of a React Island
A coworker asked how React Islands work and I realized it's a technique I've been using to modernize monolithic web codebases for years, but never wrote down how it works.
Finding modules in a big ball of mud
Pulling modules out of a big ball of mud is like grabbing a slice of cheesy pizza. It's kinda separate but also not really.
Why you need observability more than tests
Here's a short and sweet story about a Friday deploy. I love Friday deploys.
Big Ball of Mud – the world's most popular software architecture
Forget Gang of Four, here are the 7 architectural patterns real programmers use:
Why software only moves forward
At scale there are no rollbacks and no cut-overs. Your software only moves forward.
October 2024
Make mistakes easy to fix
You can't prevent bugs. You'll burn out. Instead focus on making them quick to fix.
September 2024
The Laws of Software Evolution
Manny Lehman was one of the first to notice that software is never done. It just continues to evolve forever.
Better is good
A small improvement that lands is better than a large improvement stuck in review
How big up-front design fails
A long design phase without shipping kills many software projects. Here's a story from production I haven't shared before.