Select Connection: INPUT[inlineListSuggester(optionQuery(#permanent_note), optionQuery(#literature_note), optionQuery(#fleeting_note)):connections]
Definition
Over time, many different people will work on the system (engineering and oper‐ations, both maintaining current behavior and adapting the system to new usecases), and they should all be able to work on it productively
Majority of the cost of software is not in its initial development, but in its ongoing maintenance. To reduce pain during maintenance, there are three design principles we should follow:
- Operability ⇒ easy to keep the system running
- Simplicity ⇒ easy to understand the system
- Evolvability ⇒ easy to make changes
Operability
what to do:
- provide visibility into the runtime behaviour and internals with good monitoring
- provide good support for automation and integration with tools
- avoiding dependency on individual machines
- provide good documentation
- provide good default behaviour
- self healing where appropriate
- minimize surprises
Simplicity
Making a system simpler does not mean reducing its functionality; it can also remove accidental complexity. One of the best tools to remove is abstraction.
Evolvability
Closely linked with simplicity and abstractions.