分布式系统架构设计 – 第26式- 什么是工程化与如何做项目管理

前言

不同于科研可以专研的很深而无需转化成生产力,工程化是一套将项目转化成产品从而达成生产力目标的科学方法论。架构师是业务与技术、产品之前的桥梁,除了熟练掌握软件开发的本质、方法论、技能、工具还应该具备工程化能力与项目管理能力,即任务的分析,拆解,计划,执行,领导,管控与团队的组织与管理。

工程化

工程化就是任务拆解

任务拆解是个有拆有合的过程。一个大的工程任务往往是由很多的小个的任务组成的,如何将一个大任务拆解成合适的小任务,能将大任务拆解成什么样的小任务,能拆解到什么粒度,拆解是否准确,这是”拆“。怎样对任务进行量化与质化,怎么将任务落地到具体的执行人员上,这是“合”。任务拆解比较的考验工程人员的工程能力,任务拆解是否成功是工程进度与工程交付能否成功的关键要素之一。

工程化就是取舍

工程化是取舍的艺术,工程受限于已有的条件,需要做出适当的取舍,才能解决实际问题。资源都是有限的,项目开工之前先搞清资源与人员能力,然后制定人员调配策略与合理的进度安排,需要计划让哪些人员去处理哪些问题,也需要制定合理的资源调度策略,从而才能稳操胜券。

比如“田忌赛马”就是一个经典的人力与资源的调配故事,精明的项目管理人员在项目开工之前就能彻底的预判结果,告诉资源掌控者我缺啥需要啥,满足这些条件才有取胜可能,然后再采用合理的策略从而抵达目标获取胜利。不同的人员会制定不同的策略,这也是工程人员的能力差异所在。

工程化就是组织与沟通

一个工程往往需要几十、几百甚至几千、几万人协同工作为达成一个共同的目标而奋斗,因此,在工程中人员的组织、沟通协调也非常重要,合理的人放到合适的位置,才能发挥其能力从而高效的解决实际问题,同时工程也讲究文档化、标准化、流程化与规范化。

工程化就是进度安排

将任务进行拆解仅是工程化解决问题的一个步骤,任务拆解之后还要区别主要矛盾与次要矛盾,进行优先级排序与里程碑确定,需要从时间上进行合理的安排与调度,最终让每一个子任务之间做到有效的协同与交付。

项目管理是工程化的子集

工程化是以现有资源与技术为基础,通过加人员、技能、知识组合起来,短时间内快速解决实际的复杂问题的一种方法。软件工程是指将系统化、规范、可度量的方法应用于软件开发的过程以及软件的运行和维护,其包括两方面内容:软件开发和软件项目管理。因此,项目管理是工程化的子集。

项目管理

项目铁三角

项目铁三角指的是项目管理的四个重要方面,即:

  • 范围:需要做什么;

  • 时间:什么时间做完;

  • 成本:投入多少资源;

  • 质量:做到什么程度才算达标。

范围、成本、时间三者之间任何一个变动均会对其他两项产生影响,如下图所示:

image-20201227171818955

范围扩大(需求增加),做的事情多了,时间进度就需要延长,并且成本也会增加。如果做的事情多了而时间与成本投入又不变那么必然影响到质量。如果不打算减少所做的事情,就必然需要多投入成本(比如时间,人力),否者质量与范围又无法保证。范围、时间、成本之间的制约关系是必然存在的,但是也要依据实际情况而采取合适的方法,有的项目时间节点是固定的、有的质量要求严格、有的有固定的成本约束等,因此,需要根据情况进行合理的调整。

项目三重境

第一重,满足客户质量要求,这是项目管理的最基本的需求,在范围、时间、成本之间获取平衡是为了达到客户的质量要求;

第二重,满足业务的需求,项目管理人员需要懂业务,需要知道为什么需要做,什么是客户需要的,避免项目大方向的错误;

第三重,满足组织成员的需求,项目是由人实施的,其注入了人的精神与意志,因此也需要了解组织成员的需求,准确并且满足成员的需求,才能更好的推进项目。

项目拆解

道与法

架构师完成概要设计后就需要进行项目拆解,拆解的成功与否是项目能否按期交付的关键,在进行项目拆解的时候需要遵循以下的“一人二法三要素四角色”原则,

  • 一人: 项目是由人执行的,人是项目里最关键的要素,合适的任务要拆解到具体的合适的人员上;

  • 二法:量化与质化,任务拆解需要能量化(类似KPI,比如先赚它一个小目标:一个亿)有具体的时间、具体的数值,不能量化的需要质化(如同OKR,比如客户对这个质量感到满意,这个缺陷的修复方案QA已验证接受等,这个策略已经被客户所接受);

  • 三要素:即范围、时间、成本,在有限的成本、范围、时间约束下达成质量目标;

  • 四角色:即RACI角色: 谁负责(R = Responsible): 谁来干这活,谁批准(A = Accountable):谁说了算,咨询谁(C = Consulted):专家团,顾问是谁, 通知谁 (I =Informed):谁需要被通知到,谁需要知道这个进度与风险。

术与器

如何进行拆解,能拆解成什么样的任务,这也比较考验项目管理人员的专业技能,这属于”术” 的范畴,同时也可以借助合适的工具(器)编排拆解的任务与进度。

项目计划

1,项目计划的本质是项目执行人员的承诺,因此,不同于产品与项目制定人员比较看重的是项目的价值,执行人员通常会比较关注项目的资源投入、技术难度、技术实现、里程碑、奖罚等,因此对于计划都会比较的谨慎;

2,计划本身没有太大作用的,但是没有计划却万万不行,如同“天气预报”,没几次预报会准确,但是好处是有了计划就有了可预测性;

3,大的项目计划需要拆分成合理的里程碑,每个里程碑都能对应到一个最小可交付版本(MVP)用于进行市场验证(PMF);

4, 大方向与里程碑先保证正确,过程中进行小调整。

有时候计划的交付时间点是固定的,其由商业交付时间点反推,那么就需要在 “范围,成本与质量承诺”这三点上进行合理的取舍。

人员与组织

项目是由人完成的,了解团队成员的需求,满足TA所要的,这样具有保持团队稳定以及项目价值输出的可行性。

小结

本文从宏观角度概述了工程化与项目管理的差异,只会项目计划那是最初级的项目管理,更高级的项目管理是懂方法论,懂任务拆解,懂项目计划,懂业务、也懂人与组织等。在宏观上了解了工程化与项目管理,还需要微观上进行实践,手把手的操作过、练过、蹲过坑、吃过苦头才能叫做“实践出真知”。另作者能力与认知都有限,”我讲的,可能都是错的“,欢迎大家拍砖留念。

作者简介

常平,中科大硕,某AI独角兽深度学习首席软件工程师,前EMC 大数据资深首席工程师,主要工作背景在深度学习、流式大数据、云计算、分布式中间件以及Linux内核。

版权申明

本文的版权协议为 CC-BY-NC-ND license:https://creativecommons.org/licenses/by-nc-nd/3.0/deed.zh

在遵循署名、非商业使用(以获利为准)以及禁止演绎的前提下可以自由阅读、分享、转发、复制、分发等。

参考资料

[1] https://www.zhihu.com/question/26699139

[2] 《网易一千零一夜 - 互联网产品项目管理实战》 网易杭研项目管理部著