Love.Passion.Dream

如何推动一个项目

工作两年多,参与了大大小学很多项目,这些完全是在这些项目的积累中自己总结出来的一些感悟。虽然锁项目大大小小都有,但是我这里适用的基本都是在两周到一个季度的项目。毕竟太小的项目一般比较特殊,通常也没有太多需要把握的地方,太大的项目目前还没有参与过。

启动阶段

启动阶段就是指在正式开始编写代码前的确认阶段。一般来说这个阶段之前应该还有一个阶段就是战略和需求的方向确认。一般来说这通常都是公司的整体战略带动起来的,更多是中高层和产品参与得多一些,程序员就参与得少了。不过通常技术经理是会有大概的了解。具体到某一个小项目那就是需要具体的执行者参与了,这也就是启动阶段需要做的事情,这个阶段有时候可能就一天就过去了,有时候可能要好几天,主要还是依赖于项目具体的内容。我认为在这个阶段一定要搞清楚的是以下几点:

1.必须明确需求,明确目标。这上面不能说差不多活着接近,如果真的是搞不定那就降级到一个简单的版本。总之一定要避免模糊的需求。如果是技术上的重构那么也需要技术经理带领明确目标。不然到时候项目开始之后大家就会觉得很虚,没有目标,也就没了干劲。

2.明确人员支持,也就是搞清楚责任负责人。一定要避免出现某一块无人主导的状况。每一个部分的负责人只能有一个,必须要形成一个树形的责任分配。

3.明确排期,deadline 的重要性不言而喻。尤其是很多关键的节点一定要明确交付时间,并且由上面说的负责人把握,当然这个时间必须要预留有延期的空间。而且要结合项目难度和人员分配合理安排。如果可能要加班也需要提前考虑下,另外最好多设立一些时间点,而不是只有最终一个时间点。否则最后项目延期起来会很可怕。

开始阶段

开始阶段也就是代码开始编写之初的阶段,这个阶段开始后基本大多数都是技术的事情了。我认为这个阶段一定要做好以下几点:

1.关键技术骨干主导架构,需要有以为技术靠谱的人从整理主导整个技术架构的搭建。

2.快速架构出各个可分配给其他人开放的代码结构,简单到可以仅仅是一些文件夹的创建。复杂一点可以是各个模块活着类,活着数据库的功能名称确认。当然这个阶段不能做得太细,因为这一块需要一个人去总体把握,但是一个人又没有太多精力去构建细节。另外也可以将子模块分别分配给其他人去设计子模块内部的架构。总之,这个阶段是最重要的,它确认了项目总体的结构,同时也为其他人可以快速参与协同开放创造了条件。

3.最好是能够将项目在开发过程中就搭建为一个可整体构建的工程,并提供靠谱的编译或者调试环境。这样能够保证开放过程中能够保证总体的质量,能够从整体上检测程序的可靠性,也让开放人员能够更好的调试开发程序。

开发阶段

开始阶段准备好之后就可以将各个子模块分配给各个开放人员进行开放了,这一阶段是最耗时,也是项目进展最明显的阶段。这个阶段要注意的是:

1.任务分配要合理明确,时间点确认。要让每个人都知道自己应该去完成那一部分代码,知道自己的进度,明确自己的责任。能够最高效率的去完成任务。

2.开发过程中的代码质量保证。开发中需要团队经常交流沟通,合适调整最初的架构。另外要加入 code review 保证代码质量,但是要切记不能因为 code review 拖延时间,一定要把 review 也纳入任务的一部分。

3.开发实现的时候避免给自己挖坑,不要把简单的事情做复杂了,也不要把复杂的事情想简单了。可以看我之前写的: 程序员是如何给自己挖坑的?

4.尽量保证开发过程专注。对于每一个开发人员尽量让他一段时间内只做一件事。尤其是重要的模块一定要专人专事搞定。

5.负责人一定要把握开放的进度,遇到难题要组织迅速攻克。善于和其他团队沟通,互相帮助。

收尾阶段

基本代码开发完成后就是最后交付上线的阶段了,也就是最后冲刺。很多问题在这个时候也许就暴露出来了。

1.一定要给测试预留足够的时间测试,如果可以最好是在开发阶段就分配测试。这一也有足够的时间去修复bug。

2.开发完成之后要确认每个模块的状况,一定不要对一些隐藏的问题视而不见。很多时候开发者为了简单而去忽略一些自认为很小的问题,然而正是这些问题可能最后会引发大的问题。这种问题就要早发现早处理。

3.上线发布一定要积极有序的推进,设立明确的时间点。并要做好监控回滚的准备。不能冒进,也不能一拖再拖。

4.上线发布完成之后要做好清理工作。上线记录,代码 tag 。关闭老系统,检查各项监控参数等等。

温故而知新,可以为师也。