Regardless of which methodology you use to develop software, the following technical allocation chain must occur to arrive at working source code from some form of requirements:
The figure below shows a 2/6/13 end result of the allocation chain for a hypothetical example project. How the 2/6/13 combo was arrived at is person and domain-specific. Given the same set of requirements to N different, domain-knowledgeable people, N different designs will no doubt be generated. Person A may create a 3/6/9 design and person B may conjure up 4/8/16 design.
Given a set of static or evolving requirements, how should one allocate components to namespaces and libraries? The figure below shows extreme 1/1/13 and 13/13/13 cases for our hypothetical 13 component example.
As the number of components, N, in the system design gets larger, the mindless N/N/N strategy becomes unscalable because of an increasing dependency management nightmare. In addition to deciding which K logical components to use in their application, library users must link all K physical libraries with their application code. In the mindless 1/1/N strategy, only one library must be linked with the application code, but because of the single namespace, the design may be harder to logically comprehend.
Expectedly, the solution to the allocation problem lies somewhere in between the two extremes. Arriving at an elegant architecture/design requires a proactive effort with some upfront design thinking. Domain knowledge and skillful application of the coupling-cohesion heuristic can do the trick. For large scale systems, letting a design emerge won’t.
Emergent design works in nature because evolution has had the luxury of millions of years to get it “right“. Even so, according to angry atheist Richard Dawkins, approximately 99% of all “deployed” species have gone extinct – that’s a lot of failed projects. In software development efforts, we don’t have the luxury of million year schedules or the patience for endless, random tinkering.
Similar to many of BD00′s posts, this one is most likely to offend some people who stumble upon it. Why? Because BD00 felt the need to hoist these eloquently concise snippets from Richard Dawkins’ “The God Delusion“:
Faith is an evil precisely because it requires no justification and brooks no argument. Teaching children that unquestioned faith is a virtue primes them—given certain other ingredients that are not hard to come by—to grow up into potentially lethal weapons for future jihads or crusades.
Because each new generation of children is taught that religious propositions need not be justified in the way that all others must, civilization is still besieged by the armies of the preposterous. We are, even now, killing ourselves over ancient literature. Who would have thought something so tragically absurd could be possible?
To be fair, much of the Bible is not systematically evil but just plain weird, as you would expect of a chaotically cobbled-together anthology of disjointed documents, composed, revised, translated, distorted and ‘improved’ by hundreds of anonymous authors, editors and copyists, unknown to us and mostly unknown to each other, spanning nine centuries.
OK, so now it’s time to open myself up to a counterattack. I believe, but not unquestioningly, that we are all unique, individual manifestations of a universally distributed life force that permeates all things. We are like waves in the ocean of life. We rise up, we create, and then we return home again.
Actually, we never leave home. We just “think” we do.
“…natural selection: the process which, as far as we know, is the only process ultimately capable of generating complexity out of simplicity. The theory of natural selection is genuinely simple. So is the origin from which it starts. That which it explains, on the other hand, is complex almost beyond telling: more complex than anything we can imagine…” – Richard Dawkins
Of course, Mr. Dawkins is talking about the evolution of natural, biological systems over time. But isn’t this also true for man-made, socio-technical systems?