Maintainability

Dated Mar 22, 2020; last modified on Sun, 14 Mar 2021

Ongoing maintenance includes: fixing bugs, keeping systems operational, adapting to new platforms, modifying to fit new use cases, etc.

Operability: Making Life Easy for Operations

Operations teams keep a software system running smoothly. A data system can make life easier for Ops people by:

  • Providing visibility into runtime behavior and system internals.
  • Supporting automation and integration with standard tools.
  • Being tolerant of machines being down for maintenance.
  • Good documentation, e.g. if I do X, Y will happen.
  • Good defaults and self-healing, but with override capability.
  • Minimal suprises.

Simplicity: Managing Complexity

Symptoms of complexity: exploding state space, tight coupling, tangled dependencies, inconsistent naming, performance hacks, special casing.

Accidental complexity is one that is not inherent in the problem that the software solves. Such complexity should be abstracted away.

Evolvability: Making Change Easy

Reasons for change: new facts, new use cases, change of business priorities, feature requests, new platforms, legal requirements, system-forced architectural change.

Agile patterns provide good frameworks for adapting to change, but most discussions focus on small-scale code.