[关闭]
@ironzhang 2017-03-07T13:52:46.000000Z 字数 1417 阅读 286

MQTT一期项目总结

工作


回顾MQTT一期项目,特别是在接入原有业务的阶段,实际工期远大于预期工期,细思原因,觉有以下几点可以改进。

1. 大多设计只停留在解决方案阶段

如果我们将设计工作分为以下几个阶段:

  1. 物理设计
    这个阶段主要考虑如何满足需求(包括功能性需求和非功能性需求),如采用何种算法和数据结构,用mysql还是redis来存储数据,数据库表格如何设计等都属于这一阶段的需要考量的,总之就是考虑解决方案的物理可行性。

  2. 模块的职责设计
    这个阶段主要考虑这个模块在整体系统中的价值。如模块对上游系统提供哪些接口及接口行为,上游系统是如何调用这些接口的,以及依赖下游系统的哪些接口,这些依赖之间是否存在重入风险等。

  3. 模块内部的层次设计
    这个阶段主要考虑如何分层,如接口层、逻辑层、核心数据层、对外接口层等等。此外,还需考虑各子模块之间的如何调用、调用依赖关系、以及各个子模块的可扩展性等。

  4. 模块的核心数据结构,核心算法,技术难点如何实现的细节确认
    对核心设计的细节确认,确保不会有疏漏,大多数系统中这部分工作不会有什么挑战,如果不是这种情况,核心设计还有很大不确定性的话,需返回物理设计阶段,确认该模块的物理可行性。

  5. 合理粒度的职责切分
    在每个子模块内部以类或函数为单位划分职责,明确每一个类的职责,以及这些类如何组合起来共同完成工作。

在第二阶段后,我们可以评估出大致的一个工作量,在第四阶段后,我们可以评估出一个更准确的工作量。而我们在讨论设计时,更多的是讨论解决方案的物理可行性,有时也会讨论模块需要对外提供的接口,却很少关注后面几个阶段的工作。

以本次MQTT项目为例,我们将目标分为了三个阶段的小目标

鉴于此,建议调整一下我们今后针对复杂系统的工作流程:先做物理设计,待讨论确定之后,再讨论模块职责,确认上下游系统相关接口。最后再做详细设计,以确认工期。

总体设计不足

由于目标分阶段的关系,在开始我们只针对第一阶段的目标做了详细设计,对后面两阶段的目标,只是粗略思考了一下其方案的物理可行性。而在实际工作中,经常是在上一阶段的详细设计或编码状态时被打断,强行进入下一阶段的模块的职责设计阶段。

《人件》(peopleware)一书中有讲到:进入专注状态,需要15分钟连贯的工作,而一旦被打断退出专注状态,就像堆栈被清空,再次建立思维的缓存和上下文环境,需要另外的15分钟,在理想情况下。

个人觉得长期任务进入专注状态的周期更长,在打断后进入新工作,由于之前工作还未完成,心有挂碍,故进入新工作状态缓慢。而在完成新工作后回到之前的工作,又要重新恢复当时的思绪,阅读之前所写代码,又是一次缓慢的进入工作状态的历程。

个人建议,总体设计以第二阶段设计为界,即每个模块,都须明确其模块职责和对上下游的接口依赖后才能开展其他工作。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注