How To Build Something Real (In Your Spare Time)

29 May, 2009 (16:40) | Entrepreneurship, Productivity, Software development, ThoughtMuse

stackedRocks

Starting a new pet project is easy. But finishing it? That's a different story.

Many programmers love to tinker with side projects. I'll argue that most of the decent ones do, anyway. Learning new tools makes us want to build things. Innovative technologies, cool product ideas. Unfortunately, the result is usually just a sad collection of forgotten files on some hard drive.

I'm certainly no exception to this - my portfolio isn't exactly jam packed with polished results. I've worked up enthusiasm for a variety of hobby projects over the years, with somewhat spotty follow-through.

Recently, however, I decided to step it up a notch. "This time I'm going to stick with it until I end up with a real product." So I did. I bootstrapped ThoughtMuse, an online mindmapping tool,  in under five months using only my spare time during nights and weekends.

To keep development of my product rolling I try to consistently apply basic productivity techniques. They're not particularly new and amazing methods - many of them are just Project Management 101. Unfortunately, they often seem to go straight out the window when programmers sit down to work on their own time. Perhaps using basic project management practices makes pet projects feel less sexy, somehow?

Anyway, these are some of my favourite techniques to keep producing in my spare time.

Set goals

Stating exactly what you want to achieve motivates you and focuses your efforts. And no, saying that you "kinda want to build this thingamajig" won't cut it. Be specific. Quantify. What am I creating? For whom? By when? What, and how much of it, do I need to achieve? Write down concrete, measurable objectives.

Divide into milestones

If your project will take more than a few weeks it's crucial that you divide the work into separate deliverables. Always having a single enormous blob of work left is demotivating. Instead, structure your project as a collection of smaller increments. And reward yourself every time you complete one of them!

Make yourself accountable

Tell someone what you are doing, and keep people informed of your progress. Talk to friends, post progress updates on your blog, whatever. The idea is to set up a small amount of external pressure to keep you going when the chips are down. I told Bob that I'd finish this cool widget by March - so I'd better get cracking!

Something every day

You need steady momentum to keep the project rolling. It's much harder to sit down and work if you only do so every other week - you then need to use more time and energy to "spin back up" every time. You also run a higher risk of falling off the wagon completely if you miss one or two  of those long sessions. Instead you want to ingrain a steady, regular habit which feels as natural as brushing your teeth every evening.

Don't force it

Like woodworkers say: don't work against the grain. If you hit a serious wall in some task, switch to something completely different to keep your momentum going. There's always other stuff that also needs to be worked on. Some code proving hard to debug? Jump to, say, user interface design instead. Then come back to the original problem later on. Problems have a way of solving themselves if you let your subconcious chew on it for a while.

Iterate, iterate, iterate

You won't get every task right the first time. Allow yourself to come back to each area of your product multiple times with fresh eyes. You'll see more clearly the second and third time you return to that piece of code or functionality.

Sustainable pace

Slow and steady will get you there in the end, full sprint might not. I think that taking the tortoise route is the safest approach. Avoid burning yourself out by overworking. This is especially important in the beginning when you have lots of enthusiasm. You will feel less optimistic in a few weeks or months, it's just a matter of time - so pace yourself.

Timebox everything

Perform an initial rough estimate of how much time and effort the project will take, given how ambitious it is. Then set aside fixed amounts of time you are willing to spend on your project. "I have to be done in three months, using no more than ten hours a week". Work on each specific task for set amounts of time.  This maximizes your focus. Timeboxing is especially useful if you're in a relationship; your girlfriend/boyfriend/wife/husband/children will thank you for this one.

Ruthlessly trim scope

This is the flip side of the technique above. You now have strictly limited time to burn on the project, so get the most out of your available hours. We have a tendency to get carried away, dream up new features and let the scope of our projects grow. Try to constantly remove instead. Paraphrasing Einstein: "Everything should be made as simple as possible, but not simpler." Do you really need this, that or the other to be satisfied with the finished product? If not, just archive the idea, then move along.

Let life intrude

Accept that Everyday Life can and will mess up your schedule sometimes. That's ok. Don't stress out about it - as long as you're moving forward you'll get there eventually. Just keep plugging away. Stick with it!

stonePath

I've described the techniques above in the context of software development, but they should be fairly universal and applicable for anyone practicing some sort of craft in their spare time. If you have any other methods which work well for you, I'd love to hear about them!

Are there areas in which any of these techniques don't work or are actually harmful? I don't know - feel free to tell me if you know of specific counter-examples.

Now, time to get back to work on that cool new feature...

Comments

Comment from Max
Date: May 29, 2009, 4:58 pm

