Well, I’m trying to blog as regularly as possible. I thought that I’d draw from my personal experience as a Software Architect and Engineer to put this one together. Readers of my blog will realize that over the past couple of months, I’ve been running some coding/hacking sessions, whether it was a solo run or coding with other developers. All over the world people are doing these types of events. In my positions at Teleios ~3 years ago, I worked with the team there to pull off a couple of the ‘Teleios Code Jam’ programming competitions, so I guess I always had a desire to execute these impromptu coding sessions.
Since that time, there have been several such coding competitions. I have been involved in a number of these competitions and I know for a fact that the logistical effort required to pull off a proper ‘competition’ is non-trivial.
One of the objectives of running the micro-hacking sessions from home was also to try to better understand the delicate balance between a completely open-adhoc coding session vs. a more disciplined application development process. I’ve been fortunate to see both in full swing and each has their respective pros and cons and are obviously best suited to the context in which you’re doing the development i.e. Corporate, Start up, small project, hacking session, etc.
Here are some personal suggestions that would help an ad-hoc hacking team be a lot more productive in a spontaneous hacking session.
- Common Platform Experience – If you were fortunate to bring together a team that has enough experience on the same platform (Ruby, Groovy, Java, Linux, Apache, .NET, IIS, Windows…), it make things a whole lot easier.
- Development Environment – I’ve seen where setting up a development environment can take up almost all the time that you had allotted to development effort. One thing that I have tried and was fairly successful with, is creating development environments on Virtual Machines. That way you can pass around the VM and everyone can get started fairly quickly since most of what is needed would be on there an pre-configured. It would also ensure that each environment is similarly configured.
- Deployment Environment – You would think that for an ad-hoc session this wouldn’t really be needed, but I’ve found that in practice it shaves off a whole lot of time with integration and functional testing if you simply have a server that you can deploy to and have everyone say … use the same database and test data, rather than having to backup, install or synchronize databases, web services and even configuration file all the time… which brings me to my next point. I recommend purchasing some cheap hosting online and setting up an environment quickly. Be sure the designate the deployment role to one person and try not to deploy too often … you are hacking after all.
- Source / Version Control – Again, this is one of those things that you would think is only necessary for larger, more well-defined projects, but you quickly run into synchronization issues, even in a micro-hacking session with 3 – 5 developers. If you’re going Open Source, I recommend that you use any of the free services online, from GitHub, Google Open Source or if you’re into TFS and Visual Studio, you can use CodePlex.
- There are other softer things like how you craft your idea, and how you contain your scope into something that is practical, food, room layout, a white board … but maybe I’ll talk about that in another post.
I hope this helps to make you coders out there more productive, if even just a little bit.