不为有趣之事,何遣有涯之生
不失其所者久,死而不亡者寿

告别失控 研发管理之道

告别失控-研发管理之道

人员篇

程序员为什么难以管理?

程序员难以管理的问题来自于两个方面:一个是软件开发本身的复杂和缺乏教科书式的规范标准,这点和电气土木工程的区别很大,软件开发更像是写小说一样;另一个是开发软件的人形形色色,没有明显的特征,任何人都可以成为程序员,那么你要管理各种各样的人,本身就是一件困难的事情,而且程序员大多都是聪明人,面对仅有的规范,也很难去遵从。

有句话说的好,管理程序员就像放牧一群猫,猫极具自由主义,个人主义色彩浓厚,而且狡猾、贪玩、好奇、独立。养一只猫你都成了铲屎官,一群猫你感受下?

理解程序员

程序员难管还有一个原因,大多数人都不理解他们。所以我们你要先了解这个群体才能管理好他们(其实我不喜欢管理这个词,我崇尚领导他们)。

工种与类型

以前程序员的分类基本可以分为:

  • 客户端程序员
  • 服务器程序员
  • 数据库程序员
  • web开发程序员

需要说明的是这里的客户端是指程序所在的位置,处在用户使用端的程序(计算或手机上的应用都是),服务器同义。
现在大家更习惯与把程序员按照下面这么分:

  • 大前端程序员
  • 后端程序员
  • DBA
  • 架构师
  • 算法工程师

无论怎么分,我们需要理解的就是程序员本身也是一个可以继续进行细分的职业,每个细分工种之间的差异性还是比较大的,比跨语言还大。

在我国程序员分别各有一个雅俗称号,高雅的叫XXX工程师,俗点的叫码农,以为写代码的农民;工程师应该是一群苛求学习,动力十足的人,不要把自嘲的码农称号变成仅仅满足把自己工作做好的,只会做代码的搬运工似的码农。

个性

程序员群体中存在着许多种个性的人,而且比较常见,越是杰出的程序员越是有点与众不同。归纳了下大概有下面几种:

  • 左脑和右脑:这里的左右分别代表来自理工科和来自文科、艺术类程序员,很多人以为更适合做程序员的应该是理工科的人,但是现实里来自文科、艺术类学科的程序员,杰出比例比理工科的大,而且能突破瓶颈上升到卓越级别的,往往需要你有些艺术方面的修养。作为管理者,应该在团队里应该配备这两种类型的人才。

  • 白天和黑夜:一般正常人的生活都是朝九晚六,日出而作日入而息。但是程序员这个群体中,有大量的人白天看起来萎靡不正,晚上就化身为猫头鹰。所以我将其归纳为白天和黑夜。有些人潜意识里就认为,只有黑夜型的程序员才算的上是杰出程序员,然后在成为杰出的程序员前,先把自己催眠成黑夜型的人。当然我不认同这种观点,这只是不同人的作息时间习惯问题,我想还有一部分人是因为白天琐事繁多,只有晚上没人打扰才能专心写代码,渐渐变成了黑夜型。作为管理者要协调好白天和黑夜人员沟通协作问题,尽量不要让白天型人被渐渐逼迫成为黑夜型。

  • 萝卜和青菜:萝卜是指那些开发速度很快,一个任务分派下去,他总是超出预期时间提前完成,但是往往考虑的不全面给出的都是一次性的解决方案,一般这种人都是刚入门的新人,他们充满激情,总是想面临新的挑战;另外一种青菜是指干活很细致很慢,所谓慢工出细活,他们从来不会提前完成工作,但是他们完成工作质量都非常高,在任务的时间期限里,将很多因素都考虑了。萝卜有个优势因为干的快,出的问题也多,曝光率就高;而青菜总是默默无闻;作为管理者要科学的降低萝卜的速度,提升青菜的效率和曝光率。

  • 英雄:是指能付出超人的努力去完成任务的一类人,英雄是培养出来的,但不要经常这样期望英雄,英雄精力也是有限的,应该把他们放到关键性项目中。

  • 内向:很多的程序员都非常沉默内敛,但很多人工作完成的很出色,多给机会然他们发言并肯定他们,相信他们可以做的更好

寻找优秀程序员

确定招聘哪种人

【老手特征】

  • 教导团队各种实践的程序员
  • 寻找出最扭曲难寻的设计缺陷的码农
  • 有大局意识能将需求进行合理分解为组件和模块的设计师

