Above all else, our software must be correct. Since correctness can only be measured at a single point in time, we need our software to be changeable in order to maintain correctness through time. In order to change one part of the system without breaking anything else we need to be able to understand our […]
There’s a third aspect of being easy that I don’t think we think enough about, which is being near to our capabilities. And due to a combination of hubris and insecurity we never really talk about whether something is outside of our capabilities. It ends up that it’s not so embarrassing after all because we […]
Database updates were creating huge performance problems for Facebook in their early years as they scaled up.
Many of the problems we encounter when trying to design systems that are maintainable long term are complications of combinatorial explosions. Combinatorial problems are a subset of the problems associated with Nonlinearity, which are the subject of Nassim Taleb’s outstanding book, Antifragile. If I throw at someone’s head a ten-pound stone, it will cause more […]
I find it useful to think of Software Engineers as part of one of two buckets: Application Developers and Computer Scientists.
If you want to learn how to be like Elon Musk, don’t read the book that Elon Musk wrote—read the books that Elon Musk read. I always tell my teams that if you want to be able to do what I can do then you should learn from the people I learn from.
This is a team exercise to address the problem of two smart people who can’t agree.
Two of the smartest engineers on the team have locked horns over some design decision and they’re really going at it. I used to watch this sort of thing happen every week. (If I’m being honest, I usually was one of the guys arguing.) I thought about this phenomenon for a very long time. It […]