Sociotechnical systems The free software commons Free and open source software has become a modern commons, but now it's vulnerable. Freedom isn't sufficient to secure it for the future.
Sociotechnical systems Mental maps, part 2: incidents and observability We map the system so that we can change the system, so then we must remap the system. That's the tight inner loop of software development.
Sociotechnical systems Complex vs complicated A quick and practical summary of what it means for a system to be complex, or not.
Sociotechnical systems Mental maps for navigating software systems Learning and exploration in complex systems happens continuously, forever. We need to constantly update our mental maps, or they'll lead us astray
Artificial Intelligence Featured Losing the imitation game AI cannot develop software for you, but that's not going to stop people from trying to make it happen anyway. And that is going to turn all of the easy software development problems into hard problems.
Advent of Code in Production Advent of Code in Production, Day 6: Operating Environment Let's talk distributed systems! Getting into the details of how we could build a whole system to support Santa's elves, instead of a bunch of scripts.
Advent of Code in Production Advent of Code in Production, Days 2-4: Early Development Continuing my attempt to design a cohesive system that can address the challenges faced by Santa's Elves as they collect magical star fruit.
Advent of Code in Production Advent of Code in Production, Day 1: Project Kickoff Explore how you might approach building the solutions to Advent of Code challenges as a production service that you intend to operate long term, rather than as a collection of one-off scripts.
Engineering Dimensions of Scalability We are part of the systems we build. When those systems scale, that includes us. The approach we take will determine how successful and how painful that scaling will be.
Engineering Named Things This is a cautionary tale. It's the story of an internal tool development project. We'll call it Astro, because naming things is hard, and the reasons why are very instructive.
Engineering Designing for Testability The same factors that make your software hard to test will also make it hard to maintain. By adding tests, you can find and fix those things, and so the simple fact of having tests will make your software projects more successful.
C# Maybe don't use StringBuilder So, should you use StringBuilder? Yes, sometimes. It depends on what your data is like, and what you're optimizing for.
Engineering Enabling Refactoring To succeed at refactoring, you need to make small, incremental improvements. It needs to be continuous. It needs to be habitual. And it needs to be proactive. Because it's not special; it's just a regular part of development. This is continuous refactoring.
Engineering What language should I learn? Programming languages are tools used to solve problems, not problems themselves that need to be solved. And so learning to use them should be approached in the same way you would learn to use any other tool. Which is to say: it depends on what you're trying to build.