Run it like an open source project

Wednesday, March 26th, 2008

One of the items that we’re constantly looking at perfecting at Synthesis is our project process — since we work on such a wide variety of projects, its sometimes hard to converge on a single process that all of us can know, embody, learn, and execute on; its really a question of, “write once, run anywhere”. The one thing that I’ve gravitated towards is (and thanks to Glyph for putting it so succinctly): run it like an open source project.

Our client interaction lifecycle has people coming in and out of it at every stage — we have practitioners interacting heavily with clients during “project inception”, engineers are going rampant during “development and build out”, and our clients have internal teams that we’re working with during “the transition”. People need to get up to speed really quickly because their expertise may be needed for a brief moment, or because we’re handing off ownership of a project. And knowledge transfer is just a plain, hard, problem.

Just like any good open source project, we’ve structured all our projects to have top level and sub-level README files — with this, I, a developer, can go from SVN checkout to compiling code in a short amount of time. That, armed with the URL of a well-maintained and up to date Trac instance means that I, again as a developer, know “what needs to be done”. Jabber chat rooms (we were never IRC fans) and e-mail lists for each project means that a “community” can be found relatively quickly. And code reviews mean that the changes committed to the tree are correct, with the great side effect of forcing us to get other junior developers up to speed.

Having projects run like this makes our life that much easier. We just pretend that we’re running a good open source project hosted on Sourceforge and then we’re forced to contend with ebbs and flows. Our process, we like to think, supports developers popping in and out of a projects, and allows us to answer to those who just demand a snapshot view of “where things stand”. And, when we don’t have to worry about “how” things are getting done, then they can really just get done.