In software design, decomposition is the separation of a system into simpler or basic sub-systems. As many experienced designers know, it is often a difficult task to create an optimal decomposition of a system. It is often as much a people problem as a technical problem. An optimal decomposition requires gathering all the necessary requirements from people and then using those requirements to design the appropriate decomposition of systems and sub-systems. It is also often difficult to know if you have all the requirements. And, given you actually have all the requirements, it is difficult to create an optimal decomposition.
The decomposition matrix tool might improve your decomposition. It generates either business process or data flow diagrams using an algebra for design decomposition that Mike Adler published in the 1980s.1
A feature of the decomposition matrix is that is does not look at all like a business process or data flow diagram. Business process diagrams, for example, are a great way to design a workflow. The problem for most of us, however, is that if we are familiar with a given workflow, it is often difficult to see how it could be significantly different. We all tend to repeat or recreate what we know. The decomposition matrix, however, requires us to only think about inputs and outputs, and how they relate to each other. The diagrams are generated for you based on the Decomposition Matrix of inputs, outputs, and relationships.
- Mike Adler, “An Algebra for Data Flow Diagram Process Decomposition,” IEEE Transactions on Software Engineering, Vol. 14, No. 2. (February 1988). ↩