Skip to content

DevMethodologies

Vitalii Koshura edited this page Apr 11, 2023 · 1 revision

Software development methodologies for BOINC (my opinions)

David Anderson, 5 Aug 17

There are various approaches to structuring the software development process. Two popular and constrasting approaches are:

The "agile" model https://en.wikipedia.org/wiki/Agile_software_development

and the "waterfall" model: https://en.wikipedia.org/wiki/Waterfall_model

I encourage reading these pages. Not all aspects of the models apply to BOINC: you can't have "scrums" if developers are distributed, or there is only one of them. But the basic ideas apply:

  • The agile model involves rapid prototyping, committing pieces early, and allowing requirements and implementation to evolve in parallel.
  • The waterfall model involves developing features in a sequential way (requirements, design, implementation, testing) and committing them at the end of this process.

Once we let go of the idea that master should be stable (which is impossible for reasons given here, there is no reason to require that developers use any particular methodology.

I greatly prefer the agile model for my own work, and I think it has major advantages in the context of BOINC. And, for what it's worth, the world of commercial software development has mostly moved to the agile model (if you doubt this, interview at Google). The agile model is the most "modern", if you care about being modern.

However, other people might prefer to use the waterfall or other models for their work, and I have no problem with this. At the level of code, what matters is that:

  • Developers do a reasonable amount of testing before committing to master.
  • Developers take responsibility for fixing bugs in their code ASAP as these bugs are found in master or in release branches.
  • Code quality is high (simple, well-commented, etc.)

Note: the use of branches is orthogonal. You can practice either model with or without creating development branches. It's up to the developer.

Clone this wiki locally