——“你无法在不改变他们状态的情况下观察一个开发者”

故事是这样的,数年以前我在一个颇具规模的项目里干活。一开始十分顺利,不懂技术的老板和一些用户给我们指个大方向,等我们做出来他们就来测试功能。该重构就重构,该整个抛弃就抛弃。不用事事找老板授权,只要功能按时完成,大家都happy。

接着遇到一个难搞定的用户,他要用软件来替代专业用户多年的经验和直觉,他提的需求不能再模糊了,必须在下一个版本就实现。我们说什么都没用。干了几个月什么也没做出来。

老板没办法,找来了一个看简历是顶级的项目经理。工作流程立马变了,我们开始使用Jira,每个功能都被细分到不超过一天的工作量,每两个星期开一次持续一天的会分配下一阶段任务。

奇怪的是,进度反而更慢了。计算好的项目交付时间还在往后拖。然后项目经理就开始做一件最常见的事:招人。

我们对招什么样的人没有发言权,新来的人明显有文化差异。当我们认为需要重构,或者抛弃功能时,他们就反对,说我们不干正事,项目经理支持他们。

我们变得士气不振,吵了几次以后,选择很简单:要么闭嘴干活,要么走人。我们最好的程序员走了。我学会了夸大工作量,让做什么就做什么,把想象力和创造力留给业余项目。

新来的同事没有几个享受软件开发,以前办公室里聊编程语言,现在聊汽车。而他们看起来很喜欢这种管理方式。有个人这么对我说:“你从待办事项找到下一项,搞定它,划勾,然后就再不用理了”。他们不用负责,不用作任何艰难的决定,不需要有大局观。

项目进度越来越慢,bug越来越多,队伍越来越大,却没见改善。公司花的钱越来越多,收益越来越少。

到底哪里出了问题?
在商业领域,细分式的软件项目管理很吸引人。每个机构都渴望事情尽在掌控之中:给开发者那么多薪水获得了什么回报,系统交付的时间多长,这样才能做出准确的成本效益分析,预测生意。

这完全误解了软件开发的本质。软件开发本身是一个创造性和实验性并存的过程。它本来就需要试错。无数研究表明有效的创造性工作需要交给专家自主完成。作为开发者我们需要尝试的自由,多试几次才能找到一个有效的。我们也说不清为什么要这样,很多都是直觉,而且其中有一部分是错的。

如果你问我开发一个功能需要多久,我只能老实说我真的不知道。我有一个大概的想法,但是没法确定。

一旦你问一个开发者告诉你接下来的8天他每天都要做什么,你就把大部分创造力和意外之喜谋杀了。

当然,对于那些喜欢工资多过编程艺术的人,微观管理会很有吸引力。你按时提交自己的任务,经理怎么说你就怎么做。如果用户不满意,系统bug一堆,也不关你的事,你的工作已经完成了。

细分式的管理直接导致人才流失。那些真正厉害的程序员会直接走人,他们不愁找不到工作。那些不喜欢做决定,喜欢找借口的人会流下来。你会发现你的队伍变得越来越会抱怨,但对你的每项指令都顺从的执行,对需求没任何意见,好好填写Jira表格,然后生产出质量极差的软件。

到底应该如何管理开发者?
简单:给他们自主权。设定一个大目标,让开发者来实现就行了。他们有时会失败,你对此需要留有余地。不要因为失败就增加干预。建设一个人人都有贡献、值得信赖的团队,而不是雇一屋子的被动消极的程序猿。

