技术和管理的5个原则
回顾个人经历,在所有做过的工作中,技术团队管理可能不是最难的,但绝对应该算是最棘手的。不敢说是这一领域的专家,但是我有足够多的把事情搞砸的经验,本文本着从错误中学习提高的态度来看待这个问题,我可以share一下自己的教训。
你说了算不代表一切尽在掌握
管理上很有讽刺行的一个点是你的位置越高,你的实际控制力越弱. 如果你是一个程序员,你可以任意摆布你手里的代码; 在管理位置上你只能希望你的人能明白你的想法,而且信(qi)任(dao)他们能够保质保量的完成。
有开发背景的管理者,特别是参与团队开发的情况下,总会有一种抑制不住的冲动:让技术团队按照自己的方式来做事情. “让我来的话,我会这么做”和“你现在的做法是错的,需要重构、重写”等等说法很多时候有道理,但是你应该学会影响力和实际控制力的权衡。更多的从知识分享、做事态度方法的角度,帮助成员快速成长。
非技术背景的管理者因为不了解开发流程和各处的坑,天然控制力就比较小。我了解的优秀的非技术背景的管理人员,都能从客户/执行/管理的角度带来更多的价值,而且他们的一个特点是都放弃了对技术管理’控制‘的幻想,很多技术团队的管理都倾向于把自己看成个统兵百万的将军,其实更多时候我们只是个暴风中船只的领航员。真正起作用的是每个船员的努力。
看待敏捷和流程
敏捷是一个用烂了的词,太多时候已经成为无效管理的借口,来榨取团队的时间和精力。
敏捷宣言里面提到‘重视人之间的互动甚于工具和流程’,‘直面改变,不拘流程‘. 开篇的四个原则:
Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan
参加过敏捷培训,而且拿到过xx认证scrum master,有几人学到精髓?
下面是几个让人精神分裂的事实:
最好的团队每天从一个站会开始,最差的团队也是;
有人说要像创业公司一样做最小功能集的产品,也有人说要设计为王,设计一定要触达用户前做到尽善尽美;
面对面的交流,思想随机碰撞很高效,分布在世界各地100%远程工作的团队也能做出成功的产品;
到底怎么做是正确的?答案永远是:要看具体情况!
不我绝对不是说我们不需要流程。流程要有弹性,需要适合团队特质和项目环境。
敏捷的本质应该是高效,最大程度上克服自己和团队的惰性;每个人都是有拖延症,每个人都有推诿责任的本能,我们的行为,基本都遵循Lindy法则,你拖的越久,就会更久的拖下去;得动起来,流程应该驱动我们,好比海中的鲨鱼需要一直游动,不动就会死掉。
管理的本职工作
技术管理要不断探索的过程就就是寻找这条最优的路径,不断寻找阻碍效率的因素,很多时候,这意味着找到团队最不喜欢作工作,并把这部分工作承担下来。
开发者不喜欢写文档,所以写文档是你的工作;测试很重要,但是很少有程序员喜欢写测试,所以写测试也是你的工作。不是说所有的这些工都是你来写(你也没这个本事),但是要带头,比如做好文档模版,写好例子,写足够的可以作为参照的测试代码。如果你不是一个技术背景的领导者,带开发团队起码的原则是了解怎么去有有效的测试,哪怕是要去学会写用例。如果你觉得质量保障是其他人的工作,不在管理的范畴之内,你不是一个合格的技术管理者。
权衡、决策也是技术管理的重要组成。如果有人提出来,说现在的项目结构一团糟,我们得重构把事情做对,交付时间的拖后。权衡是门艺术,一方面要不断清偿技术债,给出技术前进的信心和方向;另一方面,要控制度,凯恩斯说:“从长远来说,我们都死了”,受益要在可期的未来,而不是很久很久以后。
人性,从来都是最重要的内容
很不幸,作为人类(Homo sapiens)的一员,我们也不得不承认,我族挺差劲的。我们会搞砸事情,会自找麻烦,会无故消失,会丧失信心。这一切不是因为什么没有做好,仅仅是因为大家都是人。你是技术领导的情况下,所有这些问题都会是你的问题,他搞砸了就是你搞砸了。要习惯这一 切。能做的就是对这些事情有直觉的预感,并且做出准备。
找到好的人真的真的真的很重要,至少比‘管理’重要。
另一方面,人也有神奇的一面。如果大家信任你,团队能爆发出惊人的战力。
我判断一个管理者是否成功很简单:他说话的时候,别人不把他当成一个傻逼。在这个浮躁的世界,每个人天然都带一个傻逼过滤器,在团队成员之间, 如果这个过滤器默认关闭的,作为管理者,基本就及格了。
认清事实:技术管理很大程度上是在做翻译
把项目/产品的大图景传达给技术团队,把技术团队不是直观可见的输出翻译给客户/管理/用户;或者更重要的一点,把项目中的挫折、错误、障碍正确的传达给客户/用户/管理者。和所有的翻译者一样,对翻译内容要有深入的理解和把握,甚者熟悉程度要甚于作者本人,要理解作者的‘微言大义,弦外之音’。
如同所有的译者一样,荣耀和名誉归于作者,客户拿到是最终的造物,程序员拥有代码。看到一个漂亮的孩子,没人会夸产科医生。
控制力和影响力是管理的两面,程序员有更多控制权,管理者有更大的影响力。
我族存续之久,以至于都诞生了(pruduct Homo sapiens)/(programmer Homo sapiens)的细分类😂
Long Live Homo sapiens!