《人月神话》阅读笔记之——第四章:贵族专制、民主政治和系统设计

        概念完整性是系统设计中最重要的考虑因素。

        功能与理解上的复杂程度的比值才是系统设计的最终最终测试目标,而不仅仅是功能。这意味着保持概念完整性其实也是增加产品的易用性。

        如果要得到系统概念上的完整性,就必须有人控制这些概念。这实际上是一种无需任何歉意的贵族专制统治。

 

        项目维护是一个墒增的过程,提出修改意见的人,提出需求的人通常都不是当初做出设计的那批人,如果没有概念完整性作为后续维护的指导原则,项目很快就会混乱不堪。

 

        曾经在我工作过的某家公司,我入职不久后产品经理希望对后台做整体改版,加入了大量的统计。但是当初开发这个系统的人已经全部离职了,公司里从开发到产品没有一个能说清楚这个项目到底有哪些功能,数据结构是怎样的,原本打算做一个新项目把旧项目里还在用的功能迁移过去,但是也是只做了一半原班人马都离职了。在这种情况下,我认为应该先把迁移工作完成,在迁移的过程中理解项目,同时丢弃已经不在使用的功能,删除已经不再使用的字段,对代码进行重构,做到高内聚低耦合。这时候增加统计的话回同时修改两个系统,增加耦合度和业务复杂度,使原本就被拖延的迁移工作更加遥遥无期。同时保有两个功能重叠的系统也会使修改或新增的功能在迁移时需要再次重写,长期如此下去,新需求的增加速度会超过迁移速度,整个迁移工程可能因此烂尾。

即使没有以上特殊情况,也需要考虑以下几个因素的重要次序:

1、对运行速度的影响。添加的统计逻辑是否增加了cpu、内存、IO的使用?统计方式算法复杂度是怎么样的?主业务是否有大并发?增加的硬件开销是否会导致大并发时影响用户体验甚至导致服务不可用?对共用资源,如数据库的使用是否会导致其他业务响应变慢甚至死锁?

2、统计本身是否反应了真实信息。统计的的信息是否需要随业务的回滚而回滚?能够保证回滚的事务性?保证事务性的代价是否会增大业务的复杂度和计算资源开销?

3、对代码二次开发或重构的影响。统计的加入是否会影响模块的独立性?是否会增加模块之间的耦合度?如果将来统计需要修改或者删除,是否会大大增加产生bug的几率?是否会在数据库中留下难以清除的字段和数据垃圾?是否会影响到分库分表?

4、统计内容本身的价值。统计内容是否真的产生了价值,还是只是满足了廉价的掌控感?这么做值不值得?

5、对未来统计需求的增加准备。未来是否还会有更多的统计需求?现在的统计防止是否给未来留有足够的可扩展性。对未来新增需求的开发成本是否有大概的预估?行业内是否有比较有通用的做法或工具可以降低这些开发成本?

        保证概念完整性,就是要有一定的排它性,凡事威胁到概念完整性的因素都需要剔除或者通过其他方式实现。就拿这个项目为例,首先根据以往的经验,我判断这个产品提出的需求并没有经过深思熟虑。证据有:

1、只给出了改办的UI图,没有说明统计数据的来源,没有说明增统计数据是实时统计还是分时统计。

2、没有说明本次改版的目的,也没有说出实现这次改动的人月预算。

从其他渠道的观察,本次改版需求的提出过程很可能是这样的:

老板:“你接下来有什么工作没有?”

产品:“没有。”

老板:“现在的后台好丑,能不能换个风格?”

产品:“好的。”

找来UI,天马行空的大胆设计,大胆创新。

产品:“老板,这样你看可以么?”

老板:“嗯,不错,就这么做吧。”

接下来是事实:

       产品召集大家开会,向所有人介绍了漂亮的新系统,在会议最后分派任务,然后说:“这个改编最好在这个月内做出来,老板要拿出去展示。”

       结果就是所有人都心里一万头草泥马跑过,但是表面上只是“哦”,然后散会,该干嘛干嘛去。

       当产品拿着UI图问我什么时候后端能做完时,我给他结了一张百度首页的图,问他这个东西你决定要多久能做完,他语塞。我说那你现等下,我把现在系统里还没有的功能找出来,然后我们再看看做完这些新功能需要多久。2天后,我列出了所以新功能,并对产品提出了如下4点要求:

1、按照1到5标记功能的重要程度。

2、在重要程度1和2或更高的功能上注明期待的最大工时,如果技术评估超过工时,该功能将被砍掉。

3、做这个功能的理由。

4、如果不知道理由,请写下提出功能的人的名字和联系方式。

       我还另外说明,统计的方式有很多,不一定非要集成到管理后台里,有很多开源的工具可以直接从数据库里统计出数据;也不一定非要统计某个跟业务逻辑高度耦合的数据,可以等业务完成后从凭证中得到想要的信息。所以一定要了解真实需求,知道了真实需求才能判断哪些统计必须集成到后台,哪些可以用开源工具实现;哪些统计值得牺牲一些计算资源和软件简洁度,哪些应该放弃,哪些应该用其他方式来达到相同或者近似的结果;哪些数据反映了真实情况,哪些数据会带来误导。

       结果这次会议结束后产品再没有提过这件事,这证明了我一开始的猜测,这是一个外行拍脑袋拍出来的需求,他根本不知道代价是什么。

       贵族专制的优势就在于可以避免外行领导内行,因为外行即不想也没有能力对项目的整体利益、长远利益负责。保持概念完整性不仅仅是一个准则,同时也是一种组织方式,没有贵族专制的保障,保持概念完整性就仅仅是一句空话。

 

        另外,缺乏整体结构的设计会让参与人面度海量的选项和极大的沟通成本。通过1到2个人对结构的把控,可以使整个开发团队在不需要进行大量的沟通,就知道知道哪些设计应该放弃,哪些设计应该坚持。无论是在开发还是在其他事上,太多的选项都会使人产生焦虑。把脑力花在解决问题而不是做选择上,也会更加有利于发挥个体的创造性。

        麻将上有一种打法叫“绝一门”,意思是放弃一个花色的所有牌,从而增加其他花色成牌的机会。在人的成长过程中,如果可选的路太多,做出选择的成本太低,不需要做取舍,那这样的人生怎么可能会产生智慧和创造呢?

        所以——纪律、规则对行业是有益的。外部的体系结构规定实际上是增强,而不是限制了实践小组的创造性。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值