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:
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.