John Ousterhout brings together a thoughtful collection of ideas on how to design software to avoid complexity.