本文给新上岗的部分团队的模块架构师和项目经理提供一些实践指导。
大部分模块架构师和项目经理都是从开发团队的开发人员转岗的,甚至在刚开始的时候,他们都是兼职的,同时负责架构和开发,或者同时负责项目管理和开发。这导致很多新人总会把过去的工作习惯带到新的工作岗位上,这样是做不好这些工作的。
架构师和项目经理都是做“未来”工作,开发工程师做的是“现在”的工作。这是两个独立的工作,开发工程师的工作是“填坑”:少了一个功能,把这个功能做出来;发现一个Bug,把Bug修复;性能达不到,把它提升上来……这些问题都在眼前,问题不一定容易解决,但出不出问题很容易判断。
但架构师的工作不是这样的,架构师的工作是未来。某个特性现在根本没有人用,架构师要求做出来,做出来了,还是没有人用,但后面有人用,如果现在不做,到后面想做也做不了了(没有留下设计余地),这个架构考量就成功了。
想用证明开发工程师的作用的方法来证明架构师的作用是不行的!架构师的工作是挖坑,不是填坑。在没有坑的时候挖出(未来必然会发生的)坑来。系统启动,偶尔出现一次coredump,开发工程师在心理上会有意忽略它,因为大部分时候这个东西不影响使用。但架构师需要敏锐地捕获它,推演它背后意味着什么,会要求团队花大力气把这个Bug挖出来,因为开发阶段1%可能性的Bug,在上线的时候它的可能性就可能是100%。
我并非说架构师的工作就是这种把所有问题都要上升,上纲上线。这是个综合考量问题。我前面这个例子只是个例子。它说明架构师的工作为什么和普通工程师不一样。所以,架构师无法用表象来考评,只会上纲上线这个白痴都能干,不需要架构师。架构师需要知道什么时候需要上纲上线。所以,如果一个架构师天天都在输出,填了团队一个又一个的坑,但从来不挖坑,这个架构师肯定出问题了。但反过来,如果我们考评架构师挖了多少坑,这个架构师就算天天挖坑,他也肯定是个失败的架构师。
项目经理同理。架构师考量的是软件的发展问题,他眼中盯着的是那个软件的未来。项目经理看的是另一个维度,他看“计划”和“投资”的发展。怎么时间应该拿到什么资源,什么任务和人力应该开始动作,这个动作不能按期发出,后面的行为就要发生改变。所以,项目经理也是挖坑的,如果项目经理也是每天都说:“今天又完成了XX”,“这个月又完成了XX”。这个项目经理肯定出问题了。项目经理不是给团队报功的,项目经理是发现团队现在这样发展下去,在计划和投资上会掉哪个坑里的。
所以,开发工程师天然会掩盖问题,会向架构师和项目经理报告“坑已填平”的。而架构师和项目经理天然会暴露问题,向团队报告:我们这样下去,会掉XX坑里。
现实中,通常资深的工程师才会转岗为架构师和项目经理。所以,人们很容易把架构师和项目经理看做是“领导”和“汇报对象”。但从团队定义来说,架构师、项目经理只是团队中两个完成独立工作的角色。在精英团队中,基本上这些角色的地位是完全平等的。他们好比一群在同一条船上的人,有人负责看路,有人负责划桨,缺了谁都不行。所以,架构师和项目经理不是开发工程师的“升级”,但在很多情况下,他们值得尊敬,因为如果他们正确履行了他们的职责,那么他们就是放弃了“求礼”的机会(“这个代码是我写的”),为团队做出了贡献。
所以,初上岗的架构师和项目经理们,你们首先要准备好牺牲,而不是把这个作为一种荣耀。但这个世界,都是以其无私,所以成其私的。你放弃写代码的礼,收获的是另一层逻辑上的经验:这个系统这样搭建,它的效果将会是这样的。不要收益都放在你面前了,却弃如敝履。