Software Design/Easiness of change

Easiness of change (or maintainability) is a high-level code (internal) quality. Easiness of change can be decomposed into the following components:
 * Determining what needs to be changed. The effortfulness of this process is affected by complexity, traceability of behavior, and apparency of dependencies primary qualities, as well as the presence of unknown unknowns.
 * Ability to make the change. Compatibility requirements may render making a certain change impossible, or requiring a lengthy transition protocol which includes deprecation of the old behaviour.
 * Making the change in code. This is more effortful and difficult to review (and hence error-prone) if the change amplification is high.
 * Verifying the change is correct depends on the testability. If the change is wrong or incomplete, poor traceability of behavior and debuggability affect the difficulty of correcting the modification.

Relevant practices

 * Hide an object access chain