‹ back home

Start small, then grow

2015-04-06 #development

All of us developers who love what we do have started lots of side-projects.

And almost all of us have equally as many side-projects abandoned on some workspace or projects directory, rotting, with no hope of every achieving completion. New projects are dumped there periodically, into a pit of abandonment and decay.

I wanted to find my way out of this endless, and pointless loop. I needed to get things done, and make the best of my time. Sure: it’s fun to start a new project, but it’s even cooler to get it done and have something completed to share with the world.

I decided I’d do something that a so many people advise (and what lots of companies do successfully, at some scale): make a very minimal program, with the basic functionality, and grow from there.
We software engineers understand things perfectly well: maybe too well, so we analyse and design very single aspect of a software program and design a huge monster that would take ages to implement.

I’d been needing a TODO manager for some time (talk about getting things done!), so I though I’d do something that could write TODO events as icalendar files, and also list them.

My old approach (and, I believe, the usual approach for developers) would have been to list all the functionality, prepare a very complete model with all the necessary features, contemplate dozens of edge use-cases, etc (this includes supporting every single icalendar property, creation, deletion, copying, etc).

I ignored my instinct, and started small: I wrote a small python script that listed icalendar tasks from a directory, and then another script with a very simple urwid interface to write new tasks.

There, it worked. For the first time I had something I could use (outside of work, that is)! It’s hard to describe how pleasing this is to complete something, even if a minor milestone.

I used this inspiration to stay on track for a couple more hours to polish these scripts, add a simple cli interface to them, a small settings file, some documentation, and voilà: todoman was born.

Having something that works increases motivation to continue working on it. It’s a tool that I now use on a daily basis (and, apparently, a few other people too). However, I feel that the greater achievement, was actually getting something completely done. Reaching that 1.0 milestone (actually, todoman is already at 1.2.1), and understanding how to develop side-projects in future, without them ending in a pile of incomplete projects.

Remember: start with a minimal working version, and grow from there. It doesn’t matter how basic it is, small and functional is better than huge and incomplete.

Hopefully, this will be far from the last, and hopefully, this may help you stop having incomplete side-projects, or hobby-projects dying all the time.

— § —