Build Something Useless

Around eight years ago, I sat down at the computer for the first time as a programmer. Little did I know, the simple, tacky website I built was the first step towards the person I am today.

I still remember the two paned, frame based website I built. It was terrible, with solid yellow backgrounds, and existed solely to show off photos of my new dog. This was back in the day when Microsoft FrontPage still ruled. During the winter, I made snowflakes drift down the page slowly using Javascript snippets from various websites, and during a power outage one year I built a Flash version of the site that mirrored my dark house with only virtual candle to light up the content. Really, everything I made or did was seen by a handful of people that landed on my site from a Google query. And I still have no clue exactly what they searched to get there.

Recently, on a website called Forrst, someone posted a question: “how did you all get in the position that you all are in?”

For me, it wasn’t just a passion for computers that improved my skills beyond the solid yellow backgrounds and tacky Javascript effects. It was the years and years of building useless side projects.

It’s not as Useless as it Seems

Over my years as a programmer, I’ve built tens of tools, websites, apps, and miscellaneous scripts– but there are only a handful that made it into the public. I have a habit of practicing and learning by building small tools or apps. It started out as citation generators (for school papers), and has more recently been small Node.js experiments. Almost every single one of these experiments has been done before by someone else. I wasn’t building a revolutionary new product– in reality, I was reinventing the wheel. I almost never added unique functionality, just recreated it.

But it was never as useless as it seemed. There have been times where someone has asked me, “what are you working on?” “Nothing,” I would reply. And I meant it– in their eyes, I was working on nothing. Just some website that I’d half finish and burry in my tangled mass of Dropbox folders. Yet I’ve learned many new techniques, such as how to built hierarchical menus using recursion, how to use Cron jobs effectively to scrape websites, and how to work with new languages and platforms. As long as you do not cheat yourself and copy and paste code from another implementation, anything you build is practice. That isn’t to say you need to avoid all libraries and plugins– sometimes it isn’t your goal to recreate the Sizzle CSS selector engine or WebKit. Just ensure you are using your time to learn something.

Looking back, it’s actually pretty astounding what I’ve built.

  • A deal aggregator that notifies you when a watched item goes below a certain price or has a sale percentage
  • 4-5 different website templates for my personal portfolio
  • 2-3 different weather apps, across iOS and mobile web
  • AWS Server management app for the iPhone, which is fully functional for managing EC2 servers and elastic IP addresses, as well as partial support for managing EBS volumes and S3
  • A time management app for high school and college kids, incorporating a flash card sub-app
  • And even more random web-apps that I can’t even find anymore

And yet, all of this stuff has never been seen by anyone else. In fact, until now, no one else has even known about most of these random projects.

Why Not Release Them?

A lot of people call me crazy for simply discarding these projects. They claim it’s a waste of time, a waste of resources, and potentially a waste of a good idea. And they might be right– at least about the wasted opportunity for one of those ideas to actually be a hit and make some money.

But I don’t have unlimited time or resources, and I can’t launch every experiment I make. But, Andrew, “Why don’t you just spend less time on the little ideas, and focus on the few good products that have some potential?”

We can all agree a basic MLA citation generator written in C# would be almost completely useless. If anything, it might be useful to open source it or write a tutorial on it to help others, but this particular example was well before I had any knowledge of version control or the capacity to write a blog post.

But the deal aggregator– that might have some use. After all, I regularly browse deal sites myself, and I hate receiving tens of emails from tens of different deal websites. Others must want this product, too. The problem was, it worked– but only for myself. It was hacked together as an experiment in RSS parsing and Regex, but it was never meant to support hundreds or even thousands of users looking for deals on the newest Macbook Air. I would have to spend even more time building additional features (such as basic user authentication), and then polish the app. After all, there isn’t much of a point to launching half-baked products that I have to support.

Ultimately, the point of these experiments wasn’t to launch them to the public– it was to launch them for myself. I actually used these apps to a certain extent. The MLA citation generator helped me through school until the district got a subscription to Noodle Tools, and the deal aggregator actually did end up notifying me of a few deals. But even more importantly, they taught me a valuable lesson– build something that others see as useless, as long as you see a point to it and can learn something from it.