Learning to finish something might be the most useful skill I’ve been neglecting most of my adult life.
About a year ago I read a blog post about game development by Derek Yu. His emphasis on finishing projects really stuck with me. Since I was 14 years old I have worked on software, art, and music projects, and while I think I’ve probably learned a lot, I wasn’t convinced I had truly finished many of them.
It’s worth pointing out that software is never truly finished because it is malleable by definition. There is, however, a distinction between software you can release to the public and software you can’t.
Last May, I was looking at Astronomy Picture of the Day and thinking about app ideas. I wanted to learn iOS development and begin a habit of finishing things. I was regularly watching some Neil deGrasse Tyson clips about the importance of space exploration and its impact on science and engineering education. I think I was watching these same two clips every morning for a month or so, like a crazy person. I appreciated the message and how it was delivered.
The beauty of outer space is staggering, but it can also serve as a reminder that we can and should push the limits of human knowledge. NASA’s budget is ridiculously small. I decided to build some kind of space app, maybe something that could both raise awareness and eventually donations.
I set low expectations for Spacebook: success was an app store release and a single customer (myself). The reasoning was straightforward: if it were simple, I would have no excuse not to complete it.
Too often, I have begun a project convinced it was the best idea in the world and that everyone who heard about it would use it all the time. These failures were always logically sound at the start, they just weren’t particularly interesting, and sometimes poorly executed too. It’s similar to writing a song and calling it finished just because it has no more wrong notes: it’s not wrong, but it’s not good either. The experience of expecting what I’m building to be important and finding that it is not was valuable.
I don’t think confidence in a nascent idea is a bad thing. I think a certain foolishness is key. People who change the world wouldn’t be able to take the necessary risks without some ability to disregard reality to some extent. Spacebook just didn’t have goals so lofty.
The point was to keep it simple. It was to get in the habit of starting small and learning to grow ideas to their rightful size. I wanted to ignore user adoption and marketing and the need to truly solve a problem for someone. I wanted to pay close attention to what it felt like to push myself to finish something.
I looked forward to early mornings and weekends where I could focus for several hours at a time. Testing the app was pleasant because it meant looking at space pictures until something about the process annoyed me. Engaging the community was easy because it meant going to astronomy lectures, talking to people at the local observatory, or hanging out with my super smart 5 year old neighbor and talking about spaceships. I do that stuff anyway.
The most important part of the process started in October. I began beta testing with a group of about 20 friends and was immediately inundated with ideas for improvement. The app changed significantly during this two month period, usually for the better. It remains difficult to hear that you may be wrong about what you’re building although it seems to become easier with time. I stopped blindly predicting what users wanted and put my energy into understanding exactly what their problem was so I could solve it.
This phase was easily the most demanding but also the most motivating. I found that I wanted to please my users; I was happy to listen to them and push new builds out as often as possible. I didn’t mind that I would often create and delete an entire feature across only a handful of releases. A special thanks goes to Will Etling for helping me narrow the feature set and overhaul the interface.
The most difficult period was the last few weeks before release. There was nothing fun left to build, only subtle bugs to hunt down and stability and performance tuning; occasionally I would procrastinate by refactoring. I just wanted it to be done so I didn’t have to work on the same project anymore. I set a date for code completion and app store submission (New Year’s Day) and beat it by a day. It was the only part of the process that felt like a grind.
Admittedly not scientific whatsoever, it seems to me like somewhere around this final push might be where most software projects die, and that the only way to breathe new life into them is to release them. It could be that the amount of motivation left is diminished by the amount of work left to do. It’s probably easier to limit the size of the project than it is to find more motivation.
The day I submitted Spacebook I felt proud. The next day I felt like I had retired. This project had been dominating my spare time over the last few months and now there wasn’t anything else to do with it, at least not until it was time to release an update.
I was at the movie theater when I saw an email from Apple saying that Spacebook had been published. I was elated. I hugged my brother and Casey, and texted my girlfriend, some beta testers, and my family. Then I watched 3 hours of Zero Dark Thirty.
I think there are a couple of reasons I was able to actually finish Spacebook. I held myself to a rule of working on it for at least 30 minutes every day. I took time to refactor bad code so I could make quicker progress in the future. I tried not to refactor too much too soon—the app shipped with plenty of code I’m not proud of. I used Trello to organize my tasks and, more importantly, keep my priorities straight. Work progressed much faster after I deployed the API server and installed the app on my phone; I think it’s important to release something as early as possible.
Most importantly, I took the “less talk, more rock” advice very seriously. I can’t emphasize this enough. This was the first project where I felt that I built the most interesting components first and then filled in the gaps. This kept me excited and made it easier to avoid working on trivial stuff.
I don’t expect Spacebook to be a financial success. It costs money to rent servers and I don’t anticipate people clamoring to buy the app. I can say that it doesn’t matter as long as I can afford the server space. I am just very happy I shipped something. I’m happy that I learned a bunch about coding and a little about myself. If I find out that a couple of curious kids used Spacebook to find panoramas from Mars and learn about rover missions, that would be a really nice bonus. Either way, I’m going to try to finish more projects.
Spacebook is a growing collection of over 6,000 astronomy photos intended to educate and entertain. It is now available for iPhone and iPad.