The Side-Project Considered as a Necessity

March 4th, 2011 Permalink

It seems strange to me that there exist developers who do not have side-projects: exploratory exercises in coding, tinkering, and scratching personal itches that run on the weekends, or here and there in the evenings as a replacement for mindlessly consuming mass-market entertainment. Do these people not enjoy their chosen profession?

Even more strange are companies that forbid their developers from working on other software projects - open source contributions, personal sites, and so forth. Had I not suffered the misfortune of briefly talking to hiring managers for a few such companies, I would not believe that otherwise apparently sane people would try to run a software development endeavor that way. Why would they put in place the one restriction that will ensure they hire only sheep: bored developer serfs with no ambition, no real interest in their profession, and no drive to improve themselves? Working in such a place would be a special form of hell for anyone with any talent or vision - so, needless to say, no such people would be found there.

What sort of developer doesn't develop on their own time, for the fun of it? What sort of company actively seeks to exclude self-interested developers? It is a strange world we live in.

One of the few downsides of life as a freelance developer is that you are very, very rarely hired simply because you are smart and able to learn. Rather, you are hired for what you already know how to accomplish - and so without your own educational side projects the short-term incentives will drive you to become ever more narrowly typecast. Being the go-to developer for a particular type of project in even a modestly sized community has great advantages - but the world of software development is ever in flux. Sooner or later any particular specialty will fall into disfavor and disuse. Just ask anyone who used to make a living on a knowledge of ColdFusion, for example.

Similarly, in the world of full time employment you are also generally not working on what you would be working on if you were steering. You might be in the general area of software development that you you enjoy - as you picked your job well - but the deal is that you are paid to follow someone else's direction. It is the rare and lucky fellow who can engineer his way into a full time job wherein he decides what he does with his time. Generally you have to start your own company to obtain that freedom - and even then the customer is ultimately king: if the customers decide they want something different, then something different it will have to be.

So for someone like myself, a generalist in the broad area of web development and back-end software, side-projects are a necessity. They are the way in which I deliberatively steer my career by learning to get things done in new technologies that I find engaging. For example, I have yet to work in any significant way in the Python ecosystem or casual game development, but there are a tremendous number of very interesting projects taking place there. So I recently spent an entertaining weekend sketching out a plan of attack and making initial technology choices for a browser-based casual game framework that I have had in the back of my mind for a while: something to scratch the AJAX itch, as I've not had the chance to work on truly inventive client-side Javascript for a year or so now, and I rather enjoy that line of development. I looked into Comet servers and settled on a combination of Orbited and Django to start with. As a next step, I intend to wade into the fascinating morass of svg and canvas implementations. I've long thought I need to increase my grasp on the fundamentals of that side of web development, and here is a way to do that without compromising my long-standing aversion to flash.

The motto here is that if I don't get out there and learn these thing myself - and have a blast while doing so - no-one is going to fall from the heavens to teach me. Perhaps I will take this casual game idea to the next stage of development, following on from the research, but even if I ultimately choose not to, I will have learned a great deal about the technologies I evaluate - and I will still have the recorded plans and implementation sketches to return to later.

My last long-term side project, which has so far spanned the better part of a decade of periodic development initiatives in the same overall arc, ultimately led my focus as a developer from the Java ecosystem to the PHP ecosystem, with some interesting forays into Javascript, ColdFusion, and Oracle technologies along the way. The consulting work and day jobs have followed behind this changing focus, strengthening the new skills I pick up at my own behest. Similarly, the casual game framework project I mention above would be something to keep me occupied for a few years, or longer if it proved promising after the early stages. Along the way I would explore a fair few new frameworks, techniques, languages, and other aspects of technology - and all because I want to and I find it interesting. The paying work will follow.

Deliberately diving into the new and unfamiliar is the way to draw ahead and stay ahead in the world of software development. Where else will you establish the skills to keep up with the changing face of coding - and more importantly where else would you be more likely to enjoy that process of self-improvement and production?