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

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

    给图像使用map标签,可以给图像的某个部分建立超连接 一般情况下用在图片上,如:<img src="Images/banner.gif" width="780&qu ...

  2. Sqlserver 函数(例子)

    --SQL SERVER 2008 函数大全/*author:TracyLeecsdncount:Travylee*/ /*一.字符串函数:1.ascii(字符串表达式)   返回字符串中最右侧字符的 ...

  3. AngularJS + Java---前台网页与后台数据库传递数据 基本结构

    第一个关于这两种语言的项目,以下只是我自己的理解,欢迎指教:) 基本对应关系 1. controller .jsp(.html)  ng-controller="controllerTest ...

  4. Linux测试环境部署jdk(一)

    安装配置JDK yum install -y lrzsz  安装rz,方便xshell上传下载文件 Jdk: jdk-6u1-linux-i586 Tomcat: apache-tomcat-7.0. ...

  5. NFS文件系统制作

    内核:              linux-3.0 u-boot:          2010.09 开发板:         fl2440(s3c2440主芯片) 交叉编译器:   2011.11 ...

  6. vnc--centos 7 安装和配置

    安装步骤: 1.首先试试服务器装了 VNC 没 rpm -q tigervnc tigervnc-server 没安装的话会直接出现package tigervnc is not installedp ...

  7. 改进:js修改iOS微信浏览器的title

    问题简介 前端入门没多久,可能连入门也不算,最近网上流行各自书籍改名,什么<前端开发,从入门到放弃>,<Android开发,从入门到改行>之类的,程序员真是个爱自嘲的群体,但我 ...

  8. MYCAT介绍(转)

    从定义和分类来看,它是一个开源的分布式数据库系统,是一个实现了MySQL协议的服务器,前端用户可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问,而其后端可以用MySQL原生协议与多个M ...

  9. 多种姿势破解centos OR readhat enterprises 7.X root密码

    NO:1 启动系统,在grub界面按"e"键,进入编辑模式,找到以"linux16"开始的行,在行尾加入"rd.break",按" ...

  10. IOS开发--自定义segment控件,方便自定义样式

    系统的segment控件太封闭,想换个颜色加个背景太难了,忍不住自己写一个,以备不时之需 这个控件给出了很多自定义属性的设置,用起来还是比较方便的,需要注意的 itemWidth如果不设置,则会按照控 ...