If I should choose only one thing from the knowledge I gained from my software engineering classes at university, I would have to go with “Low Coupling / High Cohesion”…
However, it appears that not all have been introduced to universal truth of the objective regarding implementing this in system design and architecture.
Coupling can be “low” (also “loose” and “weak”) or “high” (also “tight” and “strong”). Low coupling refers to a relationship in which one module interacts with another module through a stable interface and does not need to be concerned with the other module’s internal implementation. With low coupling, a change in one module will not require a change in the implementation of another module. Low coupling is often a sign of a well-structured computer system, and when combined with high cohesion, supports the general goals of high readability and maintainability.
Systems that do not exhibit low coupling might experience the following developmental difficulties:
* Change in one module forces a ripple of changes in other modules.
* Modules are difficult to understand in isolation.
* Modules are difficult to reuse or test because dependent modules must be included.
The concept of coupling is usually related to the concept of cohesion: low coupling facilitates high cohesion, and vice versa. For example, one approach to increasing cohesion is functional design, which seeks to limit the responsibilities of modules along functionally-related boundaries. Modules with single responsibilities tend to communicate less with other modules, which typically causes the side-effect of reduced coupling.
Low coupling may also reduce performance, and a highly-coupled system is sometimes desirable to achieve maximum efficiency. Regardless, in many modern computing systems, the cost of reduced performance is often seen as a worthy trade for the benefits to the software development process that result from low coupling.
If you have no idea what I am talking about or would like to read more about how to obtain this in Flex, there is a pretty good article @ adobe.com that describes it pretty well and in great detail…