Sunday, December 25th, 2005

How to become an independent programmer in just 1068 days.

If you watch the
Evening at Adler video you'll come across a part where some of the guys on the panel talk about how much it costs to make the transition to doing the independent macintosh programmer thing. Specifically Jason Harris who apparently went deep into credit card debt when making the jump. He's out of debt now, but.... yikes.

When I started writing software on the side for fun, it never really crossed my mind that I would be able to support myself and do it full time. Of course, the dream was there in the back of my head, but I didn't think it was actually attainable. I figured my best bet was to become a good enough programmer to work for a decent mac company some day.

So in the beginning my objective with the software I wrote was to make enough money to buy toys. Toys being upgrades to the latest version of CodeWarrior and even for a period of time REALbasic. I never actually made any money off the apps pre-voodoopad, but it was fun anyway so I kept on coding. Then I discovered Project Builder (soon to be Xcode) and Interface Builder, and I could thankfully stop spending money on IDEs. Actually, that's not true. I kept on buying CodeWarrior because I really liked their IDE and how fast the compiler was, it just smoked gcc. However I never actually used it very much for anything but java because I couldn't get any real cocoa work done with it. But I kept on thinking the next version ... *this was the one*. Unfortunately they never really got there and CW Pro 9 was the last release I bought.

Anyway, so when I started selling VoodooPad (and astonishingly people were buying it) my goal was to be able to make enough money off it to buy a 23" cinema display which I was lusting after at the time (now I'm lusting after a cintiq). That was the goal. If I made that I'd be in heaven.

So Lesson #1 - Think small and make sure you really like what you are doing.

After I won a place in the Mac OS X Innovators Contest people really began to notice my application and I got to buy my cinema display and eat mexican at least once a week. Wooohoo! I was in heaven. And then the money kept on coming in. Not even close enough to live off of, but enough to make me worry about little things... like getting sued. So my next goal was to save up enough money to incorporate as Flying Meat Inc., so if I did get sued they wouldn't take my house. So I did that, and eventually setup my own company bank account for eSellerate to deposit into. Goals are good. When you make them, it lets you know you are on the right track.

Lesson #2 - Setting goals are good. If you make them that means you are on the right track.

At 2003's OSX Con the winners from the innovators contest were up on stage to talk and answer questions from the crowd. One of the questions from the audience was something along the lines of "So, how many of you guys are actually able to make enough money to live off this?". Paul Kafasis, Brent Simmons, some guys from the Omni Group, and Oliver Breidenbach were able to raise their hands. Myself and some other guys weren't.

Damnit, I want to work for myself.

Ok, I've got a new goal now. "Gus the indie programmer". But this one is obviously going to take a bit more time, and I can't just jump ship and hope for the best. I've got a house to pay off and stuff. I'd have to take out a loan... I hate debt. HATE IT.

So I needed to sit down and figure out exactly how much I'd need every month to get by. I think it was about this time that the "goals" cgi script was born. It was a simple little python script that connected to my sales database that was updated for every sale made. It printed out little statistics like how much I made today, how much I would have made if eSellerate wasn't taking their cut, how much I made within the past 7, 30, 60, 180, and 365 days, how much I've made this year, and the kicker- what percentage I was supposed to make for the time period to make my goal. And what the heck, I'll throw in a second "woohoo" goal while I'm at it. I also had little bars setup for every month that would go green if I made the goal for the month, and red if I didn't. The filler space was painted black. Here's what March-Dec 2003 looked like. (Two bars for every month, a small one for the real goal, the taller one for the w00t goal).


Notice the complete lack of any green. But that's ok.. notice the upwards trend. (07/July was when I won the award.)

I checked this script religiously. Every day, every hour, every 5 minutes sometimes. There were times when the day job was particularly rough and I just stared at the thing, praying for some green to magically appear.

Time went on... and then this started happening in 2004:


Not. Good. August was a particularly bad month, and very depressing. I saw my dreams slipping away. So very not good. What happened!?! Well, I had released VoodooPad 1.1.1 in December of 03', along with VoodooPad Lite. I had my best sales day ever... resulting from making a free version, go figure. That was the peak, then I came out with a couple more updates in Jan and Feb. After that I really started working on VoodooPad 2.0, aka "The release that just would not happen". Bah. I planned for way too many features in there, and broke it in so many different ways early on. Bad idea. No releases = No money.

Lesson #3 - Steadily improve your product. Big jumps in functionality means lots of time without updates, and releases are where you get nice spikes in sales.

I make a public beta in September, then I had the marriage thing happen, and more public betas. VoodooPad 2.0 was released in December of 2004.



