Simple.

.........................................................

If something is not simple, it is nearly impossible to build.

I don’t mean simple in terms of visual design. Websites with lots of color and large illustrations are beautiful (Vimeo and Viget come to mind). Simple, minimal websites (Daring Fireball, A List Apart, etc.) can be equally stunning too. When I say simple, I’m referring to the design1 of the application as a whole. If it’s simple, it should serve one purpose and one purpose only. Unless you start with such simplicity, it will inevitably lead nowhere.

Twitter is my favorite example (and everyone else’s too).2 What did Twitter look like initially? Say you are building it, how would you implement it? You’d throw in a textbox on the webpage and on the backend, you’d hook it up to a database with just three fields – username, tweet_content and time (plus an authentication system which would take 2 seconds to configure with any popular web framework). That’s it. No support for even replies.

The reply syntax came about thanks to the community (just individuals making use of @username to respond to someone else’s tweet) and after that, Twitter tweaked Twitter slightly to add support for reply IDs so you can see which tweet the person was replying to. Retweets and hashtags are other powerful community-initiated practices. Dave Winer complains about the lack of “native” support for retweets in Twitter. They shouldn’t listen to him. Not “supporting” (non-prevention can be construed as support perhaps?) retweet is a good thing. If retweets actually became a feature similar to “Like” on Facebook and Friendfeed, it would change the way people used Twitter. Forcing changes in already-good user behavior is generally not a good idea.3

The development approach that Twitter brought to prominence is simply amazing. What they did was to start with extreme simplicity, then use their own product and evolve it further based on the usage. In modern times, that’s the mantra for writing anything successful. Start simple, use a lot, evolve.

Complexity

Now, you say “Yeah man, I agree with you completely but how do complex systems exist then?”. To answer that, I refer you to Gall’s Law:

“A complex system that works is invariably found to have evolved from a simple system that worked. The inverse proposition also appears to be true: A complex system designed from scratch never works and cannot be made to work. You have to start over, beginning with a working simple system.”

It’s impossible to start working on a complex system no matter how well you understand it (or more likely, think you understand it). Evolution is the only way. And another characteristic of all evolution (biological evolution in particular) is this:

At every stage of your process, the end result must be useful.

This is a very good rule for anyone writing software. What you need is the patience to evolve simple systems. Success takes time. To just stop and stare at something in an attempt to figure out the whole thing is not a good idea. A better approach would be to just start working and you understand more from that approach. Paul Graham agrees. It’s easiest to get new ideas when working on something.

Personal Failures

All my personal failures have been attempting large things without quite realizing how much work they would actually require 4.

Devo was very inspired by quicksilver. Having just bought a Mac (and loved quicksilver), I desperately wanted something like quicksilver in the browser. This meant that Devo had to be more like a catalog of everything in the browser. In fact, it was initially named Catalog (yeah, I suck at picking names). So, it had to import your browser history and bookmarks which was such a pain before Places came along. I also wanted it to know the extensions installed on the user’s Firefox, etc., etc. It was going to be one huge catalog. Obviously, it failed. It was too complex.

A few months later, I decided to start afresh (my idea of it had changed from a catalog to a command launcher by then) and this time, I had a real deadline — the Extend Firefox contest. The time-boxing forced me to work on only the core features (mind you, this does not happen naturally as an effect of time-boxing. I think I picked the right core features). Hence, the success of Devo was inevitable.

These days, Ubiquity keeps adding features and growing broader so much so that I doubt even Atul understands all the code in Ubiquity. But what does something like Ubiquity or Devo really need to work? It doesn’t need a natural language interface. It doesn’t need an API or a mechanism for command subscriptions. Skins are like diamonds on your teeth (read: unnecessary). It doesn’t even need to support multiple arguments! The only things it needs to be useful is a straightforward command executor (just the Google and Wikipedia commands alone would do). And that’s simple. And that works.

In my other projects (Things.webapp and “Open Digg”), I’ve made the same mistake. I didn’t focus on the simple core and choose instead to attempt the complex and unnecessary.

Cliche?

Yes, most of this has been said by 37 Signals, John Gruber and a thousand others. And to some extent, everyone realizes how true the “Simple” maxim is but being humans (and even worse, programmers), they greatly misunderestimate how simple simple should be. As Hofstadter puts it cleverly,

“It always takes longer than you expect, even when you take into account Hofstadter’s Law.”

What you need is help — someone on the outside to peer into your brain and tell you if it’s too complicated. Because complicated things can’t built. Instead, start simple, use a lot, evolve.

  1. What a word! So many meanings!
  2. To get a glimpse of how Twitter has evolved closely with its usage, watch Evan Williams explain Twitter briefly in this TED talk.
  3. So what should Twitter do now? Could Twitter do retweets better? Yes. Do they need to? No. On the other hand, they could work on search. Effectively, CNN and other big news networks now rely on Twitter to get breaking news (just imagine saying this last sentence 1 year ago!). That’s something they might want to improve. But seriously, I have no idea what the Twitter guys have been doing for the last 2 years besides scaling. Even their search feature was bought.
  4. Moreover, usually, as the number of hours required goes up linearly, quality of the overall application decreases somewhat exponentially.

~ Voices ~

This essay was originally published on my old blog. Comments can be viewed there. And there are more comments on Hacker News.