The critical role of systems thinking in software development – O’Reilly Media

a software system is little more than a formal mathematical model with incomplete, informally specified inputs, outputs, and side effects, run blindly by machines at incomprehensibly high speeds.

I like his simplification, too many people don’t see software as deterministic. I’ve taken over many embedded software projects, and it is usually very evident if the creator had these principals in mind. Here are some key tells:

  • Input limits checked
  • Single point of function return
  • Modular test scaffolding
  • MInimal or limited inheritance
  • Thread safe
  • Memory controls that catch recursion or overflow