Post 3: Collaboration (18th July 2024)
Ursa is the most ambitious project I have undertaken and seriously expected to have a good chance to finish. Although I dreamt for long years, like many programmers and computer scientists, of inventing a world-beating operating system or language, I never consciously started such a project in earnest; the closest I got were various sketches of initial ideas.
Most successful software projects, especially this century, require collaboration. Not just building on others’ code—that is pretty much a given at this point!—but actually working with others. One of my problems was that I hadn’t found any collaborators.
Another problem was that I had other, smaller, yet unfinished projects. If I couldn’t finish a smaller project, what was the good of starting a larger one?
In the end, I managed to deal with these apparent obstacles: I would simply have to try to find collaborators as I went, and as for the unfinished projects; well, I simply wasn’t enjoying them enough—and deep down, I had already admitted to myself that they were dead ends.
In other spheres, I’ve found that I value collaborators not just because they share the workload and help bring balance to a project, whether of perspective, or of energy, allowing me to flag for a time without feeling that the project is running out of steam, I came to realise that there’s a reason that is perhaps even more important for me: collaborators provide accountability. The first time I can remember realising this was when pair programming: it’s much harder to goof off and read cartoons for half an hour if you’re coding with someone else. You either push on, or admit that you need a nap. Overall, I found I was much more productive in these circumstances. The effect works for me over longer periods, too: I want to have concrete progress to bring to a scheduled meeting.
However, there is a downside to collaboration on the sort of project that Ursa exemplifies. The key to actually getting started was to make a lot of decisions about the sort of system that Ursa was going to be. This had the practical effect of first, cutting the scope from “the next greatest thing” to a project that, as I said at the top, I can realistically hope to finish; and secondly, of giving me a number of fairly concrete, even boring, things to do almost straight away: for example, deciding on a basically C-like syntax meant that it was easy to sketch the core of the grammar, and give me the straightforward task of implementing a parser. (That was in fact precisely what I did first.)
There’s no fundamental reason why I could not have done all that with a co-worker, but there was an obvious problem in my case: I had made all the decisions by myself. Therefore, a collaborator would just be having to follow my instructions (or re-address all the cans of worms I had thrown aside). That’s no longer really collaboration, it’s subordination!
So, having come up with a list of desiderata by myself, it seemed to fall to me to start implementing it by myself. Once the project gets bigger, and once more offers scope for some autonomy, or is something that others would like to help me with so they can use it themselves, perhaps I can entice others to come work on it with me.
But that was not quite the end of the problem. In fact, I started Ursa in “soft stealth” mode; since one of my choices was to make the project more fun by concentrating on its public presence early on, I had to make use of the name and get it out there straight away, to build up public history that I could point to later, and try to encourage interest and even users. But I didn’t tell any of my friends about it. In particular, I didn’t tell my close friend and frequent collaborator, Alistair. Why not? Alistair is a stalwart brain-storming partner, listener to my trials and tribulations, and all-round stand-up guy, and we’ve loosely collaborated on programming projects over many years, starting in high school. Because, smart and careful person that he is, the first thing he would do is give the tyres of my ideas a thorough kicking. And that’s exactly what I didn’t want: I was desperate to actually get some design implemented and some code written.
It took Alistair three months to notice Ursa popping up in his GitHub news feed, and since then he’s made significant contributions to problems I’ve brought. It definitely helped that the project already had some momentum by this point!
So, while my ideal would still be to have a co-conspirator from the beginning, I do not regret having tactically avoided collaboration on this project in its critical initial phase.
That said, I could really use more help! Anyone reading this who thinks it might be fun to get involved with Ursa, please get in touch.