Managing Research Software Projects

This one-day class will introduce participants to the basics of software project management with a particular focus on the sorts of projects commonly found in research settings. Participants should have previously worked on programs containing thousands or tens of thousands of lines of code, and be regular users of basic tools like the Unix shell and a version control system. Building on that foundation, this course will discuss:

Comments and improvements are very welcome; you can send us either by filing issues or submitting pull requests. Please first see the design notes for background on the lesson. Please also note that:

  1. The schedule is just a placeholder: we recognize that there’s at least two days of material here, so suggestions on what to cut are as welcome as corrections or additions.
  2. Some groups will be able to skip some of the material about task automation, making software robust, using issue trackers, and so on. Instructors should survey classes beforehand (or at the start of the day) to find out how much of this they already know or are interested in.


Setup Download files required for the lesson
09:00 1. Introduction What are the key differences between research software and ‘normal’ projects?
What does ‘done’ look like for a research software project?
What are the goals of this class?
09:20 2. Organize Deliberately How should I organize my research software project?
09:30 3. Use Version Control How should I manage work using version control?
09:50 4. Host Your Project Responsibly Where should I host my version control repositories?
10:05 5. Automate Frequent Tasks How should I handle tasks I do repeatedly?
10:25 6. Make the Software Robust How can I make it easier for people to find out what my project does?
How can I make it easier for people to install my software?
How can I make it easy for other people to use my software as a component in their work?
How can I convince people that my software is trustworthy?
10:50 7. Morning Coffee Break
11:05 8. Issue Trackers How can I keep track of what needs to be done?
11:30 9. Choose a License What licensing information should I include with my work?
11:35 10. Distribute Your Software How should I package my software for release?
11:50 11. Code Review How can I tell when software is ready to be integrated?
How can I share knowledge within my team?
How can I be more productive when I’m actually writing code?
12:05 12. Lunch Break
13:05 13. Test All The Things How can I tell if my software is good enough to release?
How can figure out what my code is supposed to do?
How can I stay focused on building what I actually need to?
13:30 14. Continuous Integration How can I tell what state my project is actually in?
13:45 15. Agile Development What kind of development process should my project use?
14:00 16. Sturdy Development What other kind of development process could my project use?
14:15 17. Test Driven Development How can figure out what my code is supposed to do?
How can I stay focused on building what I actually need to?
14:55 18. Compromise How can I improve my project’s development processes without becoming overwhelmed?
Under what circumstances can I suspend best practices?
15:15 19. Afternoon Coffee Break
15:30 20. Build a Community How can I turn a project into a community?
15:45 21. Mentor How can I help other people get ready to manage parts of this project?
16:00 22. Building an Organization How can I turn a community into an organization?
16:25 23. Marketing How can I raise money for my project?
16:50 24. Conclusion What just happened?
17:05 Finish

The actual schedule may vary slightly depending on the topics and exercises chosen by the instructor.