For IT companies development is substantial, if not the only business. And many of them suffer because of a bad internal organization. If software development is your main business, you must nurture it and protect it until it grows strong. In this post I’ll try to summarize years of good and bad experience working with development companies. I’ll concentrate on Open Source Software solutions and how to use them to your advantage. Required ingredients to build working development infrastructure include:
Electronic Mail: E-mail is the formal communication in your organization. You need scalable and flexible e-mail system. One that support hundreds of aliases, secure communication (TLS), etc. One that has comprehensive web interface. Anti-spam and anti-virus is mandatory. Postfix (MTA) is great Mail Transfer Agent, Spamassassin (Anti-Spam) or DSPAM (Anit-Spam) can handle unwanted messages, ClamAV (Anti-Virus) can deal with harmful code and Cyrus (IMAPS) or Dovecot (IMAPS) can provide IMAP for mail applications. About webmail, I recommend Roundcube.
Source Code Management: Source Code Management (SCM) system is essentially the spine and the nervous system of your development infrastructure. Good SCM will let your developers to concentrate on real work and not revisioning. It will be flexible and non-intrusive. It has to be intuitive, easy to use. It will let you break the ‘client-server’ model. It must has some form of web interface or gui. E-mail Integration is mandatory too. Flexibility is usually underestimated here. In a complex project you may need source code reviews or constant audits. You can let every developer update local source trees from central location, but allow them only commit to a source code reviewer’s repositories. Situation is pretty much the same with branching. Your SCM must provide branching. E-mail notifications are really helpful too. It is often easier to search trough your Inbox rather than trough countless screens of revision diffs. Obvious choices here are Mercurial and Git. I also recommend Subversion to some extent.
Tracking System: Often underestimated, often forgotten, tracking system of some kind is actually helpful. In my opinion there two types of tracking systems, Bug Tracking and Ticket Systems. Doesn’t really matter which one you choose. Integration with SCM, however, does matter. The tighter integration between Tracking System, SCM and E-mail, the better. I strongly recommend Bugzilla or Bugzero for bug tacking and Trac for bug/issue/ticket tracking.
Instant Messaging: Most companies prefer e-mail communications. It is formal, it leaves tracks, it is easy to manage. But people prefer instant messaging. It is easy, it is intuitive, it is usually faster. There is psychological element to this too. When the status of your buddy in ‘Online’ it is harder for your peer to ignore your request. Mail, even E-mail, can be lost or delayed, instant messages are delivered right away, you even get notification for successful delivery or buddy presence. Your instant messaging system must provide several features: secure communication, groups, peer-to-peer communication, peer status notifications, delivery notifications. Jabber is the obvious choice. My favorite is Jabberd2. Ejabberd is also really good server. One alternative to strictly Instant Messaging is IRC. Really viable alternative. It provides everything and once you get to know it, it’s really good, it really fits in your organization. IRCD-Hybrid and InspIRCD may help you here.
Project Management: Being Team Leader or Manager with several different projects, it is hard to keep track of everything. This is what Project Management software is all about. It must provide task assignments, task relations, deadline notifications, reporting. It should help you keep track of your projects without getting in the way. Sometimes the power of Project Management is overestimated. It really doesn’t matter how sophisticated management software is if your developers are lousy. I find dotProject useful.
Documentation: Every project, every process, every workflow is surrounded by tons of documentation. Different revisions, different annotations. different authors. It’s hard to manage it all. Sometimes people change, new people come a board, others leave. To keep the development going you need good documentation and easy ways to manage it. In my opinion, wikis are great for this purpose. The wiki of choice must provide access control, document revisions, annotations, flexible formatting and integration of different file types (at least be able to attach those). Once established wiki can greatly help you. Move all project documentation from hundreds of flying around pages to the wiki. Everything goes there, from coding style and list of project members to overall project architecture. Centralization of documentation will increase productivity. I recommend MediaWiki and TikiWiki.
Given all of the above you need to follow several steps to make your development organization working flawlesly. First of all establish e-mail infrastructure. Create user accounts, using predefined patterns. Create group accounts (aliases) and populate them. Create project accounts and populate them. Then create project repositories in the SCM. Set your SCM to send e-mail notifications on commit to all or a group of developers. Add your projects to your tracking system, again, setup e-mail notifications. Designate who should recieve mails for bug tracking or from tickets. Add your projects to the project management software. Divide each project to tasks and assign those tasks with fixed deadlines. Establish dependencies between tasks. Add project information to the wiki. Instruct every member to put all documentation regarding projects in the wiki. With proper access control this will be available to all related members working on that same project. If you instant messaging system requires additional setup, do it. Send e-mail and/or instant messages to all related peers and the development may start.
From this point on, your development infrastructure requires two things: coordination and backups !
Management General, Tech