【新手特征】

  • 短期内快速制造数千行代码
  • 做出客户非常重要原型
编写职位描述

重视职位描述,是你公司营销的好机会(工作方式、产品、公司文化、具体工作、需要技能、加分项)

面试建议

几个准备:

  • 1 可以采用电话面试对候选人进行初步的筛选
  • 2 准备好面试登记表
  • 3 面试中要用白板,共同探讨解决方案

面试有些问题是必需要问的,有些问题你要开放式的问,下面是一些推荐大家要问的问题:

  • 上一个工作哪些方面是你喜欢的?
  • 你的同事和领导怎么样?
  • 请告诉我一些你和领导意见不一致的事情?
  • 什么原因吸引你来我们公司?
  • 你为什么会想换工作?
  • 对于新工作你要获得什么?你能给我们带来哪些价值?

下面是一些开放式的问题:

  • 项目工作中的铁三角你们是怎么做的?
  • 你是如何成功做到... ...
  • 你们开发流程是怎么样的?是否存在竖井现象?你们是如何解决的?
  • 讲讲一次代码重构的经历

你还可以了解下候选人的兴趣爱好,一个会玩乐器、喜欢看书、喜欢自己琢磨树莓系统做小玩意的人一般不仅仅是个合格的程序员,而且大概率上还是个杰出的程序员。
另外你要知道,你招聘的人应该是在未来持续会给公司带来贡献的人,如果你犹豫不决,通常情况下你应该先不聘用他。最后建议你准备一份既正式又有趣还独一无二的录取通知书,有助于招募到更加优秀和有趣的人。

管理篇

向下管理

作为管理者,平时工作中最多的管理工作应该还是向下管理,要做好向下管理,你要Get下面这些技能

赢得技术尊重

和其它行业的岗位不一样,作为技术领导者你必须得动技术,而且还要赢得技术尊重。这是成为一个好技术领导的必要条件,如果这个基础没打好,那很多问题就会变得棘手。下面是一些你赢得技术尊重的方法:

  • 理解计算机程序设计艺术
  • 良好的过往履历
  • 做出了值得称赞的技术贡献
  • 追逐技术潮流的最前沿
  • 展现出强大的个人价值
招聘杰出的程序员

说真的,招聘到杰出的程序员可以为管理者剩下大量的时间与精力。杰出的程序员,内驱力都很强,招聘或许会花费很多的时间,但是其他工作就会更容易。如果碰到杰出的程序员,尽量想办法招聘到他们。
一个杰出的程序员和一个普通程序员,效率上存在数量级的差距,薪资上肯定不会有这么大的差距,所以杰出的程序员反而是最便宜的程序员。

强化现有团队

虽然杰出的程序员很好,但是每个公司独缺杰出的程序员,所以我们需要学会培养普通程序员,领导好普通程序员也能成就伟大的事业,而且还可能培养出杰出的程序员,这比招聘到杰出的程序员更加让人振奋。

管理不同类型程序员

之前提过,程序员的个性是有很多种的,你必须了解他们,并采用适合的方法去管理不同个性的程序员

引导和保护

管理者的一个责任就是引导事情走向正确的方向,在这个过程中你要保护团队免受不必要的干扰,让团队保持高效运作。把一些负面消息和悬而未决影响到团队士气的事情挡下来。

评判和改进绩效

每个管理者都有的一个重要但觉得很头疼工作,那就是评定绩效。一般评定绩效会包含三个步骤:

  • 1 设立目标:有一个可以改善每个人绩效的方法那就是与他达成共识,和他一起设定任务目标和完成时间;在开发团队这种创造性工作环境里,奖励是会降低工作效率的(外部激励损失了内部激励),要慎用,复杂性任务动力来自于以下途径:自制力、专业精通、目标感、紧迫感、表扬和赞赏、成就感。我们应该围绕这些来激励绩效。
  • 2 绩效审查:给予常规的绩效审查和反馈,管理者应该给予更多的正向评价,但是也要清楚你的工作不是对谁宽容,而是让他们变得更好
  • 3 评判绩效:对于绩效达标和杰出的人,我们应该大声表扬;对于略有不足的人我们应该小声提醒;对于那些表现糟糕的绩效者,我们应该给他们一个机会来扭转局面,当还达不成时,解聘他们,解聘他们时需要准备一份审查项目清单,进行客观的说明
