敏捷开发

108 阅读4分钟

瀑布流开发模式

benifits

  1. 标准化,流水线
  2. 分工、协作
  3. 质量保证

drawbacks

  1. 对于中大型需求,因为复杂,导致很难轻易的深入细节和分支,需要耗费较大的人力、时间成本
  2. 对于中大型需求,因为功能复杂,时间跨度大
    • 产品设计跟不上市场需求的可能性更大
    • 需求变更的成本高(而且越到后期 代价越大)
    • 甚至有些方向性的调整 导致产品流产,无法及时的止损
  3. 在传统流程中,部分的流程是串行的
    • 比如 产品同学在产品调研、产品方案设计的时候,研发、测试同学基本上是无法参与太多的
    • 这个时候一般也没法开始其他的中大型需求,否则可能导致人员占用,无法及时支持原来的需求
  4. 直到提测阶段,才能看到“成果“(一个完整的、功能齐全的产品)

核心根本问题,其实是中大型需求复杂度高,周期长。

  1. 因为复杂度高,需求难以明确(客户很多时候也不知道想要什么,更何况在没有直接客户需求,依赖”猜测“)
  2. 因为复杂度高,各个环节出现漏洞的可能性增加
    • 产品流程缺失、冲突、不符合用户习惯
    • 技术方案不全面
    • ... 对各个团队的主要负责人的个人能力和行业经验有更强的依赖性。
  3. 因为复杂度高,各个环节需要的周期就会长,而且有些时候 还不是能单纯的靠加人能搞定的
  4. 复杂度高,周期长,及时响应需求变化(市场的、老板的...)的能力差,也无法及时止损。
    • 因为复杂,相互之间的影响大,调整难度大,
    • 排期2个月,开发一半了,市场变了,热度过去了,政策变化了...(排期2周,干了一半,调整方向,都能及时止损)
  5. 因为整个周期长,无法灵活调整(市场不等人,上线时间不能再晚了)
    • 开发了1/3了,为了应对市场变化,调整个需求,但是排期要保障
    • 先压缩测试时间,再尝试压缩开发时间
    • 最终由于时间紧张,影响点没考虑全面,技术方案没想完善,导致上线之后质量也不够理想

其他的开发模式

快速原型开发模式

  1. 常用于针对需求不明确的客户需求
  2. 先开发一个简陋的原型版本,收集客户反馈
  3. 因为不是最终交付版本,所以注重功能实现,不关注性能、安全性等

模块拆分|增量迭代-瀑布模式拆分

既然大瀑布模式的问题是复杂度高, 周期长,那么就拆分成独立模块,按模块交付或者按照。

模块拆分: 举例来说,可以将一个产品的不同页面独立交付,比如首页、详情页;但是这个时候可能还不是一个完整的产品,无法上线。

增量迭代 可以先将部分非必须的功能和页面放到之后的版本迭代中完成,就是我们经常看到的拆分需求;这种模式下的每一个版本交付都是可以独立上线的。

以上两种适用于不同的业务情况,一般如果能使用增量迭代,则优先使用增量迭代,因为交付的一般是一个完整、可用的产品

但是增量迭代麻烦的是,

  1. 不是每一个需求都能拆分成不同的独立可交付版本
  2. 及时能拆分出可交付版本,但是这个版本不一定能够满足周期尽可能短(比如小于2周)的要求

敏捷开发

不可能三角理论

时间、质量、功能范围三者不能同时兼顾,类似区块链中的安全、去中心化、效率/性能的问题

针对瀑布式的中大型需求开发模式的问题,必须去牺牲一个的话,其实也没有别的太多选择,只能对功能范围进行取舍。

敏捷宣言

image.png

  1. 更强调个人主观能动性和团队配合
  2. 拥抱变化,用户需求优先

所以敏捷开发在强调更加发挥人的主观性和及时沟通,快速的明确用户最新的需求,迅速的交付包含用户最期望的功能特性的产品,同时能够及时调整产品方向适应市场变化。

敏捷开发常见流程

scrum项目管理流程

敏捷开发 vs 迭代 vs 增量

image.png

敏捷开发适应的场景

image.png

  1. 实际开发过程中,往往技术的不确定性其实比较少,往往更多的是需求的变化
  2. 同时需要注意的是 需求的变化应该是由市场的变化或用户需求的变化、明确、或者公司整体战略架构变化导致的

敏捷开发常见的误区

references

  1. mp.weixin.qq.com/s/puMNz91hi…
  2. time.geekbang.org/column/arti…
  3. docs.microsoft.com/en-us/devop…