Do one thing…

I don't want barely distinguishable tools that are mediocre at everything; I want tools that do one thing and do it well.

By Mike Loukides
October 30, 2015
Overgrown wall of Pudu Prison. Overgrown wall of Pudu Prison. (source: Wikimedia Commons)

I’ve been lamenting the demise of the Unix philosophy: tools should do one thing, and do it well. The ability to connect many small tools is better than having a single tool that does everything poorly.

That philosophy was great, but hasn’t survived into the Web age. Unfortunately, nothing better has come along to replace it. Instead, we have “convergence”: a lot of tools converging on doing all the same things poorly.

Learn faster. Dig deeper. See farther.

Join the O'Reilly online learning platform. Get a free trial today and find answers on the fly, or master something new and useful.

Learn more

The poster child for this blight is Evernote. I started using Evernote because it did an excellent job of solving one problem. I’d take notes at a conference or a meeting, or add someone to my phone list, and have to distribute those files by hand from my laptop to my desktop, to my tablets, to my phone, and to any and all other machines that I might use.

But as time has progressed, Evernote has added many other features. Some I might have a use for, but they’re implemented poorly; others I’d rather not have, thank you. I’ve tried sharing Evernote notes with other users: they did a good job of convincing me not to use them. Photos in documents? I really don’t care. When I’m taking notes at a conference, the last thing I’m thinking about is selfies with the speakers. Discussions? No, please no. There are TOO MANY poorly implemented chat services out there. We can discuss my shared note in email. Though, given that it’s a note, not a document, I probably don’t want to share anyway. If I wanted a document, even a simple one, I’d use a tool that was really good at preparing documents. Taking notes and writing aren’t the same, even though they may seem similar. Nor do I want to save my email in Evernote; I’ve never seen, and never expect to see, an email client that didn’t do a perfectly fine job of saving email. Clippings? Maybe. I’ve never particularly wanted to do that; Pinboard, which has stuck to the “do one thing well” philosophy, does a better job of saving links.

While this might sound like an Evernote rant (all right, it is), the problem isn’t just Evernote. Everything is turning into an indistinguishable mush. Gmail was a pretty good Web-based email client, and it does a great job of eliminating spam. But when you add chat, when you add connections to hangouts, when you add interfaces to the calendar, when you add pop-up pictures of your email contacts, it becomes just one more ill-defined mess. Gmail always annoys me with some kind of pop-up that obscures the message I’m trying to read. Google Maps was more useful before it tried to point out restaurants and tourist attractions, and before it filled up with junk snapshots. (BTW, what is “RAT Race Timing?” They’re practically my neighbors.)

I could say the same about just about every tool I use. Whether it’s Skype, Twitter, Google Docs, Flickr, or something else, everything seems to be converging into a single application that doesn’t do anything well, but does everything poorly. Even Dropbox is getting into the act. Pro tip: Don’t add email, chat, photo sharing, or videoconferencing services to your app. Unless your app is an email client, a chat service, a photo sharing service, or a videoconference. As Nancy Reagan said, “Just say no.”

There’s a reason for this regression to the mush that doesn’t have to do with the megalomaniac plans of product managers (“hey, if we add a chat client, we could eat AOL’s lunch”). Unix has pipes, which make it easy to build complex applications from chains of simpler commands. On the Web, nobody may know you’re a dog, but we don’t have pipes, either. There’s no good way to connect one Web application to another. Therefore, everything tends to be monolithic; and in a world of monolithic apps, everyone wants to build their own garden, inevitably with all the features that are in all the other gardens.

What’s wrong with this picture? Why can’t I pipe an email message into an unrelated videoconferencing app? Sharing Google docs works wonderfully: why can’t I just pipe my Evernote note into Gdocs and have done with it? Evernote might think they’re losing out on this deal, but it’s the reverse. Evernote already convinced me not to use their document sharing, so if I write a note that I might eventually share, I make it a Gdoc from the start. We have Web services with APIs; why can’t we use them? IFTTT is headed in the right direction, though it doesn’t quite get me to where I want to be. IFTTT’s biggest weakness is that it requires too much forethought and ceremony. With the Unix command line, you can just say “well, I can grep this, pipe the result into sed, and use wc to tally up the results.” Unix is great for one-time applications that you’ll never use again. The Web isn’t, but it could be. The first person to create a tool that can pipe a table from a browser into a spreadsheet, a Google doc, or even a text file without massive pain will be my hero.

I don’t want anyone’s walled garden. I’ve seen what’s inside the walls, and it isn’t a palace; it’s a tenement. I don’t want barely distinguishable tools that are mediocre at everything. I want tools that do one thing, and do it well. And that can be connected to each other to build powerful tools.

Post topics: Emerging Tech
Post tags: Commentary