Great Software Is Not Built, It Is Grown
来源:互联网 发布:http tcp udp网络协议 编辑:程序博客网 时间:2024/06/04 18:31

Great Software Is Not Built, It Is Grown
Bill de hÓra
AS An ARCHiTECT, you are tasked with providing the initial structure and arrangement of software systems that will grow and change over time, will have to be reworked, and will have to talk to other systems—and almost always in ways you and your stakeholders did not foresee. Even though we are called architects, and we borrow many metaphors from building and engineering, great software is not built, it is grown.
The single biggest predictor of software failure is size; on reflection there’s almost no benefit to be had from starting with a large system design. Yet at some point we will all be tempted to do exactly that. As well as being prone to incidental complexity and inertia, designing large systems upfront means larger projects, which are more likely to fail, more likely to be untestable, more likely to be fragile, more likely to have unneeded and unused parts, more likely to be expensive, and more likely to have a negative political dimension.
Therefore resist trying to design a large complete system to “meet or exceed” the known requirements and desired properties, no matter how tempting that might be. Have a grand vision, but not a grand design. Let you and your sys- tem learn to adapt as the situation and requirements inevitably change.
How to do this? The best way to ensure that a software system can evolve and adapt is 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 will have many desirable properties and can teach us much

about the architecture that a large system, or worse, a collection of architec- tural documents, never can. You are more likely to have been involved in its implementation. Its lack of surface area will be easier to test and therefore less prone to coupling. It will require a smaller team, which will reduce the cost of coordinating the project. Its properties will be easier to observe. It will be easier to deploy. It will teach you and your team at the earliest possible moment what does and does not work. It will tell you where the system will not evolve easily, where it is likely to crystallize, where it is fragile. Where it might break. Perhaps most important, it will be comprehensible and tangible to its stakeholders from the beginning, allowing them to grow into the overall design as well.
Design the smallest system you 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 will thank you for it. Do not confuse an evolutionary approach with throwing requirements out, the dreaded phasing, or building one to throw away.
- Great Software Is Not Built, It Is Grown
- what is great software
- It is a great start
- OOA&D is about writing great software
- 论software is not configured&software on system is software_outofdemand
- Software Engineering is NOT an Engineering
- E文积累_20080121_Confidence is built, not inborn
- 372. Rome is not built in a day. 冰冻三尺,非一日之寒
- 372. Rome is not built in a day. 冰冻三尺,非一日之寒
- How is MP3 built?
- How Digg is Built
- Redmine is great.
- Eclim is great
- Is it worth the effort to design software well?
- What is software design?why we need it?
- 有感"Java is not platform-independent, it is the platform"
- 有感"Java is not platform-independent, it is the platform"
- Sucking up is really not you strong suit, is it?
- 后缀树与后缀数组
- uva 11991 Easy Problem from Rujia Liu?
- Android基础(1)-----Genymotion安装与失败的总结
- For the End User, the Interface Is the System
- wap手机网页html通过特殊链接:打电话,发短信,发邮件详细教程
- Great Software Is Not Built, It Is Grown
- 图的各种算法
- SOAPUI测试WSDL项目(四)---添加头信息和附件
- poj 1966 Cable TV Network 顶点连通度-最大流
- 基于NIO实现的一个高性能通信框架
- Sublime Text 3加入右键菜单
- SOAPUI测试WSDL项目(五)---检查器
- 测试文章
- SSL协议详解