测不准的程序员(Heisenberg Developers)
故事是这样的,数年以前我在一个颇具规模的项目里干活。一开始十分顺利,不懂技术的老板和一些用户给我们指个大方向,等我们做出来他们就来测试功能。该重构就重构,该整个抛弃就抛弃。不用事事找老板授权,只要功能按时完成,大家都happy。
接着遇到一个难搞定的用户,他要用软件来替代专业用户多年的经验和直觉,他提的需求不能再模糊了,必须在下一个版本就实现。我们说什么都没用。干了几个月什么也没做出来。
老板没办法,找来了一个看简历是顶级的项目经理。工作流程立马变了,我们开始使用Jira,每个功能都被细分到不超过一天的工作量,每两个星期开一次持续一天的会分配下一阶段任务。
奇怪的是,进度反而更慢了。计算好的项目交付时间还在往后拖。然后项目经理就开始做一件最常见的事:招人。
我们对招什么样的人没有发言权,新来的人明显有文化差异。当我们认为需要重构,或者抛弃功能时,他们就反对,说我们不干正事,项目经理支持他们。
我们变得士气不振,吵了几次以后,选择很简单:要么闭嘴干活,要么走人。我们最好的程序员走了。我学会了夸大工作量,让做什么就做什么,把想象力和创造力留给业余项目。
新来的同事没有几个享受软件开发,以前办公室里聊编程语言,现在聊汽车。而他们看起来很喜欢这种管理方式。有个人这么对我说:“你从待办事项找到下一项,搞定它,划勾,然后就再不用理了”。他们不用负责,不用作任何艰难的决定,不需要有大局观。
项目进度越来越慢,bug越来越多,队伍越来越大,却没见改善。公司花的钱越来越多,收益越来越少。
到底哪里出了问题?
在商业领域,细分式的软件项目管理很吸引人。每个机构都渴望事情尽在掌控之中:给开发者那么多薪水获得了什么回报,系统交付的时间多长,这样才能做出准确的成本效益分析,预测生意。
这完全误解了软件开发的本质。软件开发本身是一个创造性和实验性并存的过程。它本来就需要试错。无数研究表明有效的创造性工作需要交给专家自主完成。作为开发者我们需要尝试的自由,多试几次才能找到一个有效的。我们也说不清为什么要这样,很多都是直觉,而且其中有一部分是错的。
如果你问我开发一个功能需要多久,我只能老实说我真的不知道。我有一个大概的想法,但是没法确定。
一旦你问一个开发者告诉你接下来的8天他每天都要做什么,你就把大部分创造力和意外之喜谋杀了。
当然,对于那些喜欢工资多过编程艺术的人,微观管理会很有吸引力。你按时提交自己的任务,经理怎么说你就怎么做。如果用户不满意,系统bug一堆,也不关你的事,你的工作已经完成了。
细分式的管理直接导致人才流失。那些真正厉害的程序员会直接走人,他们不愁找不到工作。那些不喜欢做决定,喜欢找借口的人会流下来。你会发现你的队伍变得越来越会抱怨,但对你的每项指令都顺从的执行,对需求没任何意见,好好填写Jira表格,然后生产出质量极差的软件。
到底应该如何管理开发者?
简单:给他们自主权。设定一个大目标,让开发者来实现就行了。他们有时会失败,你对此需要留有余地。不要因为失败就增加干预。建设一个人人都有贡献、值得信赖的团队,而不是雇一屋子的被动消极的程序猿。
测不准的程序员(Heisenberg Developers)的更多相关文章
- LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式
作者:HelloGitHub-小鱼干 在众多的诸如阿里.腾讯等大厂之中,最看中面试者刷题技能的大概要数有"链表厂"之称的字节跳动了.作为一个新晋大厂,字节跳动以高薪.技术大佬云集吸 ...
- 写给后端程序员的HTTP缓存原理介绍
There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Ka ...
- [PHP]程序员技能栈
[PHP]程序员技能栈.md-/Users/zjh/Documents/我的文章/[PHP]程序员技能栈 html{font-family: sans-serif;-ms-text-size-adju ...
- 南京都昌信息科技有限公司招聘C#程序员
南京都昌信息科技有限公司招聘全职C#程序员 本公司核心产品为DCWriter电子病历文本编辑器,DCTimeLine时间轴软件等自研产品,现招聘全职C#程序员. 职位描述: 1.使用C#进行软件开发, ...
- 推荐!国外程序员整理的 PHP 资源大全
推荐!国外程序员整理的 PHP 资源大全 2014/08/02 · PHP, 工具与资源 · 8.5K 阅读 · 1 评论· php 分享到:0 与<YII框架>不得不说的故事—安全篇 R ...
- 转:程序员最值得关注的10个C开源项目
程序员最值得关注的10个C开源项目 1. Webbench Webbench 是一个在 linux 下使用的非常简单的网站压测工具.它使用 fork ()模拟多个客户端同时访问我们设定的 URL,测试 ...
- 程序员MM的自白:磨人小妖精之安卓碎片化
文/腾讯优测 章婉霞 除了crash问题,Android平台的碎片化越来越受到移动开发的关注,且不谈支持Android系统的移动设备早已过万款,屏幕.品牌以及传感器等方面的碎片化问题也困扰着开发者. ...
- C/C++程序员面试易错题
c部分::::::::::::::::::::::::::::::::::: . 关键字volatile有什么含意? 并给出三个不同的例 子. [参考答案]一个定义为volatile的变量是说这变量可 ...
- [闲谈] 有经验的程序员用Google用得多么?
关于程序员有没有必要记一些API什么的讨论有很多,我个人觉得能Google到的就没必要刻意去记,可以简单的做个笔记,需要用的时候查一下就好了.真正有必要记的东西,用得多了自然也就能记住了. 文章不难, ...
随机推荐
- public/private/protected访问控制权限的区别
//public/private/protected访问控制权限的区别//时间:2016/8/16 //(一)修饰成员: //public: 在类内.类外都能使用 . //protected: 在类内 ...
- github最简单的操作方法
其实,说实话,到目前为止,我还没有研究透那些gitbush上面的命令,所以,往github上面上传自己的文件,我采用最简单的操作方式.嘻嘻.下面,将为大家讲述一下. 首先,要在github上面注册新用 ...
- MyEclipse XFire Web Service
我们在做系统集成时,经常会需要调用webservice接口,本文将讲解在myeclipse中建立一个webservice项目,编写接口和实现类, 并且发布webservice,最后在myeclipse ...
- Oracle笔记2-数据库设计
数据库的设计 软件开发的流程:立项->需求分析->概要设计->详细设计->实现->测试->交付->维护 [含数据库设计] 通过需求分析,就可以抽取出关键业务中 ...
- Android下载更新代码
其实是昨天反编译一个apk,给它添加一个自动更新的功能用到的.为了在smali下方便查看,代码写的不规范,反正到了smali都一个吊样~~~~ 权限: <uses-permission andr ...
- WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION 图片上传
CKEDITOR 编辑器 图片上传 WINDOW.PARENT.CKEDITOR.TOOLS.CALLFUNCTION (CKEditorFuncNum,图片路径,返回信息); CKEditor ...
- 怎么使用jquery阻止页面的离开或卸载
//绑定beforeunload事件$(window).bind('beforeunload',function(){return '您输入的内容尚未保存,确定离开此页面吗?';});//解除绑定,一 ...
- 暑假前的flag
暑假到了,为了简便新开了一个博客,供暑假刷体放一些题解,玩acm1年多了,cf还是蓝名,真是菜的一笔,明年就大三了,马上就要毕业了,然而还是啥也不会,兼职和智障没什么两样,当初大一吹的牛逼说要成为学校 ...
- 数论 UVA 10791
这道题目是关于满足同意最小公倍数的所有数对中两数之和的最小值. 题目大意是给你一个数n,要求你求出在所有以n为最小公倍数的数对中两数之和的最小值. 方法:将n进行质因数分解,再将所有分解出的质因子加起 ...
- svn:cleanup failed previous operation has not finished; run cleanup if it was interrupted
svn:cleanup failed previous operation has not finished; run cleanup if it was interrupted 今天 大脑一时短路 ...