AT8 — Coupling/Cohesion: A well-designed abstraction reduces coupling by hiding implementation. Callers depend on the interface, not the implementation. This means implementations can change independently. The cost: the interface itself becomes a coupling point. Changing an interface requires changing every implementor and every caller. Good interfaces are therefore conservative — add methods rarely, remove methods never.
AT3 — Simplicity/Flexibility: A narrow interface is
simple. A wide interface is flexible but harder to implement and harder
to reason about. A BlobStore with four methods is easy to
implement against any storage backend. A BlobStore with
twenty methods — supporting metadata, tagging, versioning, lifecycle
policies — is flexible but forces every implementor to cover the full
surface, including implementors that only need the basics.