Tensions in Practice: A shared repair and controlled local change¶
A toy live software inheritance tree
Two derived classes inherit a defective output rule from one parent. A caller of B has nevertheless come to depend on the old output. Repairing the parent corrects both inherited defaults but makes that caller’s assumption obsolete. Overriding the rule only in A contains the immediate change, while leaving the shared defect in the parent and B. The live inheritance relation makes the repair’s reach visible.
Repair the shared source
Stop transmitting a known defective default to inheriting descendants.
Contain immediate disruption
Avoid changing a dependent branch before its caller can be migrated.
Why these aims pull against each other
The downward link that saves repeated definition also carries a parent repair to descendants. A local override limits that reach by leaving the common source unchanged.
Choose an arrangement to see what changes and what remains difficult.
Arrows show the stated work, authority, or access paths. Position, length, and color do not measure time, risk, cost, or performance.
What this choice protects
What it costs
When it fits
Compare the arrangements
Repair the parent
Correct the parent rule; A and B continue to inherit it without overrides.
- What it protects
- Both descendants receive the corrected default from the shared source.
- What it costs
- B’s caller must stop relying on the old behavior; other inheritors would also need to be traced.
- When it fits
- Fits when a shared repair is warranted and dependent callers can be migrated or the disruption is acceptable.
Illustration note: This is an invented bounded arrangement. Arrows state the selected rights, flows or dependencies; they do not predict behavior or quantify outcomes.
Override only A
Leave the parent unchanged and override the affected rule in A; B still inherits the old default.
- What it protects
- The selected correction is confined to A, allowing B’s existing caller to keep its current assumption temporarily.
- What it costs
- The parent and B retain the defect; the override adds a separate implementation that must be maintained.
- When it fits
- Fits as a bounded local or transitional repair when changing all inheritors immediately would be unacceptable and retained defects are explicitly managed.
Illustration note: This is an invented bounded arrangement. Arrows state the selected rights, flows or dependencies; they do not predict behavior or quantify outcomes.
What this illustration does—and does not—establish
The canonical tension supplies the mechanism. The named setting, arrangements, conditions and costs are editorial constructions, not observed outcomes or universal prescriptions.
- The software lineage, defect and caller dependencies are stipulated. This is live inheritance, not a copied template that has severed its parent relation.
- The override is assumed to satisfy the relevant parent contract; arbitrary overrides can violate substitutability and need a different analysis.
- Leaving a defect is not declared safe. Severity and the feasibility of migration determine whether a transitional local repair is acceptable.
Source entries
Inheritance
Inheritance: Lineage Default versus Parent Repair supplies this local tension. The concrete setting and selected alternatives are explicitly editorial applications.
Lineage Default versus Parent Repair
T6 — Lineage Default versus Parent Repair. Inheritance assumes the parent is correct, so when a parent is found defective — a bug, a discredited precedent, a deleterious allele, a flawed founding doctrine — repair is hard precisely because so much inherited from it. The tension is temporal: the very transmission that made the parent valuable makes correcting it costly. The failure mode is leaving a known-bad parent in place because overruling, refactoring, or correcting it would disrupt every derivative that built on it. Diagnostic: when a parent is discredited, trace what inherited the defective fact before repairing, and weigh the disruption of lineage repair against the cost of leaving the defect propagating downward.
Compression versus Coupling
T1 — Compression versus Coupling. Inheritance compresses description — parent plus per-child delta instead of full restatement — but pays with downward coupling: a change to the parent propagates to every derivative. The tension is that the two are the same mechanism viewed from opposite ends. The failure mode is the fragile-base-class problem — editing a parent and silently breaking children that depended on the old inherited behaviour. Diagnostic: before changing any parent, ask how many derivatives inherit the affected fact and whether the coupling cost of propagation exceeds the compression benefit that justified the lineage.