本文来自 Quora 的一个问答贴《如何激发程序员自愿加班/工作更长时间?》
在经历了数次创业以后,我对于某些总监公开表现出的对程序员不屑一顾的态度,但同时又希望程序员能为他们加班的行为表示无法接受,我多次听到过这样的言论,“我真想把开发员锁在一间屋子里,从门下面塞披萨给他们,等一个月后我就能拿到想要的软件啦”。想想吧,你所要的产品正是出自被你认为是下等人的、你从未想到要激励过的程序员之手。
我曾经在一家公司担任开发部门的VP,一位新任的CEO命令我让开发人员加班。当我问及缘由时,这位新CEO说道:加班是开发员应该做的。我试图从CEO那里得到些公司的愿景计划,以用目标驱动的方式来激励早已被发布折磨得精疲力尽的开发员加班,比如是否有一个销售前景很好的需求?又或者我们遇到了强劲的竞争对手需要我们迎头而上,或者我们的产品出现了缺陷需要开发员挑灯夜战?然而我得到的回答却是,不,没有。这位CEO仅仅认为,加班是开发人员的宿命。开发人员当然不是傻子,他们能分得清哪些是有意义的加班,哪是来自斤斤计较的CEO的主观意愿。
所以我对待这个问题的态度十分明显。想要获得为时几个小时的加班所换来的是开发者的流失。即使你有充分的要不得不加班的理由,也请让开发人员简单明了的知晓。我见到过开发人员为了保证一项关键功能的按时上线、为了准备一个大型的交易展示、为公司所做出的杰出的工作。所以,认为请给加班一个正当的理由,请不要一厢情愿地为了压榨开发人员而强迫他们加班。
有争议的是,如果我们将‘开发人员’换做‘销售人员’的话,这个问题是否还成立。如何削减销售人员的人力成本?如何让销售人员一周工作七天?如何让销售人员唯公司的利益至上?我对销售VP的打击士气的做法有着深刻的体会。在对我的团队的超过预期的杰出工作表现表示感谢之后,他接着说,我在赶往夏威夷的途中特意赶来为你们在工作上的努力表示感谢,90%以上的销售员不仅完成了最低的销售指标,而且年销售目标也是指日可待。他们用自己的方式全年无休的在Maui岛上工作着。感谢你们的辛苦付出。他的做法能激励开发人员加班才怪。
你的提问方式有问题,想要开发人员加班的做法是愚蠢的。Boss们真是想要的是多快好省的开发软件。如果开发人员正在挖坑的话,那我我们不得不另外花费几周的时间来填补在几个小时的加班时间中所挖的坑。但是对于软件来说,我认为这是不成立的,为什么这么说,请看‘生产性法则’ 的详细描述。所以请指出的什么是Boss们真正想要的、并能帮开发人员理解问题的原因所在。如果想要训诫开发人员,请对他们关心的事情提供支持,比如…,如果想要提高持久战的效率,请协助开发人员人员越过障碍轻装上阵,如果想得到优质的软件,请帮助开发人员了解使用软件的用户,了解软件是将要如何使用的。
开一家公司, 为开发人员提供诱人的股份,提供丰盛的一日三餐,提供带有桌球、乒乓球、电玩(小蜜蜂和大金刚是必须的,“时间危机III”就算了,实在是太烂了)的休息室,提供托儿所,提供医疗福利,为员工上下班提供安保措施,提供免费的咖啡,苏打水和健康小吃,提供足够的白板,电脑电源,订购高水准的报刊杂志供 UI 开发人员参考。这样就完成目标的25%。接下来,告诉员工,他们可以在任何时候,以他们自己的方式,自由地组织,用他们觉得舒服的方式来完成工作,这样你就完成了50%。完成上述事项,然后每个季度出手阔绰地在当地有名的娱乐场所让你的开发人员呼朋唤友的聚一聚。这样你就完成了75%。接下来要提供一两桶kegerator生鲜啤酒,以及关于在工作时间饮酒“不要问,不要说的政策”,这样就完成了99%。要达到100%,你还要为N个离婚埋单(N为你想要的员工数量)。免责声明:我曾在两家创业公司工作过,在经历了无数个长达80个小时的加班(包括这个周日的早上)后的一个礼拜天的早上,在我接到我老婆的三通电话以后,我最终决定把这个该死的问题留到周一再解决吧。就在这天的中午,我接到call并被老板诘问,“你是不是不想干了,如果是的话,我好找人手顶替你…”。
只需要向开发人员说明,他们的工作绩效的衡量标准是努力的工作表现,而并非是优异的工作质量。然后优秀的开发人员会离职,然后留下比较差的开发人员来收拾烂摊子,然后在两个月以后你会发现你的代码库将会变为垃圾,搞定。
与大多数人的观点相反,大多数程序员有自己的家庭,朋友,子女和社交活动。我们不需要‘驱动’来工作更长的时间,我们需要管理人员给我们清晰、简洁、便于理解的工作说明(我相信管理人员能做到以上三点),并以此为基础来向我们开发人员询问开发的预估时间(因为如果你不这样做的话,将无法获得每行代码所有花费的确切时间),从而制定一个安全理性的预期。‘这将要花费120个人时左右’的回答并不意味着‘我们实际需要花费100个人时,如果你把这个数字砍到80个人时的话,剩下的40个人时对你来说就是免费的,我们只能用带薪加班的方式来完成剩余的工作’软件开发的时间成本不能像其他的商品一样讨价还价,我们也没有无聊到找不到比免费加班更有趣的事情做。上述不是愤怒的、郁闷的吐槽;我所供职的公司为我提供了上述的一切,结果是我们按时、按预算完成了项目,并且让花钱的用户感到物有所值,而并非是强势销售人员所想象的用户将会很乐意的埋单。这个问题令我感到不快。
在搞什么?特么的在搞什么啊?程序员已经在洗澡,驾车上班的途中,有时在睡梦中都在思考工作。你和你的开发人员签订了合同,一个合法的民事法律条文。在双方正式在合同上签字以前就已经存在了口头上的承诺和一定的预期。如果想要变更合同的话,从法律和道德的角度上来说,需要重新协商雇佣合同。程序员理所当然的想要得到等多的报酬,如果你想要他们加班的话可能还需要再付多一点。(事先你最好确认一下这样的劳动合同是否符合你所在地的法律,当地的法律是否强制发给员工付加班费)。
请注意以下几点:
(1) 大多数人在经历了一天为时八小时的集中精力的工作后都会感到疲惫。在一天的工作中我们可能会碰壁,实际上整天都在做无用功。更糟糕的是我们开始做出了错误的决定。你真的想让他们在最后的两个小时中搞定一天中的工作?
(2) 如果没有提供好的机器、大的显示器、快速的硬盘,高速的网络和一个安静的,没有电话,没有会议,没有形式主义、朝令夕改、繁文缛节的环境,那么很多程序员的工作时间实际上都被浪费掉了,很多开发人员的工作效率会降低。我曾工作过的地方,哪怕管理层知道一点点,那效率几乎能翻两番。有必要每周开两次会议用来讨论“我们delay了”么?
所以在号召大家加班之前,请检讨是否能设法提高开发人员的效率。如果你向开发人员询问的话你会大吃一惊,如果你采纳了他们的建议的话,结果会令你更加吃惊。
你可以在销售上说我们有硬性指标,但你不能对没有认可的事情做出承诺。我曾在这样的公司工作过,这里的销售人员常说我们的程序员可以在下周交出任何你想要的程序。
可能你在向开发人员要一个日程表时会有自己的底线,但你实际上采用了开发人员提供的时间表。很多公司的高级管理层会武断地砍掉1/3到1/2的开发时间,然后设法让项目按时上线。
不论何时, 就像你发现金子一样,软件在交付时意味着可以使用。不能拔苗助长,只能顺其自然。就在上个星期我不得不花额外的一天时间用来整理预期之外的、没能正常工作的、糟乱的代码。另外的半天加班时间花费了在一个近期刚发现的,发生在7年前source上的一个小缺陷。另外一天加班是因为要修正IE8 的缺陷。昨天他们想把用户接口(user-interface)由数字输入改为菜单,这项变更涉及到了所有的代码。今天我的代码有几次崩溃,经调查发现代码中有三处不同的离一错误(off-by-one errors)导致不定时的吃内存。
上面的事例都是不可预见的,除了下面典型的做法:预估代码中又会1/3到超过一半的未知的缺陷数量,要为此增加至少1/3的工时。超过1/3到1/2的预报工时通常会被管理层砍掉。
进一步,从管理的角度来说,管理人员从未接触过编程,他们认为程序员并没有做什么,因为他们看起来像是在打字、或者两眼放空,或者在白板上画一些盒子和箭头,或者在吃奇多(Cheetos:一种膨化食品)。程序员仅仅是打字员,他们的工作通常看起来并不是十分的辛苦。程序员的工作给不了解编程的人们是会容易带来这种印象。但是很多时候程序员的的确确是在很努力的工作,只不过繁重劳动场景是出现在他们的脑中而已,然后试图用一些死板的计算机语言去实现他们脑中的想法。这是最辛苦的工作之一。这需要大量的发呆, 需要在白板上画盒子再用箭头把盒子连起来,需要在白板前比划,需要大量的可乐、膨化食品为编程的过程补充能量。不能仅仅因为他们看起来不忙碌,就以为什么都也没有做。