零七年底上映了一步电影,起名‘集结号’,影片中强攻的真实感让人震撼,堪比好莱坞大片的画面给我留下了深刻印象,与此同时,场景中的协作和意志同样让人敬佩。
战斗中的一支队伍,人心不齐、协作不畅,是要丢命的。
软件开发团队同样如此,今时今日的软件开发已非当年个人英雄时期可比,节奏多变的市场对开发工作提出了更高的要求,如何增强团队战斗力,从而让个人和团队都从中获益,这应当是每个团队负责人都需要思考并不断实践的问题,以下是这几年形成的一些浅薄理解,从几个关键词来分析一下。
宁缺毋滥
人是团队的核心,团队的形成是从招聘环节开始的, 从筛选简历、面试、试用都是在为团队选择更合适的人。
技术最好的并非一定合适,也许有的人技术真的很好,但是说话做事的方式跟团队差异太大,无法形成有效的补充,技术差的并非一定不合适,也许是因为当时的水平或者环境限制,踏实肯干挖掘潜力也会成长为团队骨干。
招聘环节的宁缺毋滥,严格控制团队新鲜血液的加入质量,将为团队的成长打下良好基础,也是对面试者负责任,避免进入团队以后的各种不适应。
开放氛围
这方面我很幸运,大学毕业后经历了两家公司,氛围都很开放,程序员的工作特点决定了开放氛围的重要性。
优秀的程序员需要一定的自由度,程序设计并非全是机械性的工作,自由度对于挖掘智慧是很有帮助的,你不能像赶鸭子上架一样的跟在程序员屁股后面催他做这个做那个,一个团队在面临一件事情时,单方面的安排和接受事务效率很容易提不上去,而发挥群体智慧,每个人主动的给出自己的见解,发挥出热情和智慧的力量才能具备强大的生产力。
团队的开放性也决定了技术互补和资源共享的价值积累,每个人都有自己擅长的技术路线,也有自己解决问题的不同角度,如果一个团队的所有成员都能够贡献自己的力量,乐于分享和帮助别人,这个团队的价值是放大的,每个人自然也将吸收别人的优点,于个人于团队都是受益的。
技术结构
都看过《速度与激情》吧,他们在合作中每个人都发挥出自己的特长,有电脑专家负责获取信息、狙击手负责远程场控、美女负责迷惑对手、赛车手负责赢得比赛,配合的天衣无缝,战无不胜。
甚至盗窃团伙都是有明确分工的,谁负责望风、谁负责下手、谁负责转移赃物,这个是利润驱使下形成的有效分工,某种程度上实践出真知的力证。
具体到软件开发过程,乃至现如今的敏捷开发,也是需要明确分工的,PO负责定义好需求,Master负责协调任务和观察优化团队作业流程,开发负责提交符合需求的功能集合,测试负责对提交物进行验收等等。
我们所从事的开发性工作,大致可以分为前端和后端,当然也有前后端通吃的JS,你的团队里面谁是后端的权威,前端的工作交给谁最放心,数据库设计交给谁最靠谱儿,这些都需要有准备,只有这些结构性的分工准备好了,在大项目来临之际才能抓住机会。
同时,技术结构的更新也很重要,抱着一个框架吃五年已经不灵了。
工具
现在我们准备好人了,也形成了一定的技术结构,能够在宽松的环境中做事儿了,那么一个项目接到手了,怎么去具体实施,怎么保证交付呢?
我们需要工具,人类发展的最大推进力就是工具,我们借助工具实现了结绳记事,借助电话跨越了时间障碍,借助飞机跨越了空间障碍,依赖于工具人类的发展才飞速前进。
工具应该成为项目管理的标配,根据不同的项目选择不同的工具,让工具推动项目的前进,通过搭配工具来进行有效的协作已然成为软件开发的标配,这一点国内的发展仍然是滞后的,在面试中经常遇到说项目管理工具就是SVN的。
最基本的工具有两个,任务管理工具和代码版本管理工具,所有的产品功能、问题列表都应该划分到具体的任务中,抛弃掉人的记忆吧,那是个不靠谱儿的玩意儿。而代码管理工具可以从容的进行代码变更和服务器部署,再也不要被FTP上传文件耽误了一杯咖啡的时间。
工具也是用来解决复杂度问题的,一个中大型的项目,功能模块都是可以划分优先级和不同阶段的,每个功能在每个阶段的实现度,靠大脑是很难想象出来的,通过二维的表格或者好的story mapping就能很好解决好这个问题,不适用工具,很难想象windows这种大型系统如何开发出来,有兴趣的可以翻阅人月神话关于开发协作的章节。
精神
精神这个放到最后不代表不重要,一个良好的团队必定是积极乐观的,沉默或者消极都是下坡路的开始。
前两年跟一位澳洲的程序员合作,他跟我说了很多次happy coding,这不仅应当是工作的情绪,更代表了一种态度,乐观的看待遇到的问题,积极寻找更多的思路和方式去尝试解决。
想明白工作与个人之间的关系,工作是一种对自己的尊重,不求有日本匠人的精神,至少能积极处理工作,严谨对待波折。消极敷衍是对生命的最大浪费。
是的,最后仍然是个硬广,我们还在寻找优秀的PHP开发和前端开发的小伙伴,欢迎推荐。
翁玉礼
2016年11月25日
公众号