The obvious, the easy, and the possible

Update (August 2016): There’s now an updated and revised version of this article.

I’ve been binge-listening to Work In Progress, the YouTube show/podcast with Jason Fried (founder and CEO of Basecamp) and Nathan Kontny (CEO of Highrise). In one of my favorite episodes, Jason talks about the idea of thinking about product development and interface design in terms of three buckets: the obvious, the easy, and the possible. In this post, I’m going to explain what this idea is all about and why I think it’s so powerful – even if you don’t think of yourself as someone who can design web applications.

Whenever you build a product or feature, you have to figure out what really matters. In other words, you have to understand which things go in which bucket. Ask yourself:

You might be wondering why I, a systems guy who’s mostly into infrastructure automation, care about design principles. Most of the time, the only interfaces I “design” are command-line interfaces. While designing a CLI is undoubtedly different from designing a web application, the same principles apply: I have to figure out what needs to be obvious (and provide commands for common operations), what should be easy (e.g. via command-line options), and what should merely be possible (e.g. by enabling an experimental feature via an environment variable or by formatting output so that it can be processed by other tools).

By figuring out which things go in which bucket, it is more likely that I – and you – build something that actually provides value to the person using it, no matter if you’re creating a web application, command-line tool, or any other user-facing product.


The original post, “The Obvious, the Easy, and the Possible”, published on Signal v. Noise in 2011.

The show that inspired me to write this piece in the first place: