Thursday, November 15, 2007

A basic software production management setup - Part I

In this post I'm attempting to put together a set of suggestions for processes and tools to accomplish a basic software production management setup. This post will be the most useful for software startups. The emphasis will be to keep things simple, with less overhead and with less setup/maintenance cost.

Also, this post is more of an outline. I'll explore each of the sub-sections in more detail in future posts.

Software Configuration Management (SCM)
Start by securing your source code. Use a Software Configuration Management (SCM) system. This might sound very preliminary, but I have seen companies where engineers store their source code just in their respective local disks. Installing and configuring a SCM tool is straight forward. But, do spend some time and think about the following before implementing your SCM,

  • Discuss and decide on a directory structure to store your source code. Changing of dir structure later in the game is costly
  • Do setup a scheduled backup of your code repository. A 10 liner script will get the job done.
  • Have a strategy to manage your 3rdParty libraries. Simple solution is to store all the 3rdParty libs in a separate folder and use labels or tags to use them in your various products.
  • Manage the 3rdParty licenses as well. Before you realise, you will have various different 3rdParty components that have different licenses and legal obligations. A simple spreadsheet will do the trick.


There are quite a few open source and free SCMs available in the market. CVS and Subversion are two of my favorites. And my personal recommendation is Subversion for two main reasons,

  • Subversion's branching and merging is superior (especially with merge tracking on the cards for the upcoming release)
  • Subversion gives a unique revision number for every check-in, which can be used to track changes to the code repository. From a defect tracking perspective, the revision number can be used to track defect fixes. The revision number can be used as a bridge between your defect tracking system and your SCM

If you are a medium sized organisation (Above 100 users) and have multiple product releases out in the market in many (hundreds) customer locations, then you may think about a licensed SCM. In that category Perforce is a winner.

Build Management

Compared to other areas of s/w production management, there are less number of ready to use tools available for build management. So you might need to do some scripting to setup your build management system, for which there is a good set of scripting languages - make, (n)ANT, Maven etc. Things to note:

  • Setup a separate machine and always build from that machine. Be able to reproduce this machine's configuration
  • Stage the built bits in a central read only location for the internal consumers to access
  • Have a mechanism to trace back to the source code. Given a build and a file name, one should be able to find the corresponding version of that file in your code repository.
  • Label the source once a build is complete. That will help you to know exactly what has gone into a build
  • Consider setting up a continuous integration system. Cruise Control is a popular choice.

There are a few build tools available in the market now-a-days. One of them is 'Visual Build Pro'. This tool serves the purpose if your build requirement is simple and straight forward.

To be continued ...

Defect tracking and change management in the next post.


Corey said...

Just wanted to add that just about all the issue trackers offer Subversion integration, including my own (I'm the author) free, open source BugTracker.NET.

Arul Jegadish said...

Thanks Corey. Your link is informative.