It’s a weird exciting time in software engineering. LLMs advance. We get better at using them. Background agents hit critical mass in January 2026 with Stripe’s Minions , and Ramp’s background agents . Cursor launched computer use in their cloud agents and automations in February and March 2026. Anthropic has been pushing hooking Claude Code up to GitHub Actions for a while . At work we’ve been…
LLMs and coding agents like Claude Code crank out code but have poor taste. They are irrepressibly-enthusiastic junior savants. Irrepressibly enthusiastic junior savants are super useful! However, when used carelessly you’re at the mercy of the model. That’s fine for prototypes or small codebases, but in a larger codebase doing Real Software Engineering with a team of engineers, heavy agent usage…
Sometimes I finish a session in Claude Code and run the /cost command. “It cost $2.37 to fix that bug,” etc etc. My own time is involved, of course, but seeing the cost in tokens and vendor spend is helping me think about building and tending software in a way I haven’t before. Costs in software engineering are usually fuzzy. How much does a feature or product cost? Do you count salaried employee…
A few sections of this were written by an LLM, before I discovered my opinions on LLMs for writing assistance. I cringe at it now, but I have left it un-edited. To be cringe is to be free I guess? I don't use LLM-written prose for personal writing now. Practicing hard conversations makes them easier. This is true even if the live conversation doesn’t look much like your practice. Hard…
A handful of pieces of great software writing float around in my brain. They rotate over time, loosely influenced by what I’m reading and what I’m working on. A current list is: Programming As Theory Building Being Glue Choose Boring Technology The Rise of Worse Is Better They are generally more strategic than tactical, which helps them age well. I wonder what the list will be in a year? A Short…
Lately I’ve been thinking about possibilities and capabilities on engineering teams. I was chatting with an engineer about tracing , spans , and getting detailed timing information from a complex browser application. It was fun to think about! We had a bunch of different pieces that helped with different subsets of the problem. We could squint our eyes and see a way to combine them in to something…
My Twitter feed is a nightmarish cacophony - cute art , police brutality, security vulnerabilities with catchy nicknames, dire economic news, fun jokes, squabbles over programming languages, etc. You know the dril . Time for a change! I follow people I like and admire and am friends with, but the aggregate feed of all these people I like and admire and am friends with somehow makes me sad. Perhaps…
My motorcycle goes about 140 mph, and gets there pretty quickly. I do not need to go 140. It would be wildly dangerous, it’s not great for the bike, and my ego is not so fragile that it is harmed by riding safely. However, I do need to occasionally crank the throttle to speed by a distracted commuter on a cell phone or someone weaving in a lane or a pickup truck’s blind spot. A fast bike doesn’t…
I manage a team developers. Every two weeks, I pair-program with each person on the team for an hour. If you’re a software developer managing developers, the ability to pair-program is a unique skill you have that you should take advantage of. Pair programming helps me gather information, enforces communication and collaboration norms, and (sometimes) helps us solve tricky technical problems.…
Keep interfaces small. Other things equal, a larger interface is always worse than a smaller interface. What do I mean when I say interface? An interface is the exposed functionality of a module. An interface is the exposed functionality of a module. For an HTTP service, the routes are the interface. For a library, exported or exposed functions, methods, and data structures are the interface. Each…
I recently took six weeks of paternity leave. Paternity leave is rad! The kiddo and mom are doing great. Coming back to my work inbox was not great. While on leave I received ~8,000 emails that weren’t filtered by my existing rules. 43 emails were actionable or worth reading. That’s 0.5%. Those 43 emails were pretty important, so I can’t just ignore all email. For reasons I can’t just unsubscribe…
Screwing up hurts. A while ago I made a hire I was excited about. It turned out to be a really terrible fit for the team and company culture. It blew up in the team’s face leading to pain, failed projects, and an acrimonious departure. What should you do when something fails, especially something you’re responsible for? Maybe you led a meeting that devolved in to insults, or a project collapsed in…
A while ago I read a post that included the following quote: Each hour spent on code review saves 33 hours of maintenance. This struck me as suspicious. I mistrusted the exactness, certainty, and magnitude. Software engineering is a fuzzy field and absolutes and exact numbers are not often found in the research. I decided to dig in to understand where this number came from. Thankfully, the author…
I read a fair amount about engineering management or things tangentially related to it. I really, really want to get better, and reading is one way I try to do that. Here are a few things I’ve read along with some thoughts about each one. I linked to the books I liked. Books I Loved Radical Candor I’m a people-pleaser. I want to be nice and I want everyone to like me. It turns out “being too nice”…
Recently I’ve been teaching networking concepts to front-end developers. Protocols come up frequently in networking, but I’ve found it hard to explain what a protocol is in general, separate from a talking about a specific protocol. The word “protocol” gets tossed quite a bit in computing. It shows up in a bunch of acronyms. HTTP is Hyper Text Transfer Protocol, TCP is Transmission Control…
I co-host a podcast, Soft Skills Engineering , with my friend Dave Smith . We recently decided to create a Slack for listeners to chat about soft skills. As this group grows, it’s important to me that the culture and values of the podcast also persist in to this chat room. How do you curate community and culture? I’ve started a few meets, run a few conferences, and started a couple of podcasts…
I just got back from Deconstruct Conf . It was great! Deconstruct is a generalist software conference that focuses on fantastic speakers giving wonderful talks. I’ve also heard it described as TED talks for developers, or “that Gary Bernhardt conference”. It features wonderful speakers with both new and established voices, unlimited scholarships for under-represented folks or students, a gorgeous…
A bug report has three main parts: what you expected to see, what you saw and steps to reproduce . This structure makes it easier for the team resolving to fix bugs you report. What You Expected To See Including what you expected to see provides context. Maybe you know how the feature should work, but the bug fixer could be looking at this feature for the first time. “What you expected to see”…
Here is a typical interaction I see with new hires at every place I’ve worked. New Hire : “I’m really excited to start here, but I just have a few questions.” Employee : “We are so glad to have you!” New Hire : “Why is there a machine on your desk that punches you in the face every 10 minutes? That seems like it would make it hard to get any work done.” Employee : “Oh, it is so much better now. It…
I’ve been a professional developer for about a decade, but there are tons of things I still don’t know. That is part of what is rad about software: there are so many things to learn! I’m reading a book about networking to try to learn more of these things. While reading the section about UDP I saw this sentence: [T]he transport layer assigns a port number in the range 1024 to 65535 that is…