Make Simple Things Simple, Complex Things Possible
A design principle attributed to Alan Kay: the common tasks should be easy to do, and the advanced tasks should still be possible.
Also known as: Simple Things Should Be Simple, Complex Things Should Be Possible, Easy Things Easy, Hard Things Possible, Alan Kay's Principle
Category: Principles
Tags: software-design, api-design, user-experience, developer-experience, simplicity, complexity, principles
Explanation
"Simple things should be simple, complex things should be possible." That's how Alan Kay put it. Larry Wall, the creator of Perl, said something very similar: "Easy things should be easy, and hard things should be possible."
The principle sounds obvious. Yet most tools fail on one side or the other.
**The two ways to fail**:
- **Only simple things are possible**: The tool is easy to start with, then you hit the ceiling. The moment you need something slightly unusual, you're stuck, and you have to switch tools (and redo everything)
- **Even simple things are complex**: The tool can do anything, but every task requires configuration, boilerplate and documentation. Getting started takes a day. Many people give up before seeing any value
Good design avoids both. The first steps are trivial, and the path to advanced use exists without forcing beginners to see it.
**Examples**:
- **`fetch(url)`** in JavaScript: one argument for the common case, an options object for headers, methods, credentials and the rest
- **Git's porcelain vs. plumbing**: everyday commands (`commit`, `push`) on top, low-level commands underneath for those who need them
- **Cameras**: an automatic mode for everyone, manual controls for photographers
- **Obsidian**: plain Markdown files for a quick start, then links, properties, templates and plugins when you're ready
**How to apply it**:
1. Identify the 80% case (see the Pareto principle) and make it work with zero or minimal configuration
2. Give sensible defaults to every option, so people can ignore what they don't need
3. Layer the advanced features underneath, reachable when needed (see progressive disclosure)
4. Make sure the simple path and the advanced path are the same system, so people never need to start over
5. Provide escape hatches for the cases you didn't anticipate
**The connection to the Pit of Success**:
When simple things are simple, the easy path is usually also the correct one. And when complex things stay possible, people don't need to fight the system (or leave it) as their needs grow.
Related Concepts
← Back to all concepts