Software is rife with unknown unknowns - situations you think you understand at the outset only to discover that the problem is different from your first impressions (and typically much harder).
How do you deal with unknown unknowns in architecture?
Today we have new uncertainties. I made a quick list of current known unknowns in my own mind.
And as the unknown unknowns have turned into known unknowns, the system has been experiencing postmodern bank runs.
We also know there are known unknowns; that is to say we know there are some things we do not know.
Every decision should have a contingency plan for when those unknown unknowns arise and deem your primary course of action obsolete.
If you have written any nontrivial software, you can relate to the unknown unknowns problem - one of the biggest problems in software design.