软件工程 之 动物世界
在一个神奇的国度里生活着许多动物, 其中有猪, 鸡, 和鹦鹉。
它们每天搞头脑风暴, 琢磨如何创业, 最后鹦鹉提议它们合伙开一个早餐店:
具体分工如下:
猪: 提供猪肉, 做熏猪肉 (bacon)
鸡: 提供鸡蛋, 做煎蛋
鹦鹉: 提供咨询, 它会每天阅读大量博客, 给其他团队成员提供建议, 例如最新业界趋势, 最新术语, SaaS, N-层架构, 创业明星当年的轶事, 等等。
这项创业对三个动物的负担是一样的么? 它们应该各自占多少股份? 一旦创业失败, 猪, 鸡, 和鹦鹉会各自失去什么?
在一个团队中, 不同的成员来自五湖四海, 为了一个共同的目的, 走到一起来了 (至少表面上是这样). 在一起吃饭的时候大家意气风发, 群情激奋,但是不同的人对于团队的承诺是不一样的 -
有些人是 猪 - 他们或者辞掉了工作, 投入创业中; 或者这一门软件工程课是他们的必修课, 他们一定要拿到高分, 才能提高自己的GPA, 申请到好学校。 对他们来说, 要想项目成功, 他们要拿出自己身上的肉, 背水一战; 一旦失败, 自己的老本也赔进去了. 他们的投入级别是 - 全身心投入 (committed).
有些人是 鸡 - 他们能做重要的贡献, 但是项目一旦失败, 他们的损失并不大, 他们的生活还可以继续下去。例子: 有些人周末来给项目帮忙, 平时自己上班; 或者是选修软件工程课; 或者他们已经保研, 只要这门课混及格就行。 他们的投入级别是 - 参与 (involved).
有些人是 鹦鹉 - 他们有漂亮的羽毛, 能说会道, 联系广泛, 能提出很多建议, 很多点子. 但是他们不执行, 除了一些人云亦云的观点和一些关于架构的空谈之外, 他们没有其他投入. 一旦项目失败, 他们就会飞到另一个项目中去。 他们的投入级别是 – 围观 (bystander).
一个人可以同时做很多事, 这些事情对每个人的轻重缓急各不相同, 有些事情只能业余帮一些忙, 这无可厚非。 加入一个团队时要弄清楚自己在团队中投入的级别是什么, 别人的期望值是什么. 不要拿着卖白菜的钱, 操那卖白粉的心 - 太不值得。 人可以在 n 个地方做鸡, 或者 n*m 个地方做鹦鹉, 但不可能在两个地方同时做猪, 这太难了, 很多牛人, 例如 Bill Gates 同学和 Mark Zukerberg 同学, 就只好在学业和事业中抛弃一个, 全身心地投入另一个。
同时, 把一件事情做成需要很多人的帮助, 创业者要不拘一格吸引人才。 但是我们也要分清楚团队成员的投入/承诺/责任是属于哪一个级别, 哪些是猪, 哪些是鸡, 哪些是鹦鹉。 一群猪全身心投入看似不错, 但无论多么努力, 猪没法下蛋。 一群鸡每天按时上班下班, 也许团队相处和谐但没有斗志。 最坏的情况是找到一群鹦鹉, 大家叽叽喳喳, 来回扑腾, 好不热闹。 但是最后大家做鸟兽散, 只落得一地鸟毛。
在竞技体育, 商业竞争中, 如果一个队伍的队员都是猪, 另一个队伍的队员都是鸡, 那谁胜谁负, 就很清楚了, 鹦鹉可以做拉拉队, 但是并不决定最后的胜负。
在企业中, 大家都是拿工资的人, 应该都是全身心投入的 “猪” 了吧? 那倒未必, 各人对一个具体项目的投入和负责程度还是很有区别的。 企业内不同的角色相互合作, 各有想法, 市场变化快, 应该听谁的呢? 是听那些在研发和市场第一线全心投入的 "猪", 还是坐办公室的“鸡”, 还是一些空降而来的 "鹦鹉"? 在软件企业培养新人, 是让他们对公司各项业务作高层次的点评, 写成漂亮的PPT (鹦鹉), 还是让他们坐办公室, 主管流程 (鸡), 还是把他们送到能听到炮声, 可能会流血的第一线 (猪)?
在遵循敏捷原则的团队里, 成员们并不忌讳谈论不同的投入和负责程度 - 因为这就是现实。 但是他们一般有一个原则:
重大决定由 “猪” 来定夺。
在官僚层次驱动的项目中, 往往有一些鹦鹉会控制流程的关卡, 鹦鹉虽然对项目具体情况不了解, 也很忙, 但是项目的一些决定非得由她们来做, 她们做完决定之后, 拍拍翅膀飞走了... 这的确是比较让人郁闷的事。
驱动和责任在项目管理中是很重要的因素。 有责任, 有投入, 有期待, 才有回报。 在 <现代软件工程>这门课中, 我也要求同学们在自己的团队中给每个成员决定一个 “团队贡献分”, 一般来说, 贡献和投入是很相关的。
复杂的合作模式和影评家
这些可爱的动物们也在别的项目管理书籍中以别的名目出现, 例如 《项目百态》 这本书提到了一个角色 - 影评家。 影评家不拍电影, 也没有演技, 但是他们对电影的一切都可以指手画脚, 而且可以不承担任何责任, 往往最高领导还挺容易受影评家的影响! 你在幸幸苦苦做项目的时候, 是否有一圈影评家在围观?
在进行一些跨部门合作的时候, 我们更要理清不同部门的权力, 责任和流程。 下面是一个比较通用的RASCI 模型:
R: Responsible, 负责把具体事情做好。
A: Accountable, 对任务负全责, 有批准的权力
S: Support, 对任务提供支持, 辅助任务的完成
C: Consulted, 咨询, 拥有完成项目所需的信息或能力的角色。
I: Informed, 知会者, 应该事后及时通知结果的角色。
当你的项目看到很多影评者的时候, 你不妨想想他们属于RASCI的哪一个角色, 然后依照相应的规范行事即可。
在一个流程漫长, 合作者众多的项目中, 项目的管理者要把每一个环节的RASCI 角色都列出来, 每个环节有且只有一个R.
练习: 请指出下图中的 RASCI 角色:
//注: 猪和鸡的故事在这里也有: