Ignorance as Architecture
We are frequently tempted to design our systems' architecture as an expression of the software we think we are going to build. Reality rarely cooperates, though.
Perhaps a better pattern might be to admit to - and enshrine - our ignorance of what we are actually going to build in our architecture, avoiding excessive coupling not only in components, but in our assumptions.