随着企业的规模越来越大、外部竞争越来越激烈,越来越多的企业关注软件研发效能,之前我也写了几篇有关软件效能的文章,例如:
今天从逆向思维来分析软件研发效能,看看有哪些主要因素会影响、降低研发效能或成为效能提升的阻力?在这些负面影响因素中,究竟哪项是研发效能的最大的敌人、成为研发效能提升的最大阻力?也想听听你们的意见,欢迎大家留言。
正如 软件研发效能的底层逻辑 一文所说,人是决定的因素,成也萧何、败也萧何,人是第一要素,也是研发效能负面清单上不会缺失的内容。当然,我们可以把“人”的因素分解为 组织的质量文化、组织领导力、团队协作能力、个人技能,还有工程素养或职业素质,最近我还在百度技术沙龙上分享了 “从质量视角聊聊软件工程师的职业素养”。组织上不作为、组织文化落后、团队或个人 糟糕的能力、素质等等都会成为研发效能负面清单中不可缺少的内容。
其次,当前缺乏有效的流程,或者虽然有流程,也是照搬过来的,东施效颦自然效果不好。有些流程的演化只做加法,不做减法,时间长了,流程会过于繁琐;如果流程过于苛刻、机械,把流程当圣旨,人成了流程的奴隶,这些都会严重影响交付效能;即使现在流程运转不错,但缺乏有效的机制不能持续改进流程,效能也很难提升。
再者,技术和工具的落后、不稳定等也会影响研发效能,比较容易理解;最后,软件自身带来的问题,如复杂性、可测试性、代码的可读性、缺乏必要的文档等等也会影响软件效能,也有人说,软件复杂性是软件效能的天敌,会杀死我们。
经过头脑风暴和整理,我们可以列出软件研发效能的负面清单:
缺乏质量意识
质量文化建设空白
组织缺乏领导力
团队之间矛盾重重
团队规模大
团队责任不清楚
缺乏有效的目标管理(OKR/KPI等)
人员招聘、培训流程混乱
个人职业素质普遍比较低
个人技术能力不强
个人软实力弱
照搬流程(机械、苛刻等)
流程不容易理解
繁琐的流程:只做加法
流程没有贯通(反敏捷、反DevOps)
流程至上
缺乏有效的流程改进机制
糟糕的研发效能度量
技术落后(保守)
技术不成熟(过于激进)
重复造轮子(开发市场/开源已有的工具)
研发平台(包括IDE)不好用
没有或低效的CI/CD流水线
研发环境不稳定
各平台(开发、测试、缺陷管理、项目管理等)没衔接好
需求描述不清楚
业务复杂没有优化(缺乏业务建模/架构设计)
需求经常变更(存在极大的浪费)
需求评审流于形式(导致需求遗留问题多)
需求管理混乱
糟糕的架构设计(系统复杂)
没有Design for Test
没有Domain driven design
缺乏必要的设计文档(如接口定义文档)
设计评审流于形式(导致设计遗留问题多)
代码质量差(bugly)
代码可读性差:不规范(命名、注释、风格)
代码不具有可测试性(含代码复杂)
糟糕的代码库管理(包括分支、合并等)
低效的版本构建、集成(如缺乏增量版本构建)
代码扫描(静态分析)很少做
代码人工评审流于形式(导致代码遗留问题多)
测试缺少方法(测试分析/设计能力差)
测试缺少策略(存在测试浪费)
测试环境不稳定
自动化测试程度很低
没有采用探索式测试
探索式测试和自动化测试没有有机地结合起来
部署或配置自动化程度不高
缺乏自动监控/人肉运维
缺乏可观测性
不自动收集用户反馈
你认为,哪项是头号敌人?
欢迎参加问卷调查,非常感谢