There is no theoretical reason that
is hard to change about software.
If you pick any one aspect of software
then you can make it easy to change,
but we don’t know how to make everything
easy to change. Making something
easy to change makes the overall system
a little more complex, and making
everything easy to change makes the entire
system very complex. Complexity is
what makes software hard to change.
…
Software is not limited by physics, like
buildings are. It is limited by imagination,
by design, by organization. In
short, it is limited by properties of people,
not by properties of the world. “We
have met the enemy, and he is us.â€
Ralph Johnson
http://www.martinfowler.com/ieeeSoftware/whoNeedsArchitect.pdf