A basic design error in software

Suppose we didn’t know too much about bridge design, but were convinced that (a) the current design methods were too slow and unmodular to be useful, and (b) not knowing anything about structure other than what we could observe of completed bridges was no barrier to coming up with a new method. We might start by thinking, the bridge as a whole is too complex, let’s break it into parts to simplify. That seems sensible enough, so we decide to divide a bridge into modular sections  pilings, cabling, superstructure, and roadway. Then we divide our design team into parts and discover that the divisions make the design task harder. It turns out that the weight of the roadway makes a big difference to the design of the pilings and superstructure and, in fact, each of our components cannot be designed without deep information about the other components. We have transformed a hard problem into four harder problems.