# Good Practices for Research Software Development --- ## Programming vs Software Engineering
Software engineering is programming integrated over time.

—Titus Winters, Google C++ devlead

Note: What's the difference between programming and software engineering? --- development speed --- ## Development Speed ⚡
  • Red curve
    • Writing code
  • Blue curve
    • ...
    • ...
    • ...
    • ...
    • ...
    • ...
Note: - deleted wrong function - need to onboard collaborators - a new feature broke stuff - need to rewrite - need to teach users

- GitHub - Version control - Modular coding - Documentation - Code reviews - Testing --- ## Projects are Different --- ## What to Use When?
⏱️ lifetime use
1-shot 🚫
week+ Git & GitHub
3 months+ Testing
6 months+ Documentation,
automate testing
🧑🧑 users use
1 Push to main
2+ Branches, merging
2+ (+students) Code review
2+ (+external) release branch,
& everything else
Note: - Train these tools - Experience their effect - Use own judgement, but - avoid "but in my project..." --- ## Good practices are investments Profits come in - Development efficiency - Reproducibility - Reusability - Faster debugging - Robustness, fewer errors - Fewer headaches!