Infrastructure for unselfish software development - a collection of top tips
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:
- 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.
- Strengthen community engagement and deliver reliable software with the right infrastructure covers research software that is beginning to be used by thewider research community.
- 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 |
Posted by MikeJackson on Tuesday 17 July 2012.

Impressive collection….thanks
Impressive collection….thanks for compilation
keep posting
Setting up infrastructure -
Setting up infrastructure - continuous integration, documentation generation and automated test, for example, is something that is very similar from project to project, and from industry to industry. I have had to do it more times than I care to remember, but have never been able to reuse what I have done before due to intellectual property restrictions. Might the institute consider developing a series of skeleton repositories for various languages & types of project, with repository structure and development infrastructure already set up and configured, relieving the burden from academics, yet allowing them to take advantage of best practice? if these were open sourced under a permissive BSD-style license, they would find some considerable utility in commercial development also: I for one could make use of them (in my next role). Furthermore, if packaged as VM images suitable for use, for example, within EC2, these "startup-in-a-box" tools would provide significant incentive for, and provide benefit to, any academics seeking to spin off commercial startup companies from their research.
Post new comment