I like the idea behind your product, but I decided not to signup because I did not see a sample / demo. I might come back at some time, but it’s something you might want to iterate.

Comment from Thomas Kjeldahl Nilsson
Date: May 29, 2009, 5:10 pm

Yep, I know. However, I hope to have the interactive tutorial up by next week. It’ll let visitors play around with mindmapping without signing up at all. Screencasts and screenshots are also in the works.

Comment from Dennis Gorelik
Date: May 29, 2009, 5:37 pm

Good tips, especially about minimizing the scope of the project.
I would also strongly recommend to find a partner for your project, because it’s too hard and inefficient to work alone.

How long have you been working on your project?

Comment from Paul
Date: May 29, 2009, 5:44 pm

I get what your saying, but the majority of the time my side projects are stopped because the problem I wanted to solve was already done or was just to specialized to make it worth it to finish.

Comment from Thomas Kjeldahl Nilsson
Date: May 29, 2009, 5:57 pm

@Dennis

Thanks. :) And I agree about the partner point. However I’ve gotten some of the same benefit from networking and exchanging favors/feedback with some other mISV guys.

I’ve been working on the project since early March this year, between 10 and 15 hours a week on average.

Comment from Thomas Kjeldahl Nilsson
Date: May 29, 2009, 6:24 pm

@Paul

I agree. If a project really turns out to be a complete non-starter, then all these techniques are a moot point. Better to shift focus to something else in that case.

Comment from August Lilleaas
Date: May 29, 2009, 7:42 pm

I signed up. Got a confirmation e-mail. It contained my password in plain text. Yes, that is right, folks. My password, in plain text. That really sucks =/

With that said, though, this is a great post!

Comment from August Lilleaas
Date: May 29, 2009, 7:51 pm

I’m sorry, that was a lame comment. I probably should have e-mailed you about it instead of being a besserwisser in public.

Comment from David Smit
Date: May 29, 2009, 7:54 pm

What payment processor are you using to charge for your service?

Comment from Thomas Kjeldahl Nilsson
Date: May 29, 2009, 7:56 pm

@August

No problem. And yeah the password handling IS lame; most def on my “TODO” list. :)
Takk for feedback, forresten! :)

Comment from Thomas Kjeldahl Nilsson
Date: May 29, 2009, 7:57 pm

@David

I haven’t decided on a payment processor yet. Currently looking at EC Suite after hearing good things about it on the Business of Software forum and other places. Will probably research and make a decision the coming week.

Comment from Anonymous
Date: May 29, 2009, 8:11 pm

Have you seen the iphone mindmapping app released last year ?

Comment from Thomas Kjeldahl Nilsson
Date: May 29, 2009, 8:14 pm

I decided to fix the cleartext password issue right now, server is updated. “Just do it effin now” is a good way to go sometimes.

Thanks for the kick in the butt, folks! :)

Comment from Thomas Kjeldahl Nilsson
Date: May 29, 2009, 8:16 pm

@anon

No hadn’t seen that iphone app before, but it looks fairly cool!

Comment from Larry Rubin
Date: May 29, 2009, 9:44 pm

Great article Thomas. Thank you for the inspiration!

Comment from Alex Radzie
Date: May 29, 2009, 10:26 pm

I would sign up to try your application if it only would support openid.

Comment from Ben
Date: May 29, 2009, 11:20 pm

Congratulations on getting it out of the door! I’m doing the same thing and had stumbled on the same set of ‘rules’ to keep me going.
I found that it really helps to make commitments to people (your friends, partner, etc.) about when it’ll be done. I found it helps to keep a bit of pressure on, in a good way!

@Paul In someways it doesn’t matter if it has already been done before. Your take on the problem will be different and a side project is all about the journey not the destination.

Comment from DTrejo
Date: May 30, 2009, 4:31 am

It seems like it would have been simpler to leave off the registration system and just make the demo first?

What happened to simplicity!?

Comment from Thomas Kjeldahl Nilsson
Date: May 30, 2009, 6:38 am

@DTrejo

Both tasks had to be done at some point, so it’s more a question of project scheduling than simplicity. But to answer your question: Since this is an AJAX-based SaaS application, the server infrastructure had to be built from day one. Adding user registration was a fairly small and easy part of that. The interactive tutorial/demo, on the other hand, depends on having most of the core mindmap editor featureset built – so that ends up very late in the project schedule.

I do concede that I should’ve delayed this high-traffic blog post for another few days until the demo is up, but hey – sometimes I’m bone-headed. :)

Comment from Thomas Kjeldahl Nilsson
Date: May 30, 2009, 6:43 am

@ Alex

