Does a good farmer neglect a crop he has planted?I like to make things. I like it a lot. It's one of my favourite things in the world. I also like to maintain things: not quite as much, but still a lot. It's fun as well as being a responsible thing to do.
Does a good teacher overlook even the most humble student?
Does a good father allow a single child to starve?
Does a good programmer refuse to maintain his code?
— The Tao of Programming, 5.4
The problem is this: the one leads inexorably to the other. If you spend thirty hours on a project, and you do it well enough that the project succeeds, you will spend three hundred hours maintaining it. Now, you only have so much time. If you spend a quarter of your time making things and the rest maintaining them, eventually you will have to stop making things in order to have enough time to maintain the things you have already made. You will have to take off the wizard's hat and spend the rest of your life wearing only the cap of maintenance. And that's a shame, because while maintaining things is fun, creating new things is more fun, and more like play; it would be a shame for it to vanish completely from your life. Note that I haven't said I'm talking about software here. I am, partly, but it applies to other endeavours as well: I'm also thinking of fiction and poetry.
This whole line of thinking started the other day because the users of four of my old projects (very reasonably) started asking for certain fixes, at the same time as I had some ideas for new projects: I always have ideas for new projects, probably more ideas than I have years left in my life. I began to realise that not only did I not have time to work on any new projects in themselves, I wouldn't have time to maintain them if I did.
This is also part of why I'm so excited both about gnome-shell and about the ideas which came up for Metacity at Gran Canaria; I've been only fixing bugs in Metacity, rather than adding new features, for over a year now. And perhaps that's necessary; I like the idea of projects asymptotically approaching perfection. But it doesn't solve the problem of decreasing creation opportunity over time.
So what are the solutions? There aren't any good ones.
- Refuse to maintain old projects. This is silly and irresponsible.
- Obsolete the project eventually. This is sometimes necessary, but it's irresponsible to do it because you don't have enough time to write fun code, rather than for technical reasons.
- Spend your whole time working on new projects that nobody will use, either because you don't distribute them or because they are of interest only to a deliberately tiny group of people. I think this was my unconscious strategy in software for years before I got into GNOME and discovered that writing things which were useful to people was actually far more fun. It's still my strategy for poetry and fiction: I write things and perhaps put them up on my blog and then never even try to do anything with them to share them with the world.
- Pay someone to look after it. This rather requires that your idea makes money and that you're willing to found a company to run it. However, you need business and leadership skills, which isn't true of me, and the thing you're making needs to be capable of making money, which isn't true of anything I've ever invented for myself.
- Get someone else to maintain what you make. The first piece of free software I wrote which was actually useful to people was Gnusto, and that was a maintenance nightmare because it used lots of rarely-touched parts of the Mozilla API which kept changing at no notice. Fortunately someone else picked it up and turned it into Parchment, making it something more wonderful than it had ever been. I suppose there must be people out there who enjoy doing maintenance more than making things, but perhaps not: finding people who are willing to take on your stuff is not really a trivial task. Of course, someone else will have to take over maintenance of your projects one day anyway, unless you happen to be immortal.
Photo © Jeff/Godfrey, cc-by-nc.