软件技术学习笔记

个人博客,记录软件技术与程序员的点点滴滴。

我们的软件“士兵”为何临阵脱逃

在软件开发领域,人员的离职或转岗是经常看到的。有的团队每年离职/转岗率10%~20%,有的团队则高达50%。人员的离职,对团队有以下冲击:

  1. 项目进度受到冲击,只能拆东墙补西墙。
  2. 业务增长放慢或缩减,收益减少。
  3. 在职人员的负担加重,心里也会有想法,工作效率降低,可能引发更多的人员离职。
  4. 新成员培养成本。寻找合适的新成员并不容易,需要一定的周期;新成员入项需要老员工的指导;新成员需过一段时间才能独立开展工作。

我们从驱动力、软件架构、生产效率、成本、收益、压力与成长等几个方面来看这个问题,再看看一些应对之策,如何给公司创造长期的、更大的价值。

下文图表中的数据并非来源于真实的数据统计,仅做趋势参考。

1. 驱动力

人为何工作,驱动力来源于何处。看过《驱动力》这本书,我们可以从中得到答案,有3个版本的驱动力:

  1. 驱动力1.0,生物冲动。人们为了满足生理需求,需要呼吸、食物、水、睡眠等。现阶段,几乎没有企业采用驱动力1.0管理。
  2. 驱动力2.0,寻求奖励,避免惩罚。现在大部分企业管理都是驱动力2.0,奖励更多的钱物,犯错时扣除绩效等手段。
  3. 驱动力3.0,自主,专精和目的。这阶段发更多的钱也起不到更大的作用,需要员工自主、爱好去实现更高品质的产品。

目前,人员离职的原因主要在驱动力2.0,也有部分是驱动力3.0。随着社会的发展,只有驱动力3.0才能给公司带来更大的价值;同时人们的生活条件逐步改善,奖励的诱惑不一定起到作用。

应对之策:识别人员的驱动力版本,采用不同的管理策略。对驱动力2.0的人员,提升工资与奖励。对驱动力3.0的人员,为其创造满足驱动力的条件,比如人性化的团队管理、自由的时间分配等,工资满足其没有行业落差感即可。

2. 软件架构

随着软件功能的增多,系统也变动越来越复杂,这时软件架构变得更加重要。软件架构的目的之一就是降低系统的不确定性。如果系统的不确定性增大,系统将更难以理解,软件问题会增多,人们的沟通效率、生产效率会降低。

系统的不确定性

无架构看护时,代码就像一团泥球,BUG涌现不断,还经常引入问题,生产效率低下,没有人知道明天该怎么过,情况最糟糕。这种情况时,所有人员(项目经理、开发人员、测试人员、运营人员等)的压力会剧增,团队成员难以稳定。

有架构看护时,系统的复杂度也会增加,但还能确保条理清晰、有序,系统的不确定性会缓慢增大。

架构演进时,软件专家、架构师会发现软件设计问题,调整到更合适的架构,确保系统更加容易理解与实现,系统的不确定性不会随着功能的增多而增大,还可以降低系统的不确定性。

应对之策:团队要有人对软件架构负责与持续改进,其不一定要挂着软件专家、架构师的头衔。降低系统的不确定性,减轻团队的压力。

3. 生产效率

社会文明一直向前发展,科学技术是第一生产力,不同团队的生产效率是不一样的。有人一直研究如何提高行业生产力,我们应该紧跟时代的步伐。一个优秀的团队,其人均生产效率会一直上升;而一个糟糕的团队,其人均生产效率会一直下降,且有显著下降的趋势。

人均生产效率

4. 人力成本

在开发复杂的、大型的业务软件系统中,团队成员一般由以下人员构成:业务专家、软件专家、高级开发人员、普通开发人员,不同人员的成本是不一样的。

人力成本

这里所说的专家先定位为部门内的,不一定必须是行业有名气的。人的精力是有限的,在高强度的工作环境中,在同一时间段内一个人很难成长为“既是业务专家,又是软件专家”,但是,只要有兴趣,可以分阶段培养。

5. 成本与收益

随着社会的发展,人力成本是逐年上升的。我们先从纯软件开发的成本与收益看看两个不同的团队。

优秀团队的生产效率比较高,能实现更高更多的价值目标,成本会缓慢上升,收益有明显的上升。

优秀团队的成本与收益

糟糕团队的生产效率一直下降,总产量不下降的情况下需要投入更多的人力,成本会陡峭上升,问题比较多,收益只有缓慢上升,有时收益反而下降。当成本大于收益时,团队的压力会剧增,如果只单纯搞软件,项目开始有失败的危险。

糟糕团队的成本与收益

只有超大型项目才会持续几年的时间,中小型项目过个半年就发现效率低下、入不敷出。

6. 业务收益

单纯靠软件是不好赚钱,一般都是软件背后的业务比较赚钱。软件实现功能之后,业务创造的价值有时可以是指数的生长。软件开发效率越高,业务收益越快越明显,同时能够快速占领市场,击败竞争对手。

业务收益对比

优秀团队带来的业务收益明显比糟糕团队的多。有业务收益的支撑,软件项目出现问题时还能够坚持更久,能挽救的时间更长,成功的几率更高。

7. 人员压力

随着项目的复杂,糟糕团队的人员压力会陡然上升,当上升到一定的极限时就会有大量的人员离职。只有持续改进的优秀团队,其人员压力才可能下降。

人员压力对比

8. 人员成长

要提高生产效率,团队必需有成长,也设计一些成长曲线。人员的成长与团队的成长密不可分,当两者出现较大的差异时,也会有人员的流失。

个人成长明显超过团队成长时,说明团队已经阻碍其成长了,这时个人也有离开团队的念头。要挽留这样的人才,只能看驱动力部分是否满足其需求,否则,只能好聚好散。

当个人成长速度过慢时,其心里压力也会增大,团队也有想换人的想法,这时也会有离开团队的念头。开始发现成员成长较慢时,要采取一定的措施,比如沟通、指导、培训等。

人员成长

9. 对策

除了驱动力、软件架构,其它的原因都是与团队有关。为了给公司创造更大的价值,努力建设优秀的团队,或向这方向迈进。

9.1. 建设优秀的团队

以提高生产效率为目标,建设相对稳定的团队。

  1. 建设成长型、良性循环的团队,不怕少量人员离职。
  2. 有统一的指导思想,大家的目标一致。
  3. 有人负责软件架构,每个成员都参与持续改进。
  4. 提升项目收益,增加人员收入。
  5. 减轻人员压力。

9.2. 挽救要失败的项目

要失败的项目是如何产生的呢?主要原因是糟糕的团队,无人负责软件架构设计、软件工程实践,项目经理只追求短期的目标。然后问题剧增,人员压力增大,看不到脱离困境的希望,人员相继离职,团队陷入恶性循环。当软件代码腐化到一定程度的时候,无法支撑更多的人并行开发,项目组加入更多的人也无法提高产出,即使有业务收益在背后撑腰,团队成员也扛不住巨大的压力。

发现因软件问题导致生产效率低下时,应该及时解决,否则拖延的时间越久越难以摆脱困境,就像人的身体疾病一样早治早好。如果项目比较大,等待团队内部成长出软件专家或架构师已经来不及了,最好找有经验的软件专家来指导,软件专家与团队内部的业务专家相互配合一起摆脱困境,最后,建设良性循环的团队。