Weakened Assumptions. We should make
specifications as small as possible, that way we can say
exactly what is used by the parts.
Evaluating Changes. If a proposed change only
affects the implementation part, and not the specification,
then we do not need to worry about all the other parts that
use the specification.
Communication. If one person is building the part
that implements the specification and the other is building a
part that uses the specification, they do not need to
talk. They must simply agree on the spec.
Multiple Implementations. There can be many parts
that implement a specification: different platforms, different
requirements, etc.