Infrastructure for unselfish software development - a collection of top tips

Posted by m.jackson on 17 July 2012 - 9:05am

By Mike Jackson.

In recent blog posts, I've outlined our top tips for the infrastructure required for developing research software. In this blog post, I'll summarise these posts to show how you can evolve your infrastructure as your software grows and develops.

The blog posts on infrastructure can be mapped to three phases of research software evolution:

  1. What infrastructure do you need to start developing research software? covers research software in its early stages (maybe just a prototype) that will primarily be used by the researchers who wrote it.
  2. Strengthen community engagement and deliver reliable software with the right infrastructure covers research software that is beginning to be used by thewider research community.
  3. Infrastructure for closer collaboration - covers research software that is now developed by a number of projects or institutions within a research community, which may, or may not, include the original researchers who developed it.

The infrastructures recommended in the posts above can also be divided into different types according to the activity they support. I've put all of this information into the handy table below, which summarises the infrastructures needed to support the evolution of research software and the activities these infrastructures support.

   Starting out

Supporting a community of users

Supporting a community of users and developers

Technical aspects of software development Revision control is the single most important tool you'll use! Use automated build and test to save time, reduce bugs and give you confidence your software is correct

Keep your software releasable with a continuous integration server

Keep your code consistent with a style checker
 

Promoting yourself, your project and your software

Use your website to tell the world about you

Register a domain name

   
Talking with and supporting your users Encourage people to get in touch by providing an email address

Organise your communications with e-mail lists

Share your thoughts and experiences with a blog

Strengthen your links with your community using social networking

 
Talking with your developers Use an email list to communicate Hang out using instant messaging
 
Use a shared calendar to help track your commitments
 
Managing your project Manage to-dos with an issue tracker Track your impact with reference management software
 
Track usage of your software to understand your impact