Wow. I attributed the huge spike to a couple of things. A nice new big release that people liked (duh), and another that took me a little longer to figure out... people feel more comfortable with a 2.0. Now, I don't think you can release a 1.0 and then a 2.0 a week later... but if you have your name out there already from being talked about on blogs and news sites, and then people see a big shiny X.0 release they think "hey, I should check that out". That's my theory anyway, and I'm sticking to it.

So. I made the the goal. Time to quit the day job!

Lesson #4 - Don't quit your day job.

Just because I made my goal this month didn't mean I was going to next month, or the month after that. I figured it would be much safer to just bank all that money and only spend it when I needed to. That way I would have a nice pad of money for the months that weren't so good. This was another part of my long term plan- I absolutely needed at least 6 months worth of my "salary" in the bank before I would jump ship.

Lesson #5 - Have money in the bank for a rainy day.

Shit happens. You've got a great mp3 player, and then Apple comes out and gives one away for free. Which leads to the release of FlySketch-

Lesson #6 - Don't put all your eggs in one basket.

I wrote FlySketch so that should anything happen that would make sales of VoodooPad tank, I'd have another app to lean on for cash. Plus now I get to do fun things like sell bundles at a discount which is good for sales as well. Plus my mind wanders so it's good to work on something other than a desktop wiki all day long.

Moving right along...

So it turns out that I did end up making my goal for Jan '05. And Feb, March, April, and so on. Every month that passed my confidence in going indie increased. I talked it over with the wife, and we decided that when we moved to Seattle that I'd be doing this full time. For the first six months I'd have to make X amount of dollars, and the second six months (which starts in Jan '06) I'd have to make more... and so on.

Here's a fun pic:


Click on it for a larger image. No, I won't tell you what the dollar amounts are. I'm not getting rich, but I will be able to give myself a raise next month as planned. I'll say this- I'm paying myself more than my first job, but less than my last job. I'm not getting rich but I'm doing alright. If I lived somewhere a little bit cheaper I'd be doing better... but that's ok, it's really nice up here in the north west.

One more, because I'm getting tired of typing.

Lesson #7 - It's not good enough to write and sell something that people want, it has to be got to be something they'll spend money for as well.

(I hope that doesn't come off as me being some money grubbing so and so. But if I want to do this full time, then I need to be able to pay for the house, food, and the dogs like occasional treats every now and again which cost money as well. At least the commute is only 12 seconds, I save a lot on gas that way.)

I've seen some cool ideas come and go, but for whatever reason they just didn't stick with people. And I imagine that can be pretty upsetting if you spend a lot of time working on it and it goes nowhere. Try to look at your app with a critical eye. Take FlyGesture for example- there is no way I would ever be able to go indie with that app, it just doesn't appeal to enough people. It has its fans, but not the same way as VoodooPad does or even FlySketch to an extent. If you aren't seeing growth in your sales... well, you better have another plan.

Implementation counts too. Sure, you could write it in java, but you're going to be spending a lot of time making it a mac application. Carbon is cool, but hard to learn. REALbasic is nice for some things, but I haven't really seen a compelling consumer grade application written in it. Just use Cocoa, you'll be happier in the long run. Yes Objective-C is a funky language to learn, and it's C under that... but you can do it. I did. The only class I ever flunked was... wait for it... cs103, intro to computer programming in C. So you don't even have to be a good programmer. (Mr. Job Interviewer, you want me to write a bubble sort routine? Crap, I'm screwed- you might as well just move on to the next job applicant.)

You've got to make it look and feel nice as well. Make it a Macintosh™ application. Someone commented to me the other day that both Brent Simmons (maker of NetNewsWire) and myself seem to have a sense for making usable user interfaces. I then pointed out that we both just try and figure out what Panic would do. WWPD? Stick it on a bracelet and you are set. Emulate who you want to be like, but don't copy because that's lame*. I guess that's lesson #7 1/2 .

So that's it! Gus's risk-free-no-money-out-of-your-own-pocket path to sticking it to The Man!

Just plan, set realistic goals, meet those goals, diversify, save up, add four cups of patience, and have fun. And most importantly- work your ass off. It's not difficult, it's just not easy. It takes time and patience and hard work.

Now it's your turn- go make a better widget. (Just don't go making another note taking application because that's what we don't need another one of.)

* I totally ripped off a specific visual effect from Transmit 3.0, and put it in VoodooPad 2.5. Can you guess what and where it is?

(Update: edited for typos.)

comments (38)   # posted 10:11 pm (uct-6)