31 Dec 2015

Resolutions 2016

Well, it's the last day of 2015 and that means round-ups, predictions, and resolutions. I don't normally participate, but this year I have two resolutions I'd like to share.

In 2016, I resolve to:

Finish more stuff. This sounds like "focus and work harder", but that's not a meaningful plan. When I release software, I intend to define what 'feature complete' means. The code doesn't have to be complete, but the idea should be fully formed. If I don't know what complete means, then I'm still in exploration mode and not ready to release. While exploring ideas I'll still share code, but I won't release it (public GitHub repositories are a red flag, Gists and blog posts are more appropriate).

Where I've lacked this discipline in the past, software has quickly become bloated and complex. If I feel a project can't be defined up-front then I should split it into smaller, understandable parts, and the rest should be a discussion not a release. The major risk I foresee, particularly in the JavaScript community, is that a finished project is often mistaken for a dead project. This leads to my second resolution…

Build communities, but not around individual software artefacts. Communities are essential to useful software development. Unfortunately, when communities congregate around an individual code base, the project can never be completed or retired. Finishing a project would kill it's community too. These zombie projects keep growing and growing. With social status tied to commits, the pressure to add features is significant. Much better then to build a community around shared interests and congregate around collections of software instead.

The inspiration for these resolutions came directly from two blog posts by Martin Sústrik (creator ZeroMQ, nanomsg, libmill and ribosome): "Finish your stuff" and "Software Totemism". His blog contains plenty of other food for thought - I suggest you give it a read.

Happy new year, I'm looking forward to 2016 already :)