组织思维

组织思维是要管理者认识到什么样的组织结构是健康的和高效的,管理的注重点是什么等问题,下面是构建良好组织思维的一些建议:

  • 1 项目尽量控制在小团队7-9个人
  • 2 经理最重要的事情是如何处理团队个性与怪癖并成功地交付项目
  • 3 杰出管理者随着组织越发展,积极影响越显著
  • 4 允许别人有不同的管理过程,注重管理结果
  • 5 矩阵式管理重度的话也会引起一些问题,也是组织发展必须面临的挑战
交付成功和庆祝

管理者要识别、奖励、庆祝团队的成绩是至关重要的,建议要使用电子邮件把它抄送给组织中的重要人物。要知道酒香也怕巷子深的道理,让大家都能分享到团队努力后的成功,每一次成功后的喜悦就是对团队自身最好的激励。

向上管理

向上管理没有向下管理那么花时间,但是可能比向下管理更加重要。你自己知道自己做的好是没有用的,得你老板知道你做的好才有用,要知道现实中的外在认知比实际行动更重要,所以更需考虑别人如何看待你所做的成果,其本质就是要弄清楚上级对你的期望。
要做好向上管理,我们要学会这些:

  • 了解你的上司:你上司是技术型、销售型、市场型、财务型?注重大局的还是注重细节的?你可以使用一套科学的理论框架来定义,比如九型人格法、DISC法
  • 准备好沟通材料:让团队知道你为减少对他们工作打扰,在幕后做了很多工作;让老板知道你为他分担了很多工作;越向上的汇报,越要精简和注重大局;设计和展示精彩介绍的能力
  • 了解上司的上司:帮助你老板获得成功,你会更加成功,你要多从下面这些方面考虑:提高质量、按时交付、创新、其它关于产品的目标、问题汇报、合作与伙伴关系、收入或支出
  • 时机:及时的提供对他有用的信息,是非常重要的,就像电影挑选特定时间发布决定了它获得奥斯卡金像奖的机会一样
  • 成为模范员工:要让自己处于低保养的状态,只拿真正重要的问题去寻求帮助,寻求帮助时最好拿上几套潜在的方案;主动自荐帮助他解决问题;少说多做

对外管理

要保证一个部门良好运转,各个岗位的人都要进行协作,那么一个公司也是,需要各个部门之间进行协作。所以作为管理者还要做好对外管理的工作。你需要做到几下几点:

  • 与部门内的人合作:部门内与你平行级别的人之间互相守望、互相鼓励
  • 了解其它部门:知道其它部门的主要工作内容和目标,重视他们的贡献,倡导组织跨部门培训与活动
  • 利用重要的支持功能部门:获得人力资源部门活动支持,清楚团队预算和管理费用,引入法律团队的帮助去处理合同和协议许可证
  • 管理跨公司的关系:处理维护好其它公司与自己公司关系,其它可能合作的组织有:你的客户、技术提供商、技术创新者、工具提供商、政府、大学教育者等

自我管理

最难管的人总是自己,我们很容易严以律人,宽以待己。所以要成为一个杰出的管理者,我们一定要做好自我管理。自我管理主要有以下几个方面:

  • 形象管理:首先要创建自己的个人风格,具备得体的着装外观,良好的职业道德,发现和挖掘出符合自己的某项天赋
  • 时间管理:时间是管理者最重要的资产,要养成良好的时间和任务优先级管理习惯,保持会议的准时开始和结束,用电子日历来规划自己工作,养成类似番茄工作法和四象限工作法来规划工作
  • 沟通管理:建议去了解员工的一些基本信息,比如基本家庭情况,兴趣爱好,入职时间等,这些在和员工沟通时能更有亲和力,另外建立机制来控制和管理信息,不能让信息打乱和控制你;沟通要做到高效,需要你成为做到关注对方、利用反馈型倾听、突破沟通障碍平等沟通;记住管理是倒金字塔,管理者在底端而不是顶端,清楚欲先民,必以身后之和如果他们为你工作,你则也为他们工作
  • 任务清单管理:除了用日历规划主要工作和行程外,每天都维持一份任务清单,同时也能加强时间管理
  • 寻找导师:寻找一名或多名导师,去请教他们,有了导师的指导,你才能走的越快越远

激励文化篇

激励理论