测不准的程序员(Heisenberg Developers)的更多相关文章

  1. LeetCode 到底怎么刷?GitHub 上多位大厂程序员亲测的高效刷题方式

    作者:HelloGitHub-小鱼干 在众多的诸如阿里.腾讯等大厂之中,最看中面试者刷题技能的大概要数有"链表厂"之称的字节跳动了.作为一个新晋大厂,字节跳动以高薪.技术大佬云集吸 ...

  2. 写给后端程序员的HTTP缓存原理介绍

    There are only two hard things in Computer Science: cache invalidation and naming things. -- Phil Ka ...

  3. [PHP]程序员技能栈

    [PHP]程序员技能栈.md-/Users/zjh/Documents/我的文章/[PHP]程序员技能栈 html{font-family: sans-serif;-ms-text-size-adju ...

  4. 南京都昌信息科技有限公司招聘C#程序员

    南京都昌信息科技有限公司招聘全职C#程序员 本公司核心产品为DCWriter电子病历文本编辑器,DCTimeLine时间轴软件等自研产品,现招聘全职C#程序员. 职位描述: 1.使用C#进行软件开发, ...

  5. 推荐!国外程序员整理的 PHP 资源大全

    推荐!国外程序员整理的 PHP 资源大全 2014/08/02 · PHP, 工具与资源 · 8.5K 阅读 · 1 评论· php 分享到:0 与<YII框架>不得不说的故事—安全篇 R ...

  6. 转:程序员最值得关注的10个C开源项目

    程序员最值得关注的10个C开源项目 1. Webbench Webbench 是一个在 linux 下使用的非常简单的网站压测工具.它使用 fork ()模拟多个客户端同时访问我们设定的 URL,测试 ...

  7. 程序员MM的自白:磨人小妖精之安卓碎片化

    文/腾讯优测 章婉霞 除了crash问题,Android平台的碎片化越来越受到移动开发的关注,且不谈支持Android系统的移动设备早已过万款,屏幕.品牌以及传感器等方面的碎片化问题也困扰着开发者. ...

  8. C/C++程序员面试易错题

    c部分::::::::::::::::::::::::::::::::::: . 关键字volatile有什么含意? 并给出三个不同的例 子. [参考答案]一个定义为volatile的变量是说这变量可 ...

  9. [闲谈] 有经验的程序员用Google用得多么?

    关于程序员有没有必要记一些API什么的讨论有很多,我个人觉得能Google到的就没必要刻意去记,可以简单的做个笔记,需要用的时候查一下就好了.真正有必要记的东西,用得多了自然也就能记住了. 文章不难, ...

随机推荐

  1. MFC下OpenGL入门(可以用)

    MFC下OpenGL入门 源文件 1, 建一工程文件,我这里命名为first,现在first工程里面我们没有添加任何东西,所有的东西都是MFC自动帮我们创建的. 2, 添加链接库.这一步很关键.打开菜 ...

  2. Rxjava的基本使用

    gradle配置: compile 'io.reactivex:rxjava:1.0.9' 观察者: Observer<String> observer = new Observer< ...

  3. 数据库SQL优化总结

    1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  4. Android之ScrollView嵌套ListView和GridView冲突

    由于ListView,GridView本身都继承于ScrollView,一旦在ScrollView中嵌套ScrollView, 在ScrollView中嵌套使用ListView或者GridView,L ...

  5. XSS跨站脚本小结

    XSS漏洞验证经常遇到一些过滤,如何进行有效验证和绕过过滤呢,这里小结一下常见的一些标签,如<a><img>等. 参考链接:http://www.jb51.net/tools/ ...

  6. iOS开发常见错误解决方法

    1.出现下面的错误: StoryboardApp[8593:207] Failed to instantiate the default view controller for UIMainStory ...

  7. SQL EXEC 命令用法

    EXEC命令有两个用法: 1.执行一个存储过程,或者执行一个动态批次. 2.批次是一个内容为SQL语句的字符串. 举列子: 1.exec name_proc :没有参数 exec name_proc ...

  8. 最小的N个和

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 有两个长度为 N 的序列 A 和 B,在 A 和 B 中各任取一个数可以得到 ...

  9. 补交作业-第八周PSP

    一.表格 C(分类) C(内容) S(开始时间) ST(结束时间) I(打断时间) △(净工作时间) 讨论 用户界面 9:30 10:40 15 55 编码 编码 13:20 16:30 10 180 ...

  10. Something you need to perform after RedHat 6.x installed

    Something you need to perform after RedHat 6.x installed YUM Repos % yum update % rpm -Uvh http://do ...