logo

drewdevault.com

[mirror] blog and personal website of Drew DeVault git clone https://hacktivis.me/git/mirror/drewdevault.com.git

Four-principles-of-software-engineering.md (1402B)


  1. ---
  2. title: Four principles of software engineering
  3. date: 2020-10-09
  4. outputs: [html, gemtext]
  5. ---
  6. Software should be **robust**. It should be designed to accommodate all known
  7. edge cases. In practice, this means predicting and handling all known error
  8. cases, enumerating and addressing all classes of user inputs, reasoning about
  9. and planning for the performance characteristics of your program, and so on.
  10. Software should be **reliable**. It should be expected to work for an extended
  11. length of time under design conditions without failures. Ideally, it should work
  12. outside of design conditions up to some threshold.
  13. Software should also be **stable**. It should not change in incompatible or
  14. unexpected ways; if it works today it should also work tomorrow. If it has to
  15. change, a plan shall be written. Stakeholders (including users!) should be given
  16. advance notice and should be involved in the planning stage.
  17. Finally, software should be **simple**. Only as many moving parts should be
  18. included as necessary to meet the other three goals. All software has bugs, but
  19. complicated software (1) has more bugs and (2) is more difficult to diagnose
  20. and fix. Note that designing a simple solution is usually more difficult than
  21. designing a complex solution.
  22. *This (short) article is based on [a Mastodon post][original] I wrote a few weeks ago.*
  23. [original]: https://cmpwn.com/@sir/104931806273081351