designing in layers
the best software doesn’t overwhelm you on day one or abandon you when you get sophisticated. it grows with you through carefully designed “layers” that reveal themselves exactly when you need them.
think of it like learning to drive. you start with acceleration, brake, steering. you don’t need to know how the engine works or aerodynamics. but as you get more curious about cars, those deeper systems are always accessible, within the same car.
at Notion, we built this philosophy into everything. you could start typing and immediately have a working doc. then add a table. then views. then automations. Cursor does this beautifully too — starts as a code editor that just works, then you discover Tab, then Agents, multiple models, then advanced rules & team workflows. each layer reveals itself naturally as you code more.
most software gets this wrong — they either dump everything on you at once, or kill the advanced stuff so you can’t do things your way. the real challenge isn’t designing each layer, it’s designing the transitions between them. that moment when someone outgrows the defaults shouldn’t feel like hitting a wall. it should feel like discovering a secret door that was always there.
alan kay once said users should be able to “open up the hood” of their word processor and tinker with it. when you design in layers, you’re building that kind of learning environment where users can discover their own potential. the goal isn’t to hide complexity — it’s to sequence its reveal. give people exactly what they need when they need it, and trust them to grow into the full power, pushing the boundaries your concepts in ways you’ve never imagined before.