"The Myth of the Moon"
32nd Anniversary Chinese Commemorative Edition
[US] Frederick Brooks,
UMLChina Translation Team Translated by Wang Ying
With the development of technology, some ideas are no longer applicable to the current environment. But the core idea still applies.
New technologies have solved many of the difficulties in implementing software systems, but the difficulties of designing systems still exist.
question
In the development of large-scale systems, very few projects meet the requirements of goals, schedules, and budgets.
reason
Unreasonable schedule
> Lack of effective estimating techniques, lack of tracking and oversight, no ongoing estimating projects
False assumptions: everything will work well and each task only takes as much time as it "should" take
· Project timing depends on sequence constraints
> Progress and workload are confused with each other , increase manpower to catch up
· "Man-months are used as a measure of the size of a job" implying that staff numbers and hours are interchangeable
The number and time exchange is only applicable to "a task can be broken down among the participants, and they do not need to communicate with each other"
The increase in personnel leads to increased communication costs, and the maximum number of personnel depends on the number of independent subtasks
Communication costs: reassign tasks, train new people, additional mutual communication
solution
$ surgical team
> Each part of a large project is tackled by a team assembled in a surgical-like fashion. It is up to one person to do the problem decomposition, and the others to give him the support he needs . Just coordinate the thinking of the "surgeons" in the various teams - determine the conceptual integrity of the entire system
> Few people design system ( aristocratic despotism )
System design must be implemented by one person or very few in agreement to ensure conceptual integrity
· Design and implementation division of labor
~ May lead to: too many features in the design, too little consideration for the cost in the actual situation
~ Solution: Thorough, discreet, harmonious communication between designer and implementer
$ Implement the system concept design
> Documented Specifications
Formal definition (precisely define system design )
> Conferences at different levels
> Multiple implementations (forces the definition to be more neatly specified)
> Communication log (the designer records the implementer's inquiry, and distributes it to the implementer after sorting and merging)
> Independent test groups test products according to system design
$ Improve team communication
> Well-structured and up-to-date project workbook, well-organized)
$ Choose the right language, tools, documentation (to keep up with the times)
$ Adopt a design that is easy to eliminate bugs and strengthen testing
$ controls the size of each part of the system
$ Consider changes at various stages of the project (the only constant is the change itself)
$ Set appropriate milestones and track them
$ track maintenance project documentation
no silver bullet
$ 没有任何技术或管理上的进展,能够独立地许诺在生产率、可靠性或简洁性上取得数量级的提高。
> 软件开发中困难的部分——固有的概念复杂性
> 困难是决定说什么,而不是怎么说
> 软件系统无法规避的内在特性:复杂度、一致性(需要兼容各种场景)、可变性、不可见性(软件的客观存在不具有空间的形体特征)
$ 最有希望成为银弹的技术——快速原型化系统的方法和技术
> 把开发作为迭代需求过程的一部分
$ 其它技术/方法:增量式开发(类似快速原型化)、直接购买软件、聘用培养优秀的设计人员