软件开发的201个原则
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

原则39 先确定问题,再写需求

DETERMINE THE PROBLEM BEFORE WRITING REQUIREMENTS

当面对他们认定的问题时,大多数工程师都会匆忙提供解决方案。如果工程师对这个问题的看法是正确的,那么解决方案可能奏效。然而,问题往往是难以捉摸的。例如,唐纳德·高斯(Donald Gause)和杰拉尔德·温伯格(Gerald Weinberg)描述了高层办公楼中的一个“问题”,里面的住户抱怨电梯等待时间太长。这真的是一个问题吗?这是谁的问题?从居住者的角度来看,问题可能是浪费了他们太多时间。从房主的角度来看,问题可能是入住率(及租金)可能会下降。

显而易见的解决办法是提高电梯的速度。但其他解决方法可能包括(1)增加新电梯,(2)错峰安排上班时间,(3)给快递保留一些电梯,(4)提高租金(这样业主可以接受降低后的入住率),(5)改进电梯使用的“归位算法”(homing algorithm),以便在闲置时移动到高需求楼层。这些解决方案的成本、风险和时间延迟差别巨大。而任何一个方案生效,都取决于特定的场景。在试图解决问题前,针对面临问题的人及问题的本质,要确保深入分析了所有的可能选择。在解决问题时,不要被最初方案带来的潜在兴奋所蒙蔽。方案的变化总是比构建系统的成本低。

Gause,D.,and G.Weinberg,Are Your Lights On? New York: Dorset House,1990.