Software Engineering

144 articles · all categories

Software Engineering articles

September 2024

Why software projects fail

5 common themes

August 2024

What helps you ship confidently?

Been thinking about what needs to be in place for engineers to ship with confidence

Let small fires burn

You can't fix everything. Focus on the next big thing and let the small fires burn.

Small change in big scary codebase?

Making small changes in large unfamiliar codebases is the job. That's what engineers do all day.

Why SQL is Forever followup

Yes SQL is super flexible. That is its strenght and its weakness

July 2024

Why SQL is Forever

Never underestimate the power of good marketing for bad products. NoSQL was fun but SQL is here to stay.

90% of performance is data access patterns

Removing a single line of code slashed database CPU usage by 66% 🤘

DRY – the common source of bad abstractions

Swizec reveals the hidden pitfalls of overusing the DRY principle in coding, leading to bad abstractions. Discover how to write adaptable, efficient code that avoids these common traps.

Scaling Fast, my talk on lessons from tech startups

This talk from C3Fest summarizes the key lessons I've learned in the past ~15 years of working in tech startups. It's a high level overview of a new book I'm writing (60% done).

You can't side-quest a product

Here's a trap that talented engineers fall into all the time. It creates frustration, burnout, and the genre of tweets that read like "Why don't people care about the amazing work I'm doing".

June 2024

6 books engineers should read

Here are 6 books I'd buy every engineer who joins my team, if I ran a team. You might like 'em too.

It’s okay to just do the work

Not everything needs to work forever. Start by solving the problem

May 2024

Why you shouldn't use AI to write your tests

If you derive tests from your implementation, you can't apply the Beyonce rule. What if the code is wrong and that wasn't the programmer's intent? We'll never know. The bug now exists in both places.

April 2024

43 years of the actor model

The actor model is now part of everyday tooling and ensures concurrency safety. Understanding the principles behind it helps you write less buggy code.

From trivial to complex – 4 software quadrants

You can classify software projects into 4 quadrants from trivial to complex

March 2024

Architecture is like a path in the woods

You're doing too much. Sit back, relax, see how people *want* to use the code. THEN build the abstraction.

December 2023

Keeping a high engineering culture, tips from the field

I asked engineers how they keep a high quality culture. These are the takeaways

November 2023

The efficacy of TypeScript

TypeScript may streamline code navigation and catch semantic errors, but it doesn't guarantee fewer bugs or faster fixes.

Don't neglect your upgrades

Regular software updates may seem tedious, but they save you from the nightmare of a massive overhaul down the line.

October 2023

Solve the problem, not a different more difficult problem

Solve the problem at hand, not the one you imagine might come next. A simple fix now often beats a complex one later.

August 2023

Avoid spooky action at a distance

Shared state in programming isn't the enemy, it's unclear dependencies that tangle your code. Keep it clean with explicit state dependencies and strict access guidelines

Finding modules in a Big Ball of Mud with ChatGPT

Detangling a Big Ball of Mud is hard. You have to find domain boundaries where none exist. Looks like AI can help 🤩

Followup answers to Forget complicated code, focus on the system

Why are utility files bad? How do you recognize architectural complexity? What the hell is a transitive dependency?

Forget complicated code, focus on the system

Clean code matters, but it's the architectural complexity that truly impacts your productivity and bug count. Focus on simplifying the system, not just the code.

July 2023

What I learned from Team Topologies

You can't escape Conway's Law. Might as well use it for good.

Different worlds

Different lenses, different worlds. Your perspective is shaped by your experiences. Even in debates, all sides can be right in their own context.

You can't stop the business, or why rewrites fail

Rewriting code isn't a magic fix-all. Consider the opportunity cost, complexity of the old system, and estimation challenges. Instead of stopping all to rewrite or building new while maintaining the old, try incremental improvements and new code adoption.

June 2023

When to throw away your code

Delete code when it stops providing value 💡 All code is a liability; context matters. Keep what solves problems, toss the rest.

What does "solve problems" even mean

Focus on solving problems, not just doing work or writing code. Think creatively, question existing processes, and prioritize effective outcomes

Why taming architectural complexity is paramount

Unravel the hidden costs of architectural complexity in software engineering and learn practical strategies to tackle it. Boost productivity, reduce defects, and improve staff retention with insights from an MIT PhD thesis.