挑战
人月单位设定混淆了工作量和进度,这两个不是永远正相关,简单说不是堆更多人就能线性提升软件开发交付进度。
软件工程是最错综复杂的工程,复杂度还在不断增加。
- 有些任务、工作必须串行,即某个任务的完成依赖于上一个或多个任务完成
- 个人工作和团队工作方式差异
- 实施新技术风险和时间不可控
- 软件行业是知识密集型行业
人月神话无法达到,但可以通过改善管理方法无限接近神话。
方案
1. 外科手术式
- 最好的成员和最差成员工作效率差异是10:1
- 优秀的人做团队核心(首席程序员、架构师)
- 其他人作为辅助(程序员、测试、交付、技术支持)
2. 沟通
- 会议
- 结果沟通反馈
- 产品文档: 产品所有细节,包括,需求目标,进度,成本控制,人员安排等
- 手把手带
3. 防微杜渐
软件工程复杂度被多个指标影响,不是个简单的相加堆砌,多个小的延迟和意外最终可能导致整个项目巨大延期
- 里程碑
- 跨团队协作,清晰团队责任,跨团队监控小组
- 唯一不变的是变化
- 提前集成测试,整体测试
4. 采用新技术
5. 快速发布
- 快速原型
- 快速收到反馈
- 通过迭代完善产品
6. 人才
- 软件行业是知识密集型行业
7. 没有银弹
银弹指的是彻底解决问题的招数或技能。软件工程管理上总是会遇到无法解决的困难,任何时候都不是一帆风顺的。
- 计算机发展太快
- 复杂性
1)需求澄清
2)组织管理
3)计算机本身:操作系统,编译器,驱动,数据库,网络等等 - 可变性
需求变化:客户需求,运营需求,外部环境变化导致需求变化。拥抱变化。 - 一致性
- 不可见性
软件思维产物,看不到摸不着,只能通过语言表达认知容易导致交流、认知困难
网友评论