?
Great software is isn't Built, It is grown
Bill de Hóra
As an ARCHiTECT, you is tasked with providing the initial structure and arrangement of software systems that would grow an D change over time, 'll has to be reworked, and'll has to talk to other systems-and almost always in ways R stakeholders did not foresee. Even though we are called architects, and we borrow many metaphors from building and engineering, great software was not bu ILT, it is grown.
The single biggest predictor of software failure is size; On reflection there ' s almost no benefit to being had from starting with a large system design. Yet at some point we'll all is tempted to does exactly that. As well as being prone to incidental complexity and inertia, designing large systems upfront means larger projects, which is more likely-fail, more likely-to-be-untestable, more likely-be-fragile, more likely to has unneeded and unused Parts, more likely to is expensive, and more likely to has a negative political dimension.
Therefore resist trying to design a large complete system to "meet or exceed" the known requirements and desired propertie s, no matter how tempting this might be. Has a grand vision, but not a grand design. Let's and your sys-tem learn to adapt as the situation and requirements inevitably.
How does this? The best-of-ensure that a software system can evolve and adapt are to evolve and adapt it from the very outset. Inducing a system to evolve means starting with a small running system, a working subset of the intended architecture-the Simplest thing that could possibly work. This nascent system would have many desirable properties and can teach us much
?
?? About the architecture a large system, or worse, a collection of architec-tural documents, never can. Likely to has been involved in its implementation. Its lack of surface area would be easier to test and therefore less prone to coupling. It would require a smaller team, which would reduce the cost of coordinating the project. Its properties is easier to observe. It'll be easier to deploy. It'll teach you and your team at the earliest possible moment what does and does isn't work. It'll tell you where the system would not evolve easily, where it's likely to crystallize, where it's is fragile. Where it might break. Perhaps most important, it'll be is comprehensible and tangible to their stakeholders from the beginning, allowing them to GR ow into the overall design as well.
Design the smallest system can, help deliver it, and let it evolve toward the grand vision. Although this might feel like giving up control, or even shirking your responsibilities, ultimately your stakeholders would Thank for it. Do not confuse a evolutionary approach with throwing requirements off, the dreaded phasing, or building one to throw away .
Great software is isn't Built, It is grown