OpenID integration is in the feature backlog – thanks for reminding me though!

Pingback from Mindstab.net » Blog Archive » links for 2009-05-30
Date: May 30, 2009, 9:03 am

[...] The Messy Notebook » How To Build Something Real (In Your Spare Time) Good notes on how to keep your part time projects from falling by the wayside in incompletion (tags: productivity programming) [...]

Comment from Anonymous
Date: May 30, 2009, 12:38 pm

Demo account created:
demo / password

Comment from Thomas Kjeldahl Nilsson
Date: May 30, 2009, 1:11 pm

@Anonymous: activation mails should no longer send out cleartext passwords, I just re-checked by creating a new account. But thanks for the heads-up.

Pingback from link run « console-dev.de
Date: June 1, 2009, 11:18 am

[...] a new pet project is easy. But finishing it? That’s a different story. In How To Build Something Real (In Your Spare Time) Thomas gives a few hints how you can have more success in this [...]

Comment from obxerve
Date: June 1, 2009, 9:40 pm

I like this article.

A comment regarding the comment above on getting a partner. I think a partner is useful not just in terms of sharing workload, but also for cheering and/or accountability to hold you and I to our plan. I had a well defined plan similar to your post above, in spirit, but lately it has been more and more of a chore to stay at it. A cheering partner or encourager would definitely help right now as I try to stay motivated.

Keep on!

Comment from Thomas Kjeldahl Nilsson
Date: June 1, 2009, 9:48 pm

@obxerve:

My solution was to network with some other likeminded people online – I give and get mutual feedback / accountability / encouragement in this manner. An actual partner to talk to IRL is the most ideal solution, though, that’s for sure. Speaking of which: keep pluggin’ away on your own project! :)

Pingback from How To Build Something Real In Your Spare Time « Dave’s Blog
Date: June 5, 2009, 12:10 pm

[...] How To Build Something Real In Your Spare Time By archdave The Messy Notebook » How To Build Something Real In Your Spare Time. [...]

Pingback from techZING! » techZING! 2 – Stack Overflow Hurt My Feelings. Again.
Date: June 6, 2009, 11:21 pm

[...] to switch between coding and doing other operational and business tasks. Jason brings up a blog post by Thomas Kjeldahl on messynotebook.com, where he talks about doing a little bit of work every day [...]

Pingback from Jeff Barr’s Blog » Links for Monday, June 8, 2009
Date: June 8, 2009, 5:32 pm

[...] The Messy Notebook: How To Build Something Real (In Your Spare Time) – “You need steady momentum to keep the project rolling. It’s much harder to sit down and work if you only do so every other week – you then need to use more time and energy to “spin back up” every time. You also run a higher risk of falling off the wagon completely if you miss one or two of those long sessions. Instead you want to ingrain a steady, regular habit which feels as natural as brushing your teeth every evening.“ [...]

Comment from JamesD
Date: June 11, 2009, 1:54 pm

Thanks for the useful info. It’s so interesting

Pingback from Josh Mather » Bookmarks for May 22nd through June 12th
Date: June 12, 2009, 4:06 pm

[...] The Messy Notebook » How To Build Something Real (In Your Spare Time) – Good thoughts on how to get things done… [...]

Pingback from Launch Any » Blog Archive » Turning Your (Part Time) Idea Into Reality
Date: June 17, 2009, 11:24 pm

[...] Thomas at The Messy Notebook posted an article on building something real in your spare time. This is a great list for those trying to launch any kind of idea, either full-time or on weekends, after hours, or in parallel to another project. [...]

Pingback from Entertaining Code » Sunday Link Run
Date: July 24, 2009, 4:44 pm

[...] Messy Notebook has some advice on how to build something real in your spare time — it’s something I recommend to every [...]

Comment from Allan Ebdrup
Date: September 12, 2009, 8:07 pm

I too have had my share of unfinished projects, but for years now I’ve been working on the samen one http://obsurvey.com, It’s a survey solution (another one?!), but but but. Mine is specially targeted at bloggers, everyone else can use it too.
I’ve really learned a lot about AJAX, JavaScript, UI-design etc. from the project. You learn A LOT if you let your friends or anyone you can convince, try your project while you observe them, without helping them. Every single time I’ve been able to improve some pretty obvious things that I missed, and most of them didn’t take very long to fix.

Comment from Sam
Date: October 9, 2009, 1:43 pm

Yup, been there and done that with http://www.dailyunixtip.com. Let’s give this a go and finally get the thing out there; I’ve signed up for a ThoughtMuse account and I’ll keep you guys posted on my progress. “A little external pressure” ;)

Write a comment