Structured Design (Minimizing Cost)- 1 min
I quite enjoy reading “Structured Design” despite my slow progress through it (fairly big book). I enjoy it because despite the fact that it was written forty years ago (1975), it introduces concepts which were and still are influential in developing software whilst also providing a very clear description of these concepts.
On chapter two the basic concepts are described in more high-level approach and here also lies the summary of the main idea which is the following:
“Implementation, maintenance, and modification generally will be minimized when each piece of the system corresponds to exactly one small, well-defined piece of the problem, and each relationship between a system’s pieces corresponds only to a relationship between pieces of the problem.”
If this sounds familiar is because in broad terms this statement introduces the ideas of “Cohesion” and “Coupling”. To some extent this can also be interpreted as the “Single Responsibility Principle” even though I personally find the latter not as clear as the above. There’s a diagram in the book which I’ve tried to transfer here and it can be seen below.
The fact that the components are grouped nicely in circles is irrelevant, a problem will have several components which won’t necessarily be nested closely even though some should be. This is where we come in in order to formulate the problem and break it into smaller pieces. Our analysis might help us indicate that there’s a relationship between part A of the problem and part D. Based on the core philosophy of Structured Design, our system (or our solution) should have a relationship defined that mirrors the relationship of A and D.
I personally find this definition very clear and refreshing. An interesting exercise would be to dig in some of the projects I’ve worked on and see where the above holds true and where it doesn’t.