提高开发效率的几个协作理念
伴随着互联网的发展,软件开发的节奏越来越快,无论是不断拔高的对用户的重视程度,还是来自于同行业的竞争,都推动着开发思路和方法的不断演进,也改变着团队协作的面貌。瀑布、螺旋渐行渐远,迭代、敏捷才逐渐被广为接受,持续部署和交付又在前面招手了。这里并不想对它们展开比对,或者讨论一番优劣。在我的理解中这些开发模式都不是最重要的,无论哪种开发模式,都离不开人,每个人的思维方式决定了团队合作的效率和结果,而每个人的协作理念合在一起就是开发模式稳固的基石,正如本帮的Mauricio明确提出的“敏捷思维比Scrum更重要”。
本文想从一些实际开发中遇到的点出发,提供一些沟通和思维的方法,希望能够改变团队的效率,减少问题。
做产品的主人
因为团队职责的划分,PO/PM是容易被大家认为是产品的主人,是他或者她的项目,工程师只是实现一下而已。如果对产品没有归属意识,这是个很要命的问题。接下来就是责任心的缺失,各种懈怠和对立。这里希望PO/PM也能意识到这个问题,鼓励每个人对产品发声,一定程度的参与设计和讨论。
对开发来说,如果对产品没有理解,不能形成自己的体验见解,说明根本没吃透设计文档,只是按图索骥,小心画虎不成反类犬。对决策者来说吸收产品建议的确需要综合考量,但工程师并不笨,相反他们是最聪明的一帮人,我就不信整个产品里面连一个由工程师发起设计或者优化的点都没有。如果团队里有对产品理解深刻的工程师,请珍惜。
拥抱队友
拥抱你的队友,站在队方(不是错别字,的确不是对方)的立场思考问题。工程师可能经常会听到“不是吧,你竟然这么做了,我有个方法比你好XX倍!”或者是“你这么写有问题的,应该这样blablabla”,第一反应绝对是不爽到爆。很明显,除非团队里混进了竞争对手的内奸,那么大家都是一条绳上的蚂蚱。明确一点那就是除了你之外,其他人也都是希望产品好少出bug效率高。不妨先静心听一听队友的方法,如果合理,那两个人一起比较一下差别在哪里,如果自己的里面隐藏了一个很深的bug,那你得感谢你的队友;如果队友的方法只是效率更好,那么再评估一下修改的时间开销,问问负责的PM,看看把优化插在哪个节点比较好,然后代码里写个TODO注释,结束。程序员大多数不重视沟通方式,但技术牛掰加上一点点沟通技巧,那么恭喜你会立即脱颖而出!
这个问题可以这么说“昨天咱们做的那个模块,功能OK,就是效率稍低了一点,我又做了一个修正版,这里是测试运行效率的数据...不用谢了...请叫我雷锋”,对,是“咱们”不是“你”!
打破开发的职责边界
打破开发的职责边界,只需要多延伸一步而已。Richard Clayton在Failing at Microservices一文中提到了他的困惑,“服务由不同的人来负责,工程师开始抱怨服务A被服务B的任务挡住了。尽管服务和服务之间不会有编译时间依赖,但还是会抱怨。没有人去帮助服务B的工程师,或者是把与其他服务相关的任务从清单里分担掉,而是升起了他们所属服务的吊桥,就好像他们是城堡一样,然后就等着这一轮冲刺结束”。相信每个团队都会遇上这样的事,就连Debug也会听到推诿的声音,前端与后端联调时,先是测试者“前端显示不对哦”,然后是前端应声而起“不会吧,是后端协议数据给的不对吧”,后端也按奈不住了“另一个应用也在用这条协议,没有问题啊”。
工程师Debug有三重境界,第一重初级水平“找到并解决自己的模块的问题”,第二重高级水平“找到队友负责模块的问题并帮他解决”,第三重专家水平“设计一种方法,让以后再写类似模块的人不可能犯这样的错误”。
团队管理者应该鼓励工程师在搞定自己事情的前提下,发挥更大的作用,去帮助团队解决问题,本帮正是发扬这种超越自己职责的“狼性文化”,能延伸多少看个人能力,但哪怕只从自己的领地向外延伸一步,也会给团队合作带来巨大的改变,所以前面那种情况你听到应该会是:测试者“前端显示不对哦,但抓了包看可能是后端给的数据不对”,前端“另一个应用也用这条协议没问题,我去查一下配置”,策划“不用看了,我配的数值有问题,马上更新一版”,后端笑笑继续思考怎么改善体验。
活用结对
活用结对攻克问题,开拓思路,提高效率,降低学习成本。结对是敏捷最佳实践里面的一个小方法,但我并不认为他只属于敏捷,在某些关键时刻使用非常有效,比如开发非常精细的功能、复杂算法、寻找重现机制复杂的bug。
这时1+1的作用远大于2,结对的专注度更高,心情也更放松,好基友的效果不一定比鼓励师的效果差,不容易受狼蚁营销\邮件\电话的各种打断,结果就是代码质量高,生产速度快;俗话说3分开发7分测试,用在测试和bug修复的时间会少很多,把多投入一个人力的成本给追回来,更不用谈一些边际效应带来的成本。在debug非常难的问题上,当陷入困境,队友可以帮助查疑补缺开拓思路,甚至有时只需要把思路讲一遍给队友听,自己立刻就知道问题出在哪里了。结对的一个非常好的副作用就是降低学习成本,这个功能点你的好基友下次在你请假的时候也可以来维护。
从用户身上寻找信心和动力
加班和赶时间节点是大部分工程师反感和造成效率低下的事情,PO/PM非常清楚,如果不踩准这个节点,那么会导致XX天之后的某个版本不能按时交付,造成市场上一系列的被动局面。有一次为了踩准一个热点事件的推广,我们团队的工程师们连续作战16个小时,完全没有怨言,反而干劲十足。其实那是我们第一次做这样的应用,时间非常苛刻,从决定做开始,设计、美术、编码实现,测试部署上线只有1天时间,分摊到每个环节其实只有两三个小时,但竟然没有人质疑这样的决定。原因就是每个人都清楚,热点事件转瞬即逝,工作的成果将直接由用户来考评,这并不是PO/PM贴在墙上的冲刺清单。