Balancing Efficiency and Complexity
Ousterhout emphasizes that while optimizing for efficiency is important, it should not come at the cost of adding significant complexity to the system. He advises that if a more efficient design only adds a small amount of complexity and this complexity is hidden from interfaces, it might be worthwhile. However, if the efficient design results in complicated interfaces or a lot of implementation complexity, it is better to start with a simpler approach and optimize later if performance becomes an issue. This principle is illustrated with the example of the RAMCloud project, where the team decided to use special hardware for networking to achieve low latency, despite the added complexity, because kernel-based networking was too slow to meet their needs.