这里就简单介绍3种常见的激励理论:

马斯洛需求层次

马斯洛需求层次共分为5层:

  • 生理需求(食物、居所、温暖、性、睡眠)
  • 安全需求(保护、秩序、法律、稳定)
  • 社交需求(感情、家庭、关系)
  • 自尊需求(成就、地位、责任、名誉)
  • 自我实现(个人成长与实现)
    虽然马斯洛的理论说低层次需求尚未完全满足之前,更高层次的激励没有多少用武之地,但是其实处于满足低层次需求的人,也会存在部分高层次需求。还有一个奇怪的现象,做一件事情的目的我们看自己都会倾向于是马斯洛层次中上层,而看别人都觉得他们是为了满足马斯洛层次中下层
X-Y理论
  • X:独裁式、压抑的风格、严格控制、没有发展
  • Y:解放和发展、通过授权、增加自主及赋予责任,获得控制。成就及持续发展

管理者需要注意强压式的政策只能让那些能力一般,害怕失去现有工作或薪酬的员工行为上遵从,但是却会让那些内驱力强,积极主动的员工失去对组织或公司的认可,导致他们失去热情或离开组织。所以应该针对不同的人采用不同的理论

双因素理论

双因素理论把激励分为基本因素和激励因素,基本因素没有满足的话,激励因素是起不到作用的

  • 常见基本因素:工作条件、工作氛围、公司政策和福利、管理方式、学习和成长
  • 常见激励因素:利益、同事之间相处、认可与称赞、改变世界

适合程序员的双因素理论

这里我们专门讲下和程序员息息相关的双因素理论

基本因素
  • 有趣:如果你期待员工努力的工作,那么有必要允许他在办公场所玩(打球、团建、庆祝),请记住管理级别越高,办公桌上的玩具应该越多越好
  • 学习与成长:程序员的主要激励方式不是报酬,尽量提供技术培训,让员工不断成长,才能面临不断挑战
  • 良好工作环境:1 把工作场所打造成工作的好地方;2 拒绝混蛋,及时清退;3 变通,特别是对待创造性人才(着装、工作时间、私人空间、设备和工具、加班补偿、休假);4 为团队提供食物
  • 合理的公司政策和管理:1 有效透明的沟通;2 保护员工远离组织干扰;3 保护员工远离不良的组织交流和政策
  • 合乎道德的管理:1 始终遵守职业道德并保持专业;2 公平(公平的薪酬、适当提升),不要会哭的孩子有奶喝,要知道薪酬往往是消极驱动因素,而非积极因素
激励因素
  • 利益:设置合理工资、奖金、股票期权,提供快速成长机会,适当增加福利
  • 和同事快乐相处:你放松周围的人才能放松,享受乐趣并始终保持激情
  • 认可和称赞:一项廉价的但经常被忽视的激励因素,称赞应该具体一些,不要泛泛而空洞,学会大声的赞美,轻声的责备
  • 工具和技术:为团队提供高效率的工具,也是激励他们的很因素,但是却经常被忽略,找到好工具奖励个人或团队,是最简单的双赢事情
  • 学习与成长:在软件行业,没有专业上的持续学习与成长,就不会成功,如果你不喜欢改变,你会更不喜欢变的毫不相干,如果你没有在赚钱的同时去学习,那么你骗走了自己收入中最好的一部分,所以工作任务本身要使得员工能学习和成长
  • 改变世界:几乎没人不想改变世界,换个角度让自己留下点什么也是改变世界的一部分,公司需要有个史诗级的目标

建立开发文化

一个好的工作环境,有利于开发出高质量软件,充满尊重和公平的氛围能让员工保持最高效率,并且还容易培养并促进承诺和激励的文化环境,学会用交付物的度量标准来衡量团队的努力程度。一位杰出的程序员主管应该要创建和培养一种成功的程序设计文化。
那如何判断一个开发文化是不是好呢?有以下这些特点供你参考:

  • 互相尊重
  • 创新精神
  • 标准(汽车之所以有刹车,是为了跑得更快,而不是为了跑的更慢)
  • 交付承诺
  • 沟通透明
  • 公平
  • 授权
  • 职业素养
  • 追求卓越
  • 团队精神
  • 富有激情
  • 关注客户
  • 学习型组织
未经允许不得转载:菡萏如佳人 » 告别失控

欢迎加入极客江湖

进入江湖关于作者