程序员都不喜欢做项目管理

《技术为径:带领公司走向卓越的工程师》–管理项目

制定一份项目计划,需要搞清楚各部分之间的相互依赖关系。所有依赖关系都必须详加考虑,一个一个地反复讨论每个子任务的描述信息、时间安排、以及如何拆分。

领导能帮助我解决一些问题,但是更多的问题需要我自己去解决。

我一点都不喜欢这样的工作。这种体验给我留下了极为深刻的印象。我清晰地记得自己对任何一点疏忽的恐惧,对计划中的任何一点不确定性的反复斟酌。

而这一切都是为了制订一份能让领导看上的计划表。接下来我们又需要将这份计划表转化为可以展示给公司管理层的格式,说服他们接受这一计划。感觉自己简直要烦死了。但是,这也是我职业我生涯中最重要的学习经历。

现在都是敏捷开发,是不是不再需要项目管理了?

敏捷开发只是一种拆分工作的好方式,它让你将注意力集中在小型目标上,从而不停地持续交付这些目标。

但是,这不能取代项目管理。大型项目不可能在一个或两个冲刺周期内完成。你还需要向管理层预估项目的完成时间,同时附带对项目所需时间的解释信息。

另外,某些项目,比如基础设施项目、平台项目、系统设计项目,通常需要详细的系统设计,或者非常超前的项目计划。

在面对这样的项目时,存在大量的未知信息和刚性很强的时间节点,敏捷模式根本不适用。

随着职业生涯的不断进步,学会如何将超出个人能力的复杂项目进行拆分是不可或缺的。

对于一个时间周期很长、多人参加的项目进行项目管理,并不是每个人都会喜欢的工作。

这项工作过于烦琐,同时还有点可怕。我喜欢构建系统、交付功能,而不太喜欢每天思考一个细节模糊的系统如何进行拆分。

同时,我很怕自己在项目计划中某个疏忽导致项目最终失败。但是,如果我不亲自参与的话,项目也不会自己完成,而且有很大概率会浪费大家的更多时间。

项目管理不能事无巨细地进行,这一点很多组织都意识不到。

不要招专门的项目经理,因为他们往往会成为工程师推卸责任的“挡箭牌”,而非一起合作的的伙伴。专门的项目经理往往导致项目以瀑布流的方式进行,而非采用敏捷的方式推进。然而,一定程度的项目管理是不可避免的,技术小组长对技术性强的项目应该根据需要进行合理的项目计划。

于项目提前规划的意义并不在于你是否事先想到了每一个细节,对未来考虑得是否周全,或者项目进度是否完美推进。

其真正的意义在于,制订项目计划这个过程强迫工程师在动手实干之前,先对项目进行一些深度考量。

++制订项目计划的真正目标在于,推动工程师在合适的进行合理的预测,并制订针对意外的应对计划。++

至于这个计划到底有多么准确,并不一定真的那么重要。

我们提前确定了想要达成的目标,同时也提前识别出一些可能导致项目失败的问题,并且为此提前做了准备。

项目管理,让每个人认真地花时间去面对这些非技术性、无法提前预测的难题。这些困难的工作帮助每个人完成自己的复杂项目,并且帮助成长。让每个人都能带领更大的团队,更好地拆分任务,以构建更复杂的系统。

作为技术人员,我们往往假设管理层十分这解我们的所做所想。“有问题就看看代码吧”作为技术领域内沉浸多年的技术人员,我们很容易假设别人和我们一样对这些问题了如指掌。

但是,这是错误的。技术管理者竭尽全力地去招募精兵良将,是为了让这些人才来解决非常棘手的技术问题的。但是,这不意味着技术管理者全知全能。在我的职业生涯中,每次我们向一些非常资深的技术管理者耐心解释诸如“NoSQL是什么”这种问题时,他们都很由衷地感激我。

现在,我一点都不觉得向其他人(不论他们是资深经理,还是新人)介绍基础技术概念及相关技术的优势对比是浪费自己的时间。

如果以平等的方式与他们进行对话,他们就会慢慢地培养起对我的建议和决策能力的信任,而这终将有利于推动我想推动的变革。花时间向别人解释自己的想法是非常重要和值得的。

公众号:码农戏码
欢迎关注微信公众号『码农戏码』