Talks at Google on YouTube · Open on YouTube
System design and architecture · Proficient · Lesson 58 of 98 · 1 h 2 min video, then about 4 hours of practice
Managing complexity: deep modules and information hiding
After this you can identify shallow abstractions and leaky interfaces in a codebase and redesign a module so callers need to know less.
Why it matters
The core problem of software design is complexity: the things that make a system hard to understand and change. Ousterhout's central idea is the deep module, a simple interface hiding a lot of functionality, as opposed to shallow modules that add interface cost without hiding much. Focus on spotting information leakage (two modules that must change together), pass-through methods, and configuration that pushes decisions onto callers. Apply it in your next code review. Trap: equating small classes and many layers with good design. Lots of tiny pieces with complicated interfaces is often worse.
How to use this resource
From 2018 and the ideas are timeless. The best hour you can spend on software design.