引言
项目在推进过程中,会逐渐变得越来越难以控制,筋疲力尽之后,直到失控.
比如 我公司的业务背景:
限制1: 开发出的程序运行在 客户的环境, 处于安全考虑, 客户环境禁止带入手机,禁止拍照,禁止数据导出.
只能用笔将遇到的问题记录在本子上, 出来后反馈到公司研发.
限制2: 客户环境 每天数据导入 有次数限制, 时间限制, 节假日限制, 上下班限制. 传输介质限制.
不是每次都能将最新的程序 传输到现场机.
限制3: 公司每研发人员长期支持着至少3个地区的项目开发,如果驻场开发, 其他项目进度受影响.
限制4: 远程沟通 信息传达 会有损性的丢失.如:
对方很久才回复,
对方对工具不熟悉,
对方的设备受限(机房没有鼠标)
对方手头正忙,
对方是个新手,
对方下班了,
对方在路上,
对方环境存在其他干扰(FTP网络问题,TCP巨帧丢失问题)
项目的演化
2018 年5月:
开发出 网络分析程序 如: analyze, 部署在 某客户机房
2018 年10月:
公司觉得 某个功能具备特色,将其单独作为一个卖点,
在 analyze 基础上开发出 analyze_A, 部署在 某客户A机房
期间 analyze 与 analyze_A 都在 快速开发中, 已经出现更新异常,一个BUG两边代码都要改, 但还能忍受.
2019 年3月:
公司又觉得 某个功能具备特色,将其单独作为一个卖点,
在 analyze 基础上开发出 analyze_B, 部署在 某客户B机房
期间 analyze 与 analyze_A, analyze_B 都在 快速开发中, 已经出现更新异常,一个BUG三边代码都要改, 但还能忍受.
… 期间多次要求给时间重构代码框架, 项目紧急任务过多, 一直未能重构.
至今
已经演化出 analyze, analyze_B, analyze_C, analyze_D, analyze_E, analyze_F, analyze_G,
还有要求将F地区的功能加到C地区的项目上.
还有一部分驻场开发, 但是代码拿不出来的 analyze_X.
但是 F, C 的代码 在长达5年的演化, 已经差异比较大了, 代码的合并测试是个麻烦的活.
现在一个底层 BUG, 要在多少个项目上改, 要在哪个分支上改, 改多少, 测不测? 谁来确认?
我们已经改不动了. 这么多年来, 人员来来往往, 风格各异, 屎山代码就是这样形成的.
金律
以二进制模式复用, 不要源码级别复用. 解决反复源码打补丁的问题.
功能模块 必须隔离. 比如我在开发功能C, 其他不相干的模块全部不要加载.
如用不上功能F, 功能F的开发还依赖某冷门私有RPM包(此RPM还需持续保持更新,否则功能F编译报错).
否则 我要开发功能C, 还要解决别人的冷门RPM依赖(不是所有人都会在README中说明依赖信息的)
解决 开发者 环境臃肿问题.二进制模块发布