I made a very small app that I find personally abhorrent to ever use.

More on that in a sec.

First, please download it. I’ll probably ask you a few more times over the course of this post, but downloading helps my rankings! And plus it makes me feel good.

Anyway, I made an app I’ll never use.

Here’s the app again. Have you downloaded it yet? Of course you have — you’re my friend and want the best for me. In case you skipped over the app description in your haste to download the app, here’s what it does:

Cluebird is a helpful free utility for solving crossword puzzles or other word puzzle where you need to fill in the blanks or match a word to a clue!

So yeah! The name of the app is Cluebird. You can put in a crossword clue, like 60 minuti, and it tells you what the answer is — like ORA.

Or you can put in a template for an answer, if you’re missing a couple squares, like LA___RS, and it’ll give you the possible answers: LAWYERS, LANCERS, LADDERS, etc.

It generates these answers straight from the source – from over 2.7 million clue/answer pairs sourced from the New York Times crossword (and a couple other publications, too.) If you’re a Bayesian, then you know you can count on this app to help you complete your crossword. (If you’re a Frequentist, you’ll just have to take my word for it.) 1

Justin, that’s not a very complicated app.

Of course it’s not a complicated app. The most interesting part of the app is the data set: the app itself is two table view controllers, some ORM glue, and a bunch of boilerplate. It’s basically a Hello World app except with 1.6 million rows.

It’s so technically trivial that I even open sourced it! You can check the code out here.

The code is mostly bad, because I made a deal with myself that I would create this app in ten hours. Ten hours over ten days, to be precise: one hour before work, Monday through Friday, for two weeks.

(I ended up going a little bit over my time limit, because I forgot about creating screenshots.)

(Creating screenshots is the worst, but thankfully iTunes changed it so you only need one set of iPhone screenshots. Previously you needed to get a set for each screen size, which was the absolute worst.)

Justin, I’m not even sure this is a particularly useful app?

I’ll go one step beyond ‘not particularly useful’ and say that I actively discourage the use of this app in my household. As far as I’m concerned, looking up an answer to a crossword is cheating, and thus this app is cheating.

If I catch you using this app when you’re solving a crossword, I will be very upset. I probably won’t say anything to you — I am not very confrontational. But I will give you a stern look and — perhaps when you are not looking — shake my head.

That being said, be sure to download it if you haven’t already!

Why I made an app I’ll never use

  1. I had a cool data set. I crawled my way to every clue/answer pair in the New York Times Crossword for the past sixty years, and I wanted to do some cool data viz stuff to it but I was having trouble thinking of a good jumping off point when I realized I could turn this into an app.
  2. It had been a while since I released something. Over the past couple months I started a dope new job and a fun new side project which had been dominating most of my programming time, but it had been a while since I actually released the 1.0 of anything — especially when that fun new side project keeps on growing in scope every couple hours.
  3. Releasing things is intrinsically good. Hitting “Upload to App Store” feels good. Hitting “Release App” feels good. Getting money from software is good. Senses of accomplishment and completion are really good.

What I enjoyed about making this thing.

  1. Doing competitive research is really fun and a good muscle to excercise. Especially when your competitors seem mostly incompetent and have not updated their apps since the release of iOS 7. I am not joking: this and this and this are my main competition. This was also a good proxy for “will literally anyone use this” — some of these apps have high hundreds’ of reviews, meaning that some sort of audience is there.
  2. I got to bikeshed for a while. The fundamental technical problem at the heart of this — how do you search a couple million pairs of strings — is actually kind of tricky, since the two access patterns (substring search and regex) don’t really lend themselves well to basic indexing. I messed around with Realm, Core Data, and various in-memory trickery before deciding to spend 30 minutes loading everything into SQLite and call it a day. (It wouldn’t be a perfect bikeshedding section if all of that work didn’t end up completely useless.)
  3. Dealing with UIKit reminded me what I love about programming. What I love about programming, in this case, is anything that does not involve using UIKit.

What still needs to be done

  1. The search throttling mechanism is dumb. I started implementing an operation queue but then got distracted and stopped because it’s already relatively fast, but will probably try and finish implementing that at some point.
  2. Achieving feature parity by I guess hooking into a dictionary? Some of the competitor apps have dictionaries and stuff so if you tap on words it gives you a definition and related words/clues. A couple reviews mention this. I’m not sure if it’s worth the effort.
  3. Actual screenshots. Seriously the screenshots I submitted the app with are awful. Like, comically bad. I need to probably do the trendy thing and have the screenshots include a render of the actual phone.

(Or maybe I’ll never touch it again! Who knows.)

What’s happened since releasing it!

  1. I bought a bottle of Elysian Pumpkin Stout! That’s kind of unrelated, but I’ve been looking for this beer since mid-September and finally gotten a couple bottles. I’m pretty jazzed about it.
  2. Cluebird has been live for 48 hours and grossed 12 dollars. If I were to value my time at $200/hour, that means I invested $2000 into this app, which means it has yielded a 0.6% return so far. That’s not so good. But $12 is enough to buy two bottles of Elysian Pumpkin Stout, which is pretty good.

In conclusion

Make things! Even if they’re kinda small and dumb. Releasing things is good.

Releasing things and then having a pumpkin stout is even better, but feel free to substitute that pumpkin stout for a nice scotch or hot chocolate if you’re not really into pumpkins or beer.

If you go for hot chocolate, get marshmallows.

You deserve it.

  1. Full disclosure: I might have accidentally swapped the role of the Frequentist and the Bayesian in this joke. [return]
Liked this post? Follow me!