为什么你做不好系统设计
这里主要想说一些技术评审里的所见所得。作为部门技术评审的负责人,平均每月要组织两到三次的评审,很多感想不适合在评审后说,所以一年下来肚子里憋满了话。不过还是要声明一下,现在讲的虽然针对任何人,但不针对任何个人 :)
最开始组织评审的时候,遇到有些不情愿的同事,我通常会问,“请想一想,技术评审给你带来了什么?” 这个问题直接,而且我觉得有足够的好处可以说服他们。但慢慢地,我开始重新思考这个情况。我发现,其实他们不是觉得这种方式不行,而是觉得没有这种方式自己也行。
是的,谁会觉得自己不行呢。又有多少人真的可行呢?我对此比较悲观,99%的人不行。
##为什么99%的人不行
技术方案设计是一个反人性的工作,你不只是要跟遇到问题的战斗,你还要跟自己战斗。而后面这部分是真正的困难,也会决定一个系统是看起来可行还是真正的可行。正所谓,外魔易退,心魔难降。据我的观察,至少有三个心魔你会遇到:
-
思维惰性 inertness
通常完成系统设计需要不断迭代,其中有两次是不可缺少的,一次是把该加的功能加上,一次把该去的功能去掉。把该加的功能加上,你不断发现自己考虑不周的地方,不断排除隐患;把该去的功能去掉,可以让你减少很多不必要的工作。很多人可能走不完前面那次,但更多的人是在后面那次停工了。
有些人不喜欢反复更改设计,因为已经被变动耗费了心力;另有些人,拥有驴子一样的性格,你不打我,我不工作。传说后者跟胡萝卜加大棒策略过度使用有关,我觉得有一定道理。
不管怎样,当你已经不在思考,你很难做出好的系统设计,因为说服自己相信一个没有完成的系统非常容易。
-
骄傲自满 conceitedness
经常可以听到这样的声音,“XXX不过如此”,或者,“跟XXX类似,没有什么新意”等等。这些人大多是被骄傲蒙蔽了双眼,不知道山有多高,不知道世界宽广,却总觉得自己天下无敌。
当然很多时候,这跟个人判断力有关系,但这种习惯本身也在负面影响着判断力。判断力跟见识有关。见识不够多,说不出其中的区别,也自然看不到其中的精巧,学习和提高就更不用提了。在这种情况下,一个人不是不想设计,而是觉得不需要再进行设计。
他们拿着一块石头,就认为这是世界上最好的锤子。
-
急于求成 hastiness
急于求成最大危险在于偏离目标,当你没有理解清楚需求就开始设计,就很难把握目标和方向。正如持枪打靶,目标只在靶心一点,在此之外却是无限空间。这也解释了为什么会有那么多偏离目标的可能性。
有的人只看到了眼前,最后的设计往往便很短命,系统运行不久就要开始重新设计。有的人则急于优化,他们穷尽自己所知所能来设计,把想到的东西全部堆砌起来。想要优化一切的做事方式,反而容易错过需要重点关注的部分。有的人则更盲目,他们就没有真正理解过需求,所以他们设计的根本就不是原来想要的。
如果你不能静下心来思考,你很难明确目标,而目标没有明确的话,所有设计都将是徒劳。
这些是人性本身的缺陷,是每个人都需要面对和正视的。因为它们可以摧毁任何设计,特别是当你的系统足够复杂,足够庞大,基础设施足够薄弱的时候。
##其实你可以做好
有些人以为经验是设计好系统的关键,我倒不这么觉得。首先经验不是一直可用,此外大多数经验可用的情况,其实不是因为其本身可以借鉴,而是因为它们来源于教训,带着痛苦的回忆。那些有经验的人因此多了些对系统不稳定的恐惧感而已。因为系统才不在乎人的感受,不管你多累多烦多善良多可爱,该崩溃的时候还是会照常崩溃。
那怎样才能做好呢?我统计了最近一年的评审纪要,发现一个有趣的数据:
所有参与评审的系统,平均而言,会有三个左右的缺陷级别的问题,或者思考不到位的地方。
在我们团队里,这种级别的问题会强制在上线前完善或修正。这个现象在一定程度上,代表了团队当前的设计能力与服务要求之间的距离。我喜欢称之为A3现象(Additon-3 Phenomenon)。
你可以使用A3法则,在觉得设计完毕的时候,告诉自己还需要再解决三个问题。这不能保证你可以做好,但至少会让你做得更好。我只能说,在所有评审过的系统里,还没有遇到一次因为设计而导致的故障或问题出现。
也就是说,不要想着一蹴而就进行设计,因为问题是注定存在的。问题发现与修正的不断迭代,才是系统设计的必经之路。所以你只需要下定决心去思考,告诉自己再找到并解决三个问题,设计的系统必然会越来越好。记住,那些设计的牛人,可能只是比你多迭代一次而已。
##写在后面的话
既然提到了技术评审,学界有很细致的研究。Rick Kazman、Mark Klein、Paul Clements著有ATAM(ATAM - Method for Architecture Evaluation),感兴趣可以阅读。
Bernie Cosell曾经说过:“在你职业生涯里,你再也找不到这么一拨人,乐意花上一个小时,帮你彻底弄清楚自己的设计。错过这种机会,你就得全靠自己了,那本应该是非常美妙的体验。”
是的,在你设计系统的时候,总会有这么一拨人,陪伴你帮助你。这是我们评审工作的追求,也是评审美好而有趣的部分。