本帖最后由 蓉ZXM 于 2021-4-19 12:40 编辑 , K8 z2 a% Y% a
% s; {; q- l) x# B
虽然你经常听说精益(Lean)和敏捷(Agile),但对敏捷和精益之间的关系是不是也经常感到困惑? 虽然这两种方法经常一起使用,但它们是两种非常不同的项目管理方法。那么它们是什么呢? 精益与敏捷方法又有何不同? 又有什么联系呢?
! w0 E1 m$ t3 P: g! d0 y7 \& h7 z# b! S
7 l, L, `; z3 a0 c7 @
' t0 N7 b( l3 M- H `- b. I+ h: A! C
一、 精益与敏捷: 简史 # W; ~3 s7 k! T! q' R. R5 A
2 ]5 F! x) p6 F- Z
- K, j Z( O f. v7 q3 Q; f) A+ O2 G
我们将首先看到这两种方法是如何产生的,毕竟精益、敏捷的差异就从起源开始就存在了。
8 S: d; ]: k) p; ]8 \3 |
- [; P( Q3 C5 K% Y) h6 }7 y( b8 P7 E4 \1 ]- ~
- U" g, _) Z% j: s A8 o1.1 敏捷
1 {- F/ w6 e$ t5 R( ]2 n! j1 b s9 X) C/ q( a: h
) Y! U- `1 x" {- D! O6 C! u4 }
% G% Z- D* k& [/ f3 a O1 y
20世纪80年代,计算机程序员使用传统的开发方法,如瀑布方法来管理他们的软件开发项目。这一过程不仅耗时,而且成本高昂。但是,软件开发的世界正在迅速发展,而成长通常意味着适应变化。在瀑布模式中,一个产品的开发可能需要几个月,有时甚至几年的时间。因此,当软件或产品发布时,就当前的需求而言,它很可能已经过时了。为了克服这个问题,敏捷宣言应运而生。敏捷方法论是建立在敏捷宣言中列出的4个价值观和12个原则之上的。敏捷通过让涉众参与整个过程来帮助团队更好地适应变化。通过这种方式,可以更好地规划、开发和部署工作软件。敏捷是一种快速迭代的软件开发方法,与传统的项目管理方法不同,在敏捷方法中,一个大型项目被分解为更短的开发周期,即sprint。每次冲刺通常持续2-4周。下面通过一个例子来说明敏捷原则。假设你正在建造一个机器人。像Waterfall这样的传统项目管理方法中,你可能需要花费几个月或一年的时间来计划和开发机器人,然后才能最终部署它。这可能会导致你认为很酷的AI功能变成无用的情况。顾客真正想要的是一个具有完美平衡能力的机器人。而使用敏捷方法,这是可以避免的。在敏捷方法中,客户积极地参与开发过程。在每个sprint结束时,他们会提供反馈,而敏捷团队会在下一个周期中实现必要的改变。这种持续的改进为错误留下了更少的空间,更有利于构建一个完美地满足客户需求的机器人。, _2 J0 ]3 g* {: d% b4 {( n
. k, s9 e6 \% e$ V4 ?- u: F* t
! N9 v4 f* i5 O1 ^% v
- a0 h1 c' M$ w
3 [6 f& k E; v6 r
1.2 精益7 t- ~& O/ @ Y# S) ?
6 ~7 K" X! {8 y
) R) j6 n+ u+ z3 Y* q20世纪70年代,大野耐一(Taiichi Ohno)开发了一种被称为丰田式生产系统(TPS)。它的目标是通过消除任何类型的浪费来降低库存成本和提高汽车供应链的效率。TPS的灵感来自于杂货店的库存管理系统,当需要物品时,使用视觉信号准确地指示库存需求。这减少了总体浪费,优化了整个生产过程。然后,该系统就慢慢形成精益制造原则。但是精益软件开发是如何发挥作用的呢?Mary和Tom Poppendiek受精益制造原则的启发,写了一份全面的软件开发指南。精益软件开发是基于精益方法论的原则,这七项原则是:+ ~" h9 R3 P* C2 j' V/ R" t
9 q* P& h$ A$ ], C s6 [- N9 ~* d/ p* y/ D! `% s
7 N" t; E+ x& @5 m3 m& p' m
- 消除浪费
- 内建质量
- 创建知识
- 推迟决策
- 快速交付
- 尊重人
- 整体优化$ y0 ~* t" i# S$ Q& r0 i1 K
( d. r( V. l* S1 _; i; f D" U- l. l, a5 g: I \# R
: }8 ?5 ?3 x) X
每一个精益原则都旨在通过消除浪费来优化生产过程。它还试图在最大化客户价值的同时最小化风险。消除浪费指的是去除所有不能增加过程价值的东西。这可能是任何事情,从不必要的会议和文档到效率低下的方法。% s0 O2 s& c' T$ J/ F* N1 y
8 H( D5 ]' j/ e- t% j% o0 D/ C9 K
' z% c; A2 S, A
6 b4 U! e9 _, n ]) g
$ w) \3 u+ z, k3 c v
5 m: o, k8 W, @8 C7 M: X+ }8 [) x8 f
2 V) J3 ~4 n$ P d0 J8 [1 E6 b" P: x8 k9 ~% s+ ^ }2 r+ W& a
% B7 c6 o( E3 L
7 v* [3 B2 F/ |, Z* Q1 x既然你已经知道敏捷方法和精益方法包括什么,你已经感觉到它们是不同的,对吗? 为了让事情更清楚,这里列出敏捷和精益的六大关键区别。2 h+ A, o! i! }. P1 x
/ j$ v. b' Y" {3 w7 e" @5 T
0 C0 F5 h6 |; {9 f9 b
: n; M! |9 g/ }- i
2.1 方法论上的差异/ ]8 n8 ^: q. p6 u0 S8 f! f! u
/ y/ }" W8 e+ A$ d e2 n! d8 c
+ r q8 N e( _$ T2 ^6 y( k0 ~3 R: t" T1 s
这是敏捷方法和精益思维之间最显著的区别。敏捷开发重视持续改进和取悦客户,着力于项目开发过程的优化。它的目标是使过程灵活、透明和适应性强。为此,敏捷项目会经历迭代开发周期(sprint),敏捷团队会从头到尾积极地让客户参与进来。精益方法的核心是优化生产过程。这都是关于最小化风险和消除浪费(精益生产)。事实上,“消除浪费”是精益方法的首要原则之一。当你排除了所有与项目最终结果无关的东西时,制作过程就会自动缩短并变得高效。从长远来看,这会为你节省大量宝贵的金钱和时间。
" _7 E W( Y1 _' f$ Z3 C
$ j+ H. M9 r8 ? m* ?0 ~% Q2 m# @ K1 O* d& u* ]- m1 B% u
. Y0 a2 S- r) L! ^ ^. @5 o
& W9 e* P ]: ?, R1 [2.2 方法上的差异
: h$ r4 J+ o5 Q3 j$ W
& Z7 S- s/ d5 r4 d
9 ?$ C; |( }5 I z$ w) d: ^% |, c5 O7 H1 C3 b
尽管精益和敏捷方法都是优秀的软件开发方法,但它们的开发方法略有不同:在敏捷实践中,项目是在小增量、短周期或sprint中开发的。迭代和增量方法指的是将项目分解为不同的阶段,每个阶段由计划、实现、测试和评估组成。这个过程不断重复,直到达到你想要的结果。精益方法旨在在生产过程中引入微小的增量变化以提高效率。虽然这会导致更短的开发周期,但这并不是精益的核心关注点。& z+ a; b% n; n& C: {: I1 w$ \1 v
/ c0 x+ J; w2 a
) N( |! W* r; K/ s7 w; }$ h
4 o3 V$ s1 E3 z o# n, @2.3 项目时间轴的差异
/ G& n0 W+ k- i4 @+ d4 D4 T0 o! }- C: ?" ?' [) x8 R# d
* |! o8 O) e2 S7 B
尽管精益和敏捷方法的目标都是尽早交付产品,但它们的项目时间表是不同的。敏捷或Scrum团队的工作周期很短,以快速交付。每个周期或冲刺通常持续2-4周,有固定的迭代周期。精益团队通过优化流程来缩短项目时间,通常限制在过程中的工作,这减少了整个项目的时间表。然而,与敏捷不同的是,没有特定的时间框架。
3 s" w" c+ c; P& ~7 u/ \2 @# f6 g4 q/ G4 S& `2 [
# b8 T# _$ E% h; X+ |5 a" Y1 c( F/ v- r3 }
2.4 团队中的差异
0 u: G$ B, D/ {8 |8 [9 F
x7 T v& s. F) b( q8 x+ W+ b# I. p. P1 Z
精益和敏捷方法遵循不同的团队结构。敏捷团队是由自组织的、跨职能的个人组成的小团队。8 x, A S, ]+ \8 u, n8 X
0 G6 C% I. G1 P0 r B: v3 K v* | c [9 g) l3 `
( Z" w, _0 l; h" |) C5 N5 m6 ~- 自组织: 团队决定如何自己完成工作。
- 跨职能: 团队成员有不同的专业领域,但都朝着一个共同的目标努力。
7 J: p4 U& D1 {5 `% R g0 J # Y4 L9 R. R' }% y: K( \
* B O) P7 Z z) g+ f- s团队成员包括产品经理(产品负责人)、敏捷教练或ScrumMaster、开发人员、业务分析师等。在精益项目管理中,你要组建多个精益团队,由相关部门的成员组成。每个团队由管理各自团队和个人项目的团队负责人领导。虽然你的精益团队成员应该是有能力的,但他们不一定必须是自组织的和跨职能的。
7 j1 I8 k# a& h9 P4 S* h" N5 y! t) ^8 \, T. g! c
1 s4 _! T# { y
9 k p: X/ ]8 T: B p8 d# Z* C6 M- S& t
( D+ y; g9 z/ o/ g* a
2.5 总体目标的差异
3 W" q, d9 w% j; d8 Q* N
: O: w" d5 q8 e+ _; }& R: _/ q+ ^2 h6 H" K% W9 t G2 d5 ^9 X
! o- M6 ^, @! X4 j% `4 k
敏捷精益开发方法努力实现不同的目标。在敏捷开发中,目标是创建符合最终用户或涉众需求的东西。对于精益开发,目标是消除任何不能为产品开发增加价值的过程。0 S/ G4 u9 J L
1 ]! ^; W3 t+ @0 E/ f
. r! H. W9 r n- g, _7 ]( \, K
1 a1 {# W5 h# i" E+ }, L1 L2.6 关注领域的差异
* M- p% Q( m3 P7 }: v$ |4 k
# x" r9 i" w# c1 X7 K' C' j# p# q. M' p1 U0 Z
1 f, V' E3 E Y( j1 \9 P
敏捷开发关注项目范围和客户价值。在敏捷软件开发中,软件产品的范围是指它的特性和功能。客户价值的优先次序是,在每个sprint结束时,你接受反馈并在下一个周期中实现改变。精益软件开发是关于改进过程流和质量,重点是过程改进和质量(目标是零缺陷),这通常使用一种称为价值流映射的方法来实现。什么是价值流映射? 价值流映射是一种用于将产品创建和交付给客户之间的一系列事件可视化的方法。" a. }+ S D4 w: i8 f9 F) \ M/ `
% J! k5 v- f2 z
4 e, I, {$ {7 L, {- v( c1 w0 E4 N9 A
$ X7 y( n3 t; Z! f: G/ ~
2 F( M8 n! R2 y8 n& x3 T7 E ! `/ J; B3 d1 ^
9 e8 g1 O# B% M" w
% |( f4 _- u" [9 S G( U% P4 R/ i/ N$ W" c0 o- o0 y% {
知道为什么人们经常把敏捷框架分组并精益生产吗?这是因为两种方法都有共同的价值,比如快速适应变化的能力。以下是精益、敏捷的相似之处。
z- S8 O6 \1 o
9 R! H" g0 [( r, o4 x' Y# T" ^- 持续改进: 两种方法都关注于定期检查工作方法以寻求可能的改进。
) X8 u' t% i$ V4 O2 c ; o/ ^/ n, t) ]- D, |7 l/ G3 A. T
; \# g0 T c3 x4 I# s. s; |; r
+ f1 V; r) c6 @$ H2 \6 u# J: K+ J) m H% K4 Z+ I! M
- 客户价值优先: 无论是敏捷积极参与客户反馈,还是精益关注交付质量,都旨在为客户提供更多的价值。
( O% w# h0 w9 V: `+ p* B/ z P 9 W( B, W% ?% Q& \0 k& R- ?6 z
: M! I( l( Q; j& d
A, X( d1 q: E8 F5 O' e' ^) p* ]
2 ~6 w9 |$ y% y3 a, _; P4 o
4 M a; t. X3 ^4 V/ [, b+ g
+ s0 k! p' Q1 b% h U1 b) p/ [- 高效的时间表: 敏捷方法在频繁的版本发布中部署产品,而在精益项目管理中,开发过程包含尽可能少的步骤。这两种方法都关注于保持效率。3 [7 z# y; G' j; z, i4 J* d
% u8 r% q' Q+ n; v6 ^
) S" ?! w1 a* _8 t) ~- O9 m
6 ~. u P0 F3 \3 j5 |; q
# r4 O& d! L' y) o! Z( m
5 ~7 ~5 G) @# K2 l2 `( Q! |5 E* T6 [
- 持续的结果流: 通过将开发过程分解为多个部分,敏捷不断地以增量的方式交付价值,而精益则不断地消除浪费,从而产生价值。(IDCF)
3 ?8 N" O y, M4 n9 q% Y
% {6 E0 _" j$ \) v2 d. g6 x3 I7 \3 \2 R- t8 q
|