Functional decomposition
This is a method for analyzing engineered systems. The basic idea is to try to divide a system in such a way that each block of the block diagream can be described without an "and" or "or" in the description.
This innocent-sounding exercise forces each part of the system to have a pure function. When a system is composed of pure fuctions, they can be reused, or replaced. A usual side-effect is that the interfaces between blocks become simple and generic.
Since the interfaces usually become simple, it is easier to replace a pure functio with a related, similar function.
For example, say that one needs to make a stereo system. One might functinoally decompose this into speakers, amplifier, a tape deck and a front panel. Later, when a different model needs an audio CD, it can probably fit the same interfaces.
This process is powerful when applied to software.