Crucial infrastructure for small projects
My latest project is a web application, which is currently in closed beta. I will blog about that more in the coming weeks, but today I’d like to discuss my project’s infrastructure. Infrastructure is one of those topics that you usually just learn about from the companies that you work with. I hope that the information here will be useful to individual developers and small startups. It is difficult to know what has to be done when you’ve never been part of a real-world development team before.
My project’s team is made up of three people. For a project of that size, there are three resources that I consider to be absolutely crucial:
- A project wiki – For storing project information like budgets, marketing plans, etc. The wiki should replace most emails between team members. The point of a wiki is to establish one place to look for the latest information, so that you don’t need to search through old email threads to find something.
- A project management site – For creating roadmaps, planning new features, reporting bugs, and assigning work to each team member. If you’re going to ignore everything else I write in this post then just setup a project management site. You wont be able to go back and live without it.
- A code repository (aka version control system) – For keeping track of changes to your codebase. Also useful for storing all of your source code in one central and backed-up location. (Yes, that explanation is slightly simplified, but using a version control system should be a given.)
Depending on the nature of your project, you may also need a build-bot or continuous integration server. I don’t have any experience in that area. However, I hear good things about Jenkins (formerly Hudson),
Chef, and Integrity. (Edit: As Tollef Fog Heen pointed out, Chef is a configuration management tool and not a CI server.)
Open source projects have it easy
For all of my open source projects, I use Launchpad or GitHub, which do a decent job of fulfilling my requirements. Launchpad doesn’t include a wiki and GitHub has an extremely poor project management site, but I’ve always been able to supplement the missing functionality elsewhere. Furthermore, GitHub and Launchpad are hosted services, which is a huge advantage for lone developers and small projects. If you go with a hosted service then you don’t need to worry about any of the headaches that come with running your own server.
Choosing a version-control system
You should probably decide what VCS (version control system) you plan on using before picking project management software. (No, those are not orthogonal issues. The two can and should integrate with one another.) I recently fell in love with git, but bzr and hg (mercurial) are also great options.
Choosing project management software for a proprietary project
For my aforementioned project, Launchpad wasn’t an option because it only hosts open source projects. Edit: It turns out Launchpad has a commercial plan, for $250/yr. See the details on hosting a closed source project with Launchpad. (Thanks to Marius Gedminas for the correction.)
I considered using GitHub’s “small” plan ($12/month for up to 5 people) and buying a complementary project management plan at another site. However, I soon ruled that out because of the cost: FogBugz costs $25/user/month. Lighthouse costs $2a5/month. Even BaseCamp, which was a poor match to begin with, costs $50/month for their cheapest plan.
(Aside: I’ve never used BaseCamp, but I’m under the impression that it is too simple for software projects. In my case, I need to track some developer-oriented information about each bug, and BaseCamp doesn’t look like it supports that.)
Huddle and Assembla are two other options that I didn’t review. I know Jira is also popular, but if you’re looking at Jira then you probably don’t need to read my comparison of project management software Jira’s hosted plan is $150/month and an unlimited software license costs $12,000.
After ruling out all of the SaaS project management sites, I decided to just host everything myself, including the git repository. I had already bought a WebFaction plan for the webapp itself and the server had spare resources. (Yes, that is an affiliate link. But WebFaction is so good that I would recommend them even if I was hosted elsewhere.) By now, I have had to upgrade the server twice in order to meet memory requirements, but I still think I made the right decision. In the future, I will likely move everything but the app onto another server.
Lets get back to project management software. I looked at Bugzilla and Trac, but quickly ruled them out in favor of Redmine. Redmine is a minor memory hog – it has an overhead of ~35mb RAM when not in use, which increases to over ~80mb RAM with one active connection. I’m not happy about the memory requirements, but I am happy with my decision to use Redmine. Redmine gets the job done. It supports everything that a software project needs and it’s UI is simple enough that non-developers can use it too.
Installing Redmine and git
WebFaction has tutorials on setting up Redmine and git. Their documentation is pretty good – and Redmine and git are easy installs anyways. You should be aware that there used to be a security vulnerability in WebFaction’s git installer. The problem has been fixed, but all repositories created before January 13 need to fix the issue themselves.
Choosing a wiki
Redmine includes a wiki, but it doesn’t have a WYSIWYG editor. There are plugins to add TinyMCE or CKEditor, but neither of them smelled good or looked stable. Several a-technical users needed access to my project’s wiki, so Textile formatting was a no-go. We needed a WYSIWYG editor and Google Sites offered one with their free hosted solution. Google Sites doesn’t support per-page permissions (i.e. deciding which users can access which pages) but it is otherwise feature-complete.
We’re using git, Redmine, and Google Sites for a 3-man project. So far we are very happy with the combination.
In later posts I will cover:
- Integrating git and Redmine
- Using Redmine for code-reviews
- Deploying Django servers with Fabric
- Viewing Redmine tasks in Eclipse Mylyn
Thank you for reading. Good luck on your next project!