I’ve been developing software for the past 18 years, and currently manage a team of 15 developers for a large telco in the UK, developing mission critical systems. Here is what I feel are the necessary ingredients (both people and resources) for a high performance software development team.
- A chat system to enable people to communicate easily. Email is not suitable for a quick conversation.
- Project/Ticket tracker. To keep track of features to complete, bugs to fix.
- Documentation system (integrated with the Ticket tracker and Version Control system). Very important! Most developers hate writing documentation, but love having access to great documents. The solution is fairly simple: pay someone to write and keep documents up to date. I often find that a lot of delays in projects happen when people cannot find information easily, so a well maintained document set is invaluable. Ideally this should be a Wiki based system so you have change history, the ability to search easily, linking to other documents, tickets etc.
- Version Control system (Git or Subversion). For large projects, choose Git.
- Servers. Either hosted in the office or in a cloud. Need a few of these dedicated for building software and testing.
- Laptop. A beefy laptop which has enough oomph to allow a developer to work even if not connected any network.
- Large monitors. 2 per person, 27″ at least.
- Technical writer(s). Someone who has enough smarts to speak to technical and non-technical people in the business, and produce documentation to meet the needs of everyone. One of the most important roles within the team in my opinion.
- Tester(s). Ideally a person with some software development skills. The tester needs to understand the domain they are operating in (Obvious, I know, but isn’t always true in practice), be methodical, have the ability to research and use open source tools. The amount of software development skills required varies by the product he/she is testing. Relying on developers to do all the testing is a bad idea.
- Infrastructure engineer(s). Another very important role in the team. Someone who can build servers, development machines, set up networking, maintain and administer the tools mentioned above. If such a role doesn’t exist, a lot of developer time will be wasted fixing niggling issues.
- Designer(s). I don’t mean user interface designers here, though they do fall into this category. This is a person who understands the business, the product being developed, the capabilities of the developers and the technology being used. Designers are expected to be having the long conversations with the rest of the business and act as a bridge to the development team, who should be left mostly uninterrupted while they go about their job of writing beautiful code. Ideally, these people should have some programming experience.
- Support engineer(s). Engineers who can troubleshoot problems in existing versions of your products and monitor/maintain existing live installations. Very good knowledge of scripting required. These engineers should be working closely with the developers to improve the quality of the product.
- Release engineer(s). Someone who co-ordinates the packaging and delivery of new software into production. This role could be performed by the support engineers.
- Delivery manager. This person should be negotiating priorities with the rest of the business and provide a queue of work to the development team.
- Developer(s). Of course. Businesses usually tend to treat a development team as just a bunch of developers. Ask for some work to be done, with not a lot of support provided. NO! Software developers are a specialist resource who need a lot of support from the rest of the business. Think of them as an expensive hi-tech machine. The machine isn’t just going to start working magic for you. You need to put it in the right environment, control access to it, maintain it so that it doesn’t fall apart, and use it within its limits!
- Last but not the least, a benevolent dictator (such as myself :-)) Someone who understands all of the above and orchestrates the whole operation. Software development experience, a must.
You know, there isn’t anything particularly radical or new in the above list, but it is amazing how many setups get this wrong. And then they moan about delays in projects, cost overruns etc. Whenever I’ve looked at an underperforming development team, it has been fairly obvious what the causes of failure were, but too often, the culture within an organisation makes it too hard (or impossible) to make the necessary changes to succeed.