9 "Must-Have" Tools for Software Teams

The items below are useful systems based on my experience working with a bunch of different software teams at a handful of companies over the past decade-plus. I haven't bothered to list things like compilers, interpreters, libraries, etc. If you don't have those, you aren't making software...

  1. Source control. This almost belongs in the "if you don't have it, you aren't making software" category. There are so many free and simple to use tools that it is ridiculous to not use source control. Pick one of: subversion, git, or any of the dozens of other free tools and use it. I guess I'd say "if you don't have it, you are making a mess".
  2. Bug/issue tracker. Trac is a decent tool for keeping tabs on development tasks and bugs. Bugzilla is ok too. If you have a budget, there is an apparently infinite set of commercial systems available of varying quality. Almost anything is better than a list of scribbles on your whiteboard.
  3. Backup server. You can do software without it, but the odds are against you lasting long.
  4. Build system. Automated nightly/continuous builds are awesome. Whether you DIY, install something free like hudson, or purchase a commercial system, this is a key piece of making sure that the software maintains at least a minimum level of quality (i.e. it is always buildable). After having worked on a couple of teams that didn't have such a system, and the build was always broken, I would never work without it again.
  5. IM / Jabber. Especially with a conference server where the rooms are archived and available via the web. Searchable is nice, but making them available where they can be grepped isn't bad either. I didn't become convinced of the value here until last summer.It sounds like an extra distraction and sometimes it can be, but you can turn it off when you're heads-down coding. And it has the potential to reduce the number of interruptions from people walking into your office with questions that could have been answered in an IM. It's lighter weight than email and rooms are broadcast by nature so you don't have to spam a huge list of people to find the answer you're looking for.
  6. Email lists. Must have web-browsable archives; the list without this has much less value. Search would be a nice bonus, though I haven't seen it done well. This lets teams communicate a bit more formally than IM and provides a record of certain discussions and decisions.
  7. FTP server. Bonus points for a TFTP server. Maybe it's because of the nature of embedded software, but every team I've been on has always had to fling around large files and images. Email is horribly inefficient for this. Also, most of the products I've worked on needed an FTP (or TFTP) server to boot from. You're likely to install something on your development machine, which is fine, but it's convenient to have a central team/company internal server so you can just tell someone that a file is in your public directory on "the ftp server". Microsoft shops and folks that don't need to boot via FTP can probably get away with samba shares.
  8. Doc server. Wiki is probably the best way to go if your team doesn't have to produce overly-formal documentation. Wikis and formal document control systems that I've used have had horrible search, which sucks but I haven't found a great solution. In the past I've done this with a combination of a formal doc tool plus a blog for the informal "howto" kind of notes that are always needed.
  9. Code review. I can't say I've worked anywhere that had a dedicated code review tool. However, when all of the development machines are on NFS so that everyone has a view of your workspace, IM fits the bill reasonably well: post a review request to the chat room with the path to your changes and get an ad hoc on the spot code review. With some discipline and a supportive culture this works very smoothly. (This arrangement could probably be done with an internal pastebin, which I haven't listed here as must-have since I haven't really seen it used.)

What would you add to this list? Any other tools or systems that, if missing, would make you think twice about taking a job?

Posted on 2010-01-18 by brian in tools .

Comments

Great list! I would add to it the need to have some form of comprehensive and maintained automated testing suite, consisting of unit and functional/UI tests.

Having a suite of well-understood and well-maintained tests will give a development team confidence to make changes to the codebase, knowing that the impact of those changes will be known within minutes or hours.

Integrating these tests into a continuous integration system makes them even more powerful. In practice, you can run a fast set of 'smoke tests' on every commit to provide fast feedback to a developer about the impact of recent changes, then run a more comprehensive set of tests on a nightly basis to verify code changes in the past 24 hours.

Jesse Gibbs
2010-01-19 13:46:02
Comments on this post are closed. If you have something to share, please send me email.