原文
几种典型的开发方式
- 软件开发中的“锁”
- 技术能力上的锁:需要不同的语言开发一个项目,每人只会一种语言
- 负责模块上的锁:不同的人负责不同的模块
- 时间锁、进度锁:掌握语言或模块负责的人不同,需要协作开发
- 沟通锁、利益锁:人员增多会增加沟通成本
- 解决方案
- 一个程序员应该可以掌握多个语言,能够负责多个模块甚至不同的职责
- 接力棒式软件开发
- 底层开发-上层开发-测试-运维。。。
- 解决方案
- 不同的团队有自己的框架(开发框架和服务框架),使得其他团队可以自己接入
- 保姆式软件开发
- 从产品到研发、测试和运维,每个团队没有较好的完成自己的工作,需要之后的团队来发现问题
- 产品的需求不完整,后期边开发边加需求
- 研发没有充分测试自己的代码,使得测试花更多时间来定位错误
- 测试没有充分测试产品,使得运维需要花更多时间重新部署服务
- 解决方案
- 招聘懂“需求”、注重“软件工程”、“软件质量”和“软件维护”的工程师
- 自己管理自己
- 支持性工作的人越少越好
- 服务化。我服务于代表让对方做起事来更容易
- WatchDog 软件开发
- 为了解决某个系统的问题,要用一个新的系统去监控
- 解决方案
- 想好设计,多评估几个设计,简化流程
- 故障驱动式软件开发
- 以上线为目的,出问题再改,使得后期话更多时间定为错误、重构代码
- 解决方案
- 基础知识和理论知识的重要性,多使用成熟的方案
- 考虑清楚再写实现,做好设计
- 总结
- 软件工程师分工分得越细这个团队就越没效率,团队间的服务化是关键的关键
- 需要在一个环节上认真,这个环节越往前就越有效率,越往后就越没效率:需求收集-设计和编码-测试
- “小而精的团队”+“条件和资源受限”是效率的根本,这样才会用最经济的手段做最有价值的事
- 软件架构上要松耦合,团队组织上要紧耦合
- 工程师文化是关键,重视过程就是重视结果