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 […]
From Stanford CS Professsor John Ousterhout: Today’s thought for the weekend is: the most important component of evolution is death. So I want to address that first at a biological level and then let’s pop up and talk about it at a societal level, Silicon Valley, and computer software. So, first, from an underlying biological […]
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 […]
A heuristic for deciding how many classes, functions, methods, modules, etc. you should add to your system and whether you should add one more.
If you get good enough at doing something valuable, at some point they’re going to reward you by not letting you do that thing anymore. They’ll ask you to spend your time teaching other people to be as good as you are. You will mourn the loss of what you enjoyed doing, but eventually you’ll […]
Decisions vs. Dependencies is an idea from Gary Bernhardt’s outstanding talk Boundaries. This is one of the most popular heuristics that I teach.
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.