Project Management with Trac

All but the most trivial of software projects need some kind of management software behind them to help organize complicated development processes. Trac is a free web-based offering that does the job efficiently and with a minimum of fuss. In this article I look at certain aspects of Trac, including the features that I use most on a daily basis.

Trac is programmed in Python and should be able to run on a server with the appropriate Python modules. Trac comes with its own mini-server that you can use if you're not willing to configure the main web server to run a Trac installation. I chose this last option just because it seemed easier at the time, but it means I must remember to launch the Trac server before using Trac (though I could add it to the system start-up scripts) and also uses a hard to remember URL. In the long run I think it would be preferable to set up Trac to run on a full-blown web server, such as Apache, so that it runs seamlessly alongside any other local websites you have.

Trac can be used anonymously, but for a closed project you will probably want to create a main admin user plus individual developer accounts and limit access to account holders only. The main admin user can be informed via email of all events deemed important.

Trac includes a Wiki that allows its users to add and edit articles relating to a project. This is a good place to write out a specification for use by the developers and to add other documents such as tutorials and FAQs. New pages are added by creating a link to them which, when followed, gives you the option to actually create the page. WikiFormatting, a bare bones markup language, is used to format text and add hyperlinks.

Trac has a ticketing system that can be used to post tasks for the developers to take on. When a task is created it can be assigned to a developer who will then be notified by email. The developer can then login and accept the task, and when finished he can close the ticket with the appropriate status (e.g. "fixed"). Tasks can be assigned to milestones, which are really arbitrary labels for important stages of a project, such as "1.0 release". Using the "View Tickets" section, a project supervisor can see which developers are assigned to which tasks at any time.

Perhaps Trac's most impressive feature is its integration with version control systems such as Subversion. The "Browse Source" section reflects the versioned source and allows you to view a project's trunk, tags and branches right from the web browser, with code files syntax highlighted for extra clarity. You can view any past version of a file and see all the changes made to a project in an intuitive fashion that uses colour coding to help point out areas that have been added, removed or modified. Any revision of a file can be downloaded too.

There is also a good deal of integration between the source code and other parts of Trac. When committing locally modified code, you can add the associated ticket number to the commit message and Trac will display it alongside the file name in the "Browse Source" section, linking it to the ticket itself. Back in the ticket, you can link to the associated commit by inserting the revision number inside square brackets in the comments box. If all developers follow these measures, a project manager can keep a close eye on exactly what code each ticket produces.

This is not an exhaustive list of Trac's features. Trac has other sections such as "Timeline", "Roadmap" and "Build Status" that I have not written about, but which are important features nonetheless. More information on those can be obtained at the project website.