user story mapping
DESCRIPTION
A prioritized user story backlog helps to understand what to do next, but is a difficult tool for understanding what your whole system is intended to do. A user story map arranges user stories into a useful model to help understand the functionality of the system, identify holes and omissions in your backlog, and effectively plan holistic releases that delivery value to users and business with each release.TRANSCRIPT
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<8.,4.*/"<$($-"&-)48912"=2.*/
=2$-">1)-?"@'AA.*/
#$%"&'()*BA'()*C'9;6)-/
5556'/.,$A-)48914$2./*69);
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<8-"/)',2"'*4"'/$*4'"1)4'=
!"#$%&'(#)*&+"&,-(&+.(&,-()&-+")/&0#12$"3&#-&#&4#/&+"&5(-1)60(&,-()7-&(89()6(*1(&46+.&/",)&9)"5,1+
&'-1">?"@'AA.*/"82$-"21)-.$2
! B2$-"21)-="$22$*C',2
! D$,,.*/"21)-.$2"'E)81"10$"82$-"$FA$-.$*9$
! @'AA.*/"82$-"21)-.$2"E'2$4")*"$FA$-.$*9$
&'-1"G?"&,'**.*/"3',8'E,$".*9-$;$*1',"-$,$'2$2
! H4$*CI=.*/"A-)4891"/)',2"10'1"4$,.3$-="3',8$
! J,.9.*/"10$"21)-=";'A".*1)"3',8'E,$"-$,$'2$2
G
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Starting with the
User Story
What do you know about user stories?
What do you like about user stories?
What causes you trouble with user stories
<
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2$-"=1)-.$2"'-$"4.%$-$*1"10.*/2"1)"
4.%$-$*1">$)>,$666
!"?@A"=184.)2
B
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2$-"=1)-.$2"'-$";8,>?@8-@)2$"10.*/2
=1)-.$2"'-$"'A
! <2$-B2"*$$4
! &-)4891"4$29-.@>)*
! &,'**.*/".1$;
! C)D$*"E)-"'"9)*3$-2'>)*
! F$90'*.2;"E)-"4$E$--.*/"
9)*3$-2'>)*
G
!"Kent Beck coined the
term user stories in
Extreme Programming
Explained 1st Edition, 1999
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<1)-.$2"/'.*"4$1'.,")3$-"=;$
>6 <1'-1"5.10"!"#$%&
?6 744"'"'()'*+&",&+'-*.#()"
2);$"82$"10.2"82$@8,"1$;A,'1$B
As a [type of user]
I want to [perform some task]
so that I can [reach some goal]
C6 744")10$-"-$,$3'*1")($&++"
+.&'*/'!#()++")-"+0&$'1&+
D6 E$@)-$"F8.,4.*/"2)G5'-$"5-.1$"
!''&.$!)'&"'-*$&-*!"!"#$%&#%$'%
()#$%$"')%$'*+'%&#)',-
H
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
7/.,$"9821);$-2")-"<-)4891")5*$-"
<-.)-.=>$"21)-.$2".*1)"'"?'9@,)/
7"9),,$9=)*")A"21)-.$2"A)-"'"
2)B5'-$"<-)4891".2"
-$A$--$4"1)"'2"10$"!"#$%&'(
)*&+,#-
C0$"?'9@,)/".2"<-.)-.=>$4"
2890"10'1"10$";)21"
3',8'?,$".1$;2"'-$"0./0$21
D
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Let’s talk about the nature
of multi-purpose things(yes I’m going meta)
<
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2$-"=1)-.$2"'-$"!"#$%&'()"!*+,-.
>
?$-$@2"10$"A*$"B-.*1")*"C)8*4'-D")CE$912F
G7"C)8*4'-D")CE$91".2"'"9)*9$B1".*"2)9.),)/D"1)"4$29-.C$".*H)-;'I)*"
82$4".*"4.%$-$*1"5'D2"CD"4.%$-$*1"9);;8*.I$26"/0+()&'+)12&.3,4)
5$-+'1'+-+%)%56+'+$-2()&,'"..),"77#$53+.)!#-)85-0)+$"#90)
577#-&!2+),"$-+$-)-")7&5$-&5$)5$-+9'5-(J"KKL.M.B$4.'
G/0+()&'+)8+&:2().-'#,-#'+%)5$),"77"$)#.+4)&$%)!+,"7+).-'"$92()
.-'#,-#'+%)5$)5$%5;5%#&2<.5-+)#.+="N0$D";'D"C$"'C21-'91")-"9)*9-$1$6"
N0$D"0'3$"4.%$-$*1";$'*.*/2".*"4.%$-$*1"2)9.',"5)-,42"C81"10$.-"
21-8918-$".2"9);;)*"$*)8/0"1)";)-$"10'*")*$"5)-,4"1)";'M$"10$;"
-$9)/*.O'C,$";$'*2")H"1-'*2,'I)*6"N0$"9-$'I)*"'*4";'*'/$;$*1"
)H"C)8*4'-D")CE$912".2"M$D".*"4$3$,)B.*/"'*4";'.*1'.*.*/"9)0$-$*9$"
'9-)22".*1$-2$9I*/"2)9.',"5)-,426J"KK"P$./0"Q"R-.$2$;$-
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2$-"=1)-.$2"'91"'2"10$">)8*4'-?"1)"@'9.,.1'1$"
9)*3$-2'A)*">$15$$*";'*?"B$)B,$
CD
82$-
How do I
describe to you
what I want?
How
do I understand
users and their
needs?
<E"B$-2)*
What are the
details of this
feature I need
to specify?
F7
What are
the details of
what I need to
build today?4$3$,)B$-
How
do I validate
this work is
done?1$21$-
How
do I schedule
this work and
track it its &G
What are the
things my
product needs to
be successful?
>82.*$22",$'4$-
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<81"2.=$"',5'>2";'($-2666
?)5"@./".2"10$"21)->"5$"
5'*1"1)"1',A"'@)81B
CC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
7*4+".1<2"$'2="1)"/$1",)21".*"10$"20$$-"
*8;>$-")?"10$;
@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
7*4+"'2"5$"21'-1";)3.*/"<)-5'-4+"0)5"4)"
5$"21'=")*"1-'9>?
@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2$-"=1)->"?'@@.*/".2"'*"'*"'@@-)'90"1)"
!"#$%&'&%#"!"#"("&)"&*'&%#+82$-"21)-.$2
<*,.A$"1>@.9',"82$-"21)->"
B'9A,)/2+"=1)->"?'@2C"
! ;'A$",&-&./0"10$"5)-AD)5")-"
3',8$"90'.*
! 20)5"10$""0/$*)%-1&2-")E",'-/$-"
21)-.$2"1)"10$.-"90.,4"21)-.$2
! 0$,@"9)*F-;"10$"3)42/050%0--"
)E">)8-"B'9A,)/
! @-)3.4$"'"82$E8,"3)%5065"E)-"
@-.)-.GH'G)*
! &,'*"-$,$'2$2".*"9);@,$1$"'*4"
,$/7$./0+-/&30-")E"E8*9G)*',.1>6
IJ
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2$-"=1)->"?'@@.*/".2"'*"'*"'@@-)'90"1)"
!"#$%&'&%#"!"#"("&)"&*'&%#+82$-"21)-.$2
AB
=1)->"?'@2"28@@)-1"10$"
@-.;'->".*1$*1")C"82$-"21)-.$2+"
"&,-+.&/,0//&)%
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
The foundational building
block of a stories that say
what people are doing
(user tasks)
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<.-21",$1=2"4)"'"!"#$%&'()*)#+,-)(1)"
8*4$-21'*4"'">$5"9)*9$?12
@0'1"5$-$"',,"10$"10.*/2"A)8"4.4"1)"/$1"-$'4A"1)"B$"
0$-$"1)4'AC
! D1'-E*/">-);"10$";);$*1"A)8"5)F$"8?"8*E,"A)8"
'--.3$4"0$-$
! G*"'"20$$1")>"?'?$-+"1'F$"'">$5";.*81$2"1)",.21"10$"
10.*/2"A)8"4.4
HI
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
What’s common about the items
each of you wrote down?
What was different?
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
&$)<,$"'90.$3$"/)',2"10-)8/0".*1$-'9=)*
problem or
goal How I’d like to feel, or what
I’d like to achieve
Take some
action action evaluation Did that action deliver the results I
expected?
goal evaluation Is my goal met or problem
resolved?
the worldInformation and tools
>?
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
problem or
goal How I’d like to feel, or what
I’d like to achieve
<0.*=")>"10-$$",$3$,2?"/)',+"1'2=+"'*4"1)),
the worldInformation and tools
Take some
action action evaluation Did that action deliver the results I
expected?
goal evaluation Is my goal met or problem
resolved?
goal
task
tool@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<0.*=")>"10-$$",$3$,2?"/)',+"1'2=+"'*4"1)),
goal
task
tool@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<)=5'-$"9)*1'.*2">$'18-$2"10'1"28??)-1"'"
3'-.$1@")>"1'2A2"'*4"'"3'-.$1@")>"/)',2
software
goals
tasks
toolsfeaturesBB
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69); <=
User tasks make ideal
user stories:
Title: Take a shower
As an instructor
I want to take a shower
So that I don’t offend my colleagues
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
user story
<*"=-'9>9$"82$-"21)-.$2";'?"@$"5-.($*"1)"4$29-.@$"
82$-"1'2A2")-"10$"1)),2"10'1"28==)-1"10$;""
software
tasks
features
goalsAs a weekend gardener
I want to dig a hole
so that I can plant a tree
B)-$"1'2AC9$*1-.9D
As a weekend gardener
I want a shovel
so that I can [dig a hole to]
plant a tree
B)-$"1)),C9$*1-.9D
E)-"F$'18-$C9$*1-.9G"
HI
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Organize user stories into a
map that communicates
experience
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<="'--'*/.*/"'9>3.1="'*4"1'2?@9$*1-.9"21)-="
9'-42"2A'>',,=+"5$"9'*"1$,,"B.//$-"21)-.$2C$,,"'"B./"21)-=")D"10$"A-)4891"B="21'->*/"5.10"10$";'E)-"82$-"
'9>3.>$2"10$"?.)2?"5.,,"B$"82$4"D)-
! 7--'*/$"'9>3.>$2",$F"1)"-./01".*"10$")-4$-"=)8G4"$HA,'.*"10$;"1)"
2);$)*$"50$*"'2?$4"10$"I8$2>)*J"KL0'1"4)"A$)A,$"4)"5.10"10.2"
2=21$;MN""
time
OP
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<="'--'*/.*/"1'2>?9$*1-.9"21)-="9'-42"
2@'A',,=+"5$"9'*"1$,,"B.//$-"21)-.$2744"1'2>?9$*1-.9"21)-.$2".*"8*4$-"$'90"'9A3.1=".*"5)->C)5")-4$-"
,$D"1)"-./016
! EF"=)8"5$-$"1)"$G@,'.*"1)"2);$)*$"50'1"'"@$-2)*"[email protected]',,="4)$2".*"10.2"
'9A3.1=+"'--'*/$"1'2>2".*"10$")-4$-"=)8H4"1$,,"10$"21)-=6"":)*H1"/$1"1))"
8@A/01"'B)81"10$")-4$-6
time
IJ
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<="'--'*/.*/"1'2>?9$*1-.9"21)-="9'-42"
2@'A',,=+"5$"9'*"1$,,"B.//$-"21)-.$2C3$-,'@"82$-"1'2>2"3$-A9',,=".D"'"82$-";'="4)")*$")D"2$3$-',"1'2>2"'1"
'@@-)E.;'1$,="10$"2';$"A;$
! FD".*"1$,,.*/"10$"21)-="F"2'="10$"2=21$;2G"82$-"[email protected]',,="H4)$2"10.2")-"10.2")-"
10.2+"'*4"10$*"4)$2"10'1+I"H)-G2I"2./*',"'"21'9>.*/"3$-A9',,=+"H'*4"10$*G2I"
2./*',"21$@@.*/"0)-.J)*1',,=6
time
KL
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<0$";'="20)52"4$9);=)2.>)*"'*4"
1?=.9',"@)5"'9-)22"10$"$*>-$"2?21$;
A$'4.*/"10$"'9>3.>$2"'9-)22"10$"1)=")B"10$"2?21$;"0$,=2"82"
8*4$-21'*4"$*4C1)C$*4"82$")B"10$"2?21$;6""D<',E"10-)8/0"F821"
10$2$"50$*"1',E.*/"5.10"=$)=,$"5.10"20)-1"'($*>)*"2='*26G
time
H$,)5"$'90"'9>3.1?+")-",'-/$"
21)-?"'-$"10$"90.,4"21)-.$2"10'1"
;'E$".1"8=
IJ
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
&-)4891":.29)3$-<"=)->20)?2
@2$"?-)4891"4.29)3$-<"5)->20)?2"
1)"8*4$-21'*4"10$"?-)4891"5$A-$"
B8.,4.*/"'2"'"82$-"21)-<";'?
:8-.*/"4.29)3$-<"2$22.)*2"
4.29822C
! 10$"!"#!$%&")D"10$"?-)4891+"
'*4"0)5".1"9-$'1$2"3',8$"D)-"
10)2$"B8.,4.*/".1
! 10$"'"%($)&#%"50)"5.,,"B8<"10$"
?-)4891
! 10$""%&#%"50)"5.,,"82$"10$"
?-)4891
! 0)5"10$<A,,""%&"10$"?-)4891
EF
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
&-)4891":.29)3$-<"=)->20)?2
=0)"?'-@9.?'1$2A
! !"#$%&'()*#+"B"10)2$"50)"C-.*/"
.*D)-;'@)*+"28CE$91";'($-"
$F?$-@2$+"'*4"4.-$91"$F?$-.$*9$
! !"#$,-..%(&-/#"B"10)2$"50)"
0'3$"4$2.-$"1)"C8.,4"'"/-$'1"
?-)4891
! !"#$+#0%.%(&$*-1#)."B"10)2$"
50)"9'*";'>$"1)8/0"4$9.2.)*2"
'C)81"50'1"'*4"0)5";890"1)"
C8.,4
! !"#$+(#)."B"-$?-$2$*1'@3$2"
D-);"10$"1$';"50)"5.,,"C8.,4"
10$"?-)4891"2),8@)*
GH
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<8.,4.*/"'"21)-=";'>"0$,>2"?'9.,.1'1$"
4.29822.)*"@"A81"-$B8.-$2"'"A.1")?"2>'9$
Gary Levitt, owner & designer of Mad Mimi
CD
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
7"21)-<";'=">)-"'"-$'2)*'?,$"2.@$4"2<21$;"
9'*"A,,"'"-));
BB
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Product Discovery Looks Like this:
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<1)-=">'?"@'-.'A)*2
• >'?2"'B)81"2=21$;"
B$0'3.)-
• C$'18-$D9$*1-.9"
;'?2
• 72D.2"?-)4891";'?2
• E0'1"$,2$F
GH
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
The easiest way to write
user stories is by telling
user stories(hopefully this won’t come as a surprise)
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Let’s try one together...
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Discuss, fill in, refine the
map, and test for
completeness
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
:.29822.)*2")3$-"21)-<";'=2"0$,="4-.3$"
)81";)-$"4$1'.,2
>?
Repeated review of the story map with multiple users and subject matter experts will help test the model for completeness
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<-$'=*/">$-2)*'2"?)-"4.%$-$*1"@.*42")?"
>$)>,$"82.*/"A)8-"2A21$;
BC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
7"<-'/;'=9"<$-2)*'".2"'">8.9?"$@<,)-'=)*"
)A"50'1"5$"?*)5"'B)81")8-"82$-2
CD
E8.,4"10$;"1)"21'-1"4.29822.)*"
'B)81"50'1"5$"?*)5+"'*4"
4)*F1
E8.,4"10$;"1)"0$,<"4-.3$"
;'<<.*/"G)8-"82$-"
$@<$-.$*9$"82.*/"21)-.$2
:)*"H)-;'*http://www.jnd.org/dn.mss/personas_empath.html
“..people can often
mine their own
extensive experiences to
create effective
Personas...”
:'3.4"I822;'*
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<=$190"'">-'/;'?9">$-2)*'"10.*=.*/"
'@)81"2);$)*$"4.%$-$*1"A-);"B)8-2$,A
CD
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<="'--'*/.*/"'9>3.1="'*4"1'2?@9$*1-.9"21)-="
9'-42"2A'>',,=+"5$"9'*"1$,,"B.//$-"21)-.$2744"'"3$->9',"'C.2"1)".*4.9'1$"*$9$22.1=
D)3$"1'2?2"8A"'*4"4)5*"10.2"'C.2"1)".*4.9'1$"0)5"*$9$22'-="10$="'-$"1)"
10$"'9>3.1=6
! E)-"'"82$-"1)"2899$22F8,,="$*/'/$".*"10.2"'9>3.1=+".2".1"*$9$22'-="10$="A$-F)-;"
10.2"1'2?G""HF".1I2"*)1"'B2),81$,="*$9$22'-=+"0)5"9-.>9',".2".1G
time
necessity
JK
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<="'--'*/.*/"'9>3.1="'*4"1'2?@9$*1-.9"21)-="
9'-42"2A'>',,=+"5$"9'*"1$,,"B.//$-"21)-.$2C$21"10$"D1)-="E'A"B="1$,,.*/"B.//$-"21)-.$2"5.10".1
! F0))2$"'*"'9>3.1="1)"21'-1"5.10
! G0$*"-$'4.*/",$H"1)"-./01"82$"10$"9)*I8*9>)*"J'*4"10$*K"1)"9)**$91"9'-42".*"10$"21)-=
! G.10"9'-42".*"10$"2';$"-)5"82$"J)-K"1)"9)**$91"9'-42".*"10$"21)-=
! L)-"9'-42"B$,)5"10$"1)A+"J'B2),81$,="*$9$22'-=K"'M.2+"82$"10$"A0-'2$"J;./01")A>)*',,=K"1)"
9);;8*.9'1$")A>)*',.1=
! F0)2$"'"9)*9-$1$"82$-"*';$"1)"0$,A"1$,,"10$"21)-=
time
necessity
NN
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<="'--'*/.*/"'9>3.1="'*4"1'2?@9$*1-.9"21)-="
9'-42"2A'>',,=+"5$"9'*"1$,,"B.//$-"21)-.$2
time
necessity
CD
“Steve knows the title of what he’s looking for. He steps up to
the kiosk and searches by title. Optionally he might have
searched by artist. After seeing titles that match what he typed
in, Steve views the price new and used, and then views the
status – whether it’s in stock or not. He notices it’s in stock as
both new and used, so then Steve views the location in the store
for the used title.”
E)>9$"10$"B),4"F'9$4"82$-"1'2?2"
F-);")8-"21)-=";'A
E)>9$"10$"9)*G8*9>)*2"10'1"?*.1"10$"
9'-42"1)/$10$-".*1)"'",)*/$-"21)-=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<0$"82$-"21)-=";'>"9)*1'.*2"15)"
.;>)-1'*1"'*'1);.9',"?$'18-$2<0$"!"#$!%&'")?"10$"'>>,.9'@)*".2"10$",.21")?"
$22$*@',"'9@3.@$2"10$"'>>,.9'@)*"28>>)-12
<0$"(")$*&+,-$')'.%&".2"10$"2)A5'-$"5$"B8.,4"10'1"
28>>)-12"10$",$'21"*8;B$-")?"*$9$22'-="1'2C2"'9-)22"
10$"?8,,"2>'*")?"82$-"$D>$-.$*9$
time
necessity
The backbone
The walking skeleton
EF
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2.*/"4.29822.)*+"=,,".*">)8-"21)->";'?
@)-A"1)/$10$-"'2"'"1$';
B))A"C)-"!"#$%&!'($)#!*+*
! @0'1"$,2$";./01"82$-2")C"10$"2>21$;"0'3$"
4)*$"10'1"4.4*D1"9);$"8?".*">)8-"29$*'-.)2E
B))A"C)-"$,-$.'/&*
! @0'1"9)8,4"/)"5-)*/+"'*4"50'1"5)8,4"10$"
82$-"0'3$"1)"4)"1)"-$9)3$-E
F)*2.4$-"/#0$%)1*$%*
! @0'1";./01")10$-"1>?$2")C"82$-2"4)"1)"-$'90"
10$.-"/)',2E
G*.1"',"10$2$"'44.H)*',"21)-.$2".*1)">)8-";'?
IJ
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Slice the map to find ideal
incremental releases
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<.3$*"21)-=";'>")-/'*.?$4"3$-@9',,="A="
*$9$22.1=+"5$"*$$4")*,="2,.9$"1)">,'*
B0))2$"9)0$-$*1"/-)8>2")C"C$'18-$2"10'1"9)*2.4$-"10$"2>'*")C"A82.*$22"
C8*9@)*',.1="'*4"82$-"'9@3.@$2
D8>>)-1"',,"*$9$22'-="'9@3.@$2"5.10"10$"E-21"-$,$'2$
F;>-)3$"'[email protected]="28>>)-1""'*4"'44"'44.@)*',"'9@3.@$2"5.10"28A2$G8$*1"-$,$'2$2
time
optio
nalit
y
necessary
lessoptional
moreoptional
first release
second release
third release
HI
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<.3$*"21)-=";'>")-/'*.?$4"3$-@9',,="A="
*$9$22.1=+"5$"*$$4")*,="2,.9$"1)">,'*
BC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
It’s easy to make release
“slices” and move
detailed stories into them
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
744.*/"1'<$",.*$2"1)"10$"5',,",$12"
<'-=9.<'*12")-/'*.>$"21)-.$2".*1)",'?$-2
@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
744.*/"1'<$",.*$2"1)"10$"5',,",$12"
<'-=9.<'*12")-/'*.>$"21)-.$2".*1)",'?$-2
@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
744.*/"1'<$",.*$2"1)"10$"5',,",$12"
<'-=9.<'*12")-/'*.>$"21)-.$2".*1)",'?$-2
@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
&,'**.*/".*9-$;$*1',"-$,$'2$2"9'*"<$"
='9.,.1'1$4"'2"'"9),,'<)-'>3$"$3$*1
??
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<8.,4.*/"<$($-"&-)48912"=2.*/
=2$-">1)-?"@'AA.*/
#$%"&'()*BA'()*C'9;6)-/
5556'/.,$A-)48914$2./*69);
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Bonus Material (Not addressed in the Story Mapping session)
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Iteratively and
incrementally construct
software
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<-'4.=)*',"2)>5'-$"4$3$,)?;$*1"@A$2"29)?$"
10$*"$2=;'1$2+"'*4"'($;?12"1)"@A"=;$"'*4"9)21
Traditional
software
development
Scope
Time Cost
(resources)
BC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
7/.,$"4$3$,)<;$*1"=>$2"?;$"'*4"9)21+"10$*",$3$-'/$2"
.1$-'?)*"'*4".*9-$;$*?*/"1)";'>.;.@$"29)<$"
Traditional
software
development
Scope
Time Cost
(resources)Scope
Time
Cost
(resources)
Agile
software
development
AB
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<$3$-'/$"'"20'-$4"8*4$-21'*4.*/")="4$2.-$4">-)4891"
/)',2"1)";.*.;.?$"29)>$"50.,$";'@.;.?.*/"3',8$
Traditional
software
development
Scope
Time Cost
(resources)Scope
Time
Cost
(resources)
Agile
software
development
Target business goals &
outcomes AB
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
To release benefit on a
schedule we’ll need to
leverage incremental and
iterative thinking(What’s the difference?)
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<.*9-$;$*=*/>"?8.,42"'"?.1"'1"'"=;$
1 2 3 4 5
Incrementing calls for a fully
formed idea.
And, doing it on time requires
dead accurate estimation.
@A
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<.1$-'=*/>"?8.,42"'"-)8/0"3$-2.)*+"
3',.4'1$2".1+"10$*"2,)5,@"?8.,42"8A"B8',.1@
1 2 3
A more iterative allows you to
move from vague idea to
realization making course
corrections as you go.
4 5
CD
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);193 <=
>'*?")-/'*.@'A)*2"9)*2.4$-"-$3.2.*/"10$"2';$"
B8*9A)*',.1?"'2"B'.,8-$6""C1$-'A)*".2"*)1"
1),$-'1$46
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
72"'"<-)4891")5*$-+"=)8"*$$4"'";)-$"-$>*$4"
8*4$-21'*4.*/")?"@20.<<'A,$B
CC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
tool
<$$=.*/")8-"82$-"21)-.$2"1'2>?9$*1-.9"
',,)5$4"82"1)"4$@$-"2),8A)*"4$9.2.)*2
user goal
user task
BC
hold my options open
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<'=$">$'18-$"4$9.2.)*2".*"10$"9)*1$?1")>"
@;$"'*4"A84/$1",.;.1'@)*2
hole (to put the flower in)
dig hole
?
BC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<);;.1"1)"2'=2>?.*/"82$-"*$$42+"*)1"1)"
2@$9.A9">$'18-$2
hole (to put the flower in)
dig hole
?
BC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
51
&-)48912"5.10"2.;.,'-"<$'18-$2")=$*"3'->"
28?21'*@',,>".*"10$"A-.9$"5$"A'>
low cost moderate cost high cost
B0.*C"'?)81"10$"0./0D,$3$,"<$'18-$2"
.*"'"9'-"D"5$,,"'"?82".*")8-"$E';A,$
71"'"0./0",$3$,+"',,"<$'18-$2"'-$"
*$9$22'->
F81"5$"C*)5"10'1"',,"?82$2"4)*G1"
0'3$"10$"2';$"A-.9$
H'90"$22$*@',"<$'18-$"3'-.$2".*"
28?I$9@3$"J8',.1>"'%$9@*/"10$"K*',"
A-.9$
LM
$*/.*$
1-'*2;.22.)*
?-'C$2
282A$*2.)*
2$'12
21$$-.*/"50$$,
N"
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<'*)"9'8=)*2"82"1)"9)*2.4$-">8',.1?"'2"@$.*/"
9);A)2$4")B"!"#$%&'$"'*4"()"#$%&'$"$,$;$*12
C:.29822.)*2")B">8',.1?"0'3$"-$3),3$4"
'-)8*4"10$"15)"'2A$912")B"28@D$9=3.1?"
'*4")@D$9=3.1?"2.*9$"10$"=;$")B"
7-.21)1,$6"
E;@$44$4".*"10.2")@D$9=3$F28@D$9=3$"
2A,.1".2"10$".4$'"10'1"!"#$%&'$*+),-./0*
1$2/,.3(*/!*/4$*5%!36!27,3%$*/!*
2$+).2$7$3/(8"50.,$"()"#$%&'$*+),-./0*
1$2/,.3(*/!*/4$*5(,&(6,%&!3*!6*)($2(9GH
FFI)-.'J."<'*)
There’s more to
me than that
silly survey
technique!
KL
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<'*)"$=>,'.*2"10-$$"/$*$-',"9,'22.?9'@)*2"A)-">-)4891"
A$'18-$2B"!"#$%&'()#+"*+)%,-!)+#-*+'.#+"'*4",).-/&$)0#1
2"#$%&'()#C0$">-)48912";821"0'3$"10.2"
A$'18-$2"A)-";$"1)"D$"
9)*2.4$-"10$">-)4891"
'99$>1'D,$
3+)%,-!)+#-*+'.#C0$";)-$")A"10.2"E"/$1+"10$"
D$($-
4).-/&$)0#E",)3$"10.2"$,$;$*1")A"10$"
>-)4891F
“This car has many flaws. Buy it
anyway. It’s so much fun to
drive”
-- from a NY Times review of the
Mini Cooper
GH
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<$='-'1$")>?$9@3$"A8',.1B"C-);"28>?$9@3$"
A8',.1B
D>?$9@3$"A8',.1B"-$C$-2"1)"10$"3.2.>,$";$'28-'>,$+"'*4"
$'2.,B"3',.4'1$4"90'-'91$-.2@92")C"10$"=-)4891"828',,B"
.*"-$,'@)*"1)"10$"=-)48912E"2=$9.F9'@)*26"
! :)$2"10$"=-)4891"=$-C)-;">8/"C-$$"'2"2=$9.F$4G
! HI=$91")>?$9@3$"A8',.1B"1)">$"0./06
!"#$%&'(%)*"+,-./)0%1%02).3).4%)25%&-6&+'37)
30)5038"&.)8%2-97)&43-&%2)/3"):+;%)+2)+)
5038"&.)3<7%0=)"J0$2$"90).9$2"'%$91"10$"
=-)4891"82$-2E"=$-9$=@)*")C"A8',.1B
! K2"10$"=-)4891"2.;=,$"1)"82$G
! K2"10$"=-)4891"$L9.$*1"1)"82$G
! :)"K",.M$"82.*/"10$"=-)4891G
NO
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<2$"10$"='*)"9,'22.>9'?)*2"1)"@)10"
A-.)-.?B$"'*4"2A,.1
Brakes
(must have)
Basic brakes
(must have)
Stopping
distance(one dimensional)
Anti-locking
(delighter)
Cool dashboard
light when
slipping
(delighter)
CD
=$$A".*";.*4E"F)8";821"G*)5"F)8-"9821);$-2"'*4"82$-2"1)"
4$1$-;.*$"28@H$9?3$"3',8$6
I*$"A$-2)*J2"4$,./01$-";'F",$'3$")10$-2"'A'10$?96""
7*)10$-J2";821"0'3$".2"82$,$22"1)")10$-"9821);$-2
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
features
release
en
gin
e
tra
nsm
issio
n
su
sp
en
sio
n
bra
ke
s
ex
teri
or
bo
dy
Inte
rio
r se
ati
ng
tire
s
sprint
1234
Product goal: (in 4 sprints) be driving the coolest bus in town
<=
>$1?2",))@"'1"50'1"0'AA$*2".B"5$"1'@$"'"
*'.3$".*9-$;$*1',"'AA-)'90"1)"9)*21-89C)*
>$1?2"21'-1"5.10"10$"D'2.9"B$'18-$2")B")8-"D826
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
1 2 3
Iterating affords building up quality over time
<$"9'*",$3$-'/$".1$-'=)*"1)">8.,4"8?"
@8',.1A
BC
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<)*2.4$-"10$2$"=)8-"21)->"2?,.@*/"
0$8-.2A92"10'1"B8.,4"8?"C8',.1>!"#$%&$'$(()*+%
D)-"10$"=$'18-$"1)"B$";.*.;',,>"
4$;)*21-'B,$"E"B81"*)1"-$,$'2'B,$+"
50'1".2"10$";.*.;',"=8*9A)*',.1>
!"#$%&'()*)+,-$)./01),2&3)2'4'55#-3)
6'&75)#27)2,)8#&/7#9,2
,"-".)/)*+%0%1/$2).)/)*+"
F0'1"5)8,4"'44"10$"'B.,.1>"1)"?$-=)-;"
10$"82$-"1'2G".*"4.%$-$*1"5'>2H""744.*/"
.*"28B"1'2G2"10'1"'-$")?A)*',,>"
?$-=)-;$4H
!"#$%&'()#)+,-$)./01),%9,2#&)6'&75:)
7#0')&,,;<%)0,,&5:)/2%<0)0-#25	,2),2)
7#0'5
3"4$*+"
F0'1"5)8,4";'G$"10.2"=$'18-$"2'=$-"1)"
82$H""D)-"B)10"10$"82$-+"'*4"=)-"10$"
B82.*$22"?'>.*/"=)-"10$"2)I5'-$H
!"#$%&'()/2%<0)8#&/7#9,2:)'2+,-4'$'20)
,+)=<5/2'55)-<&'5)5<41)#5)4-'7/0)4#-7)
8#&/7#9,2))
5(".)/)*+6%7$#48#9":'$6%3$2%
;--$"/
F0'1"5)8,4";'G$"10.2"=$'18-$"$'2.$-"1)"
82$H"J)-$"4$2.-'B,$"1)"82$H""D'21$-"1)"
82$H
!"#$%&'()#<0,>4,$%&'9,2:)5'"3)8/5<#&)
7'5/?2:)5%''7);'35
KK
* Adapted from Gerard Meszaros’ “Storyotypes”
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
user
tasks to s
upport
releaseD D D D D I IB- C C- D D D DA- B B- B B B B-A- A B A A- A- B-
sprint
1234
Product goal: (in 4 sprints) be driving the highest quality bus possible
<=
>8.,4.*/"8?"@8',.1A".1$-'B3$,A"'*4"
.*9-$;$*1',,A"20.?2"10$"C$21"?-)4891"?)22.C,$D6 E$"F*)5"$'90"21)-A"9'*"C$"2?,.1".*1)"'1",$'21"G)8-"?'-12
H6 I'-,A".1$-'B)*2"21-.3$"1)"C8.,4"C'-$"*$9$22.B$2+",'1$-".1$-'B)*2"C8.,4"8?"
@8',.1A
J6 I3',8'B*/"-$'4.*$22"C'2$4")*"28CK$9B3$"@8',.1A"1)"8*4$-21'*4"4)*$*$22
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
:.3.4$"-$,$'2$"4$2./*"<"4$3$,)=;$*1".*1)"
10-$$"=0'2$2!"#$%$&'()*#+">8.,4"'"2.;=,$"2?21$;"2='*")@"*$9$22'-?"@$'18-$2"A-21"B"10$"
5',C.*/"2C$,$1)*
,%-.()*#+"744"D$E.F.,.1?"'*4"2'@$1?"*$E1
/$-'()*#+"G.*.20"5.10"9);@)-1+"=$-@)-;'*9$+"'*4",8E8-?
H$2$-3$"I;$".*"10$"-$;'.*.*/"10.-4"@)-"8*@)-$2$$*"'44.I)*2"
'*4"'4'=1'I)*2
timeuncertainty decreases over time
un
cert
ain
ty
OpeningGame
Build up necessities
Mid-GameBuild out
flexibility and business rule enforcement
End-GameRefine the UI and interactions, take
advantage of iterative learning
JK
Construx on the Cone of Uncertainty: http://www.construx.com/Page.aspx?hid=1648Visdos on the cone: http://www.implementingscrum.com/2008/02/19/vegas-hangover-enlightenment/
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
timeuncertainty decreases over time
un
cert
ain
ty
<0.2"=-)4891"/-)5.*/"21-'1$/>"2,)5,>"
?-.*/2"10$"=-)4891".*1)"@)9827*"'-A21"$*3.2.)*2"'*"$*A-$"='.*A*/"?>"21'-A*/"5.10"'"2B$190")-"'*"
8*4$-C='.*A*/"'*4"2,)5,>"?8.,4.*/"8="4$1'.,"
7==,>"10$"2';$"21-'1$/>"1)",$'-*"'?)81"10$"=-)4891"4);'.*"'2"D8.9B,>"
'2"=)22.?,$"E"1)"90'2$")81"8*9$-1'.*1>"?$@)-$"1))"0$'3.,>".*3$2A*/
OpeningGame
Build up necessities
Mid-GameBuild out
flexibility and business rule enforcement
End-GameRefine the UI and interactions, take
advantage of iterative learning
FG
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
End Game
Over time the value of
stories begin to
diminish signaling it’s
time for release
Mid Game
Once we’re confident
we have the “shape”
of the product right,
we begin to pile in
value
Opening
GameEarly stories emphasize
iteration and learning.
We need to be sure
we’re building the
right product
<))=.*/"'1"10$"-$,$'2$")>"?82.*$22"3',8$"
)3$-"@;$",$12"82"2$$"50'1A2"/).*/")*"0$-$B)"C*.20")*"@;$"
5$";'D"E1-.;"10$"
1'.,F"?D"4$>$--.*/"
21)-.$2")>";)4$21"
3',8$
time
cu
mu
lative
bu
sin
ess
va
lue
GH
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
End Game
Over time the value of
stories begin to
diminish signaling it’s
time for release
Mid Game
Once we’re confident
we have the “shape”
of the product right,
we begin to pile in
value
Opening
GameEarly stories emphasize
iteration and learning.
We need to be sure
we’re building the
right product
?,<;51-2",-"@0,7;<4"A-,8/'72'"*<B;10'7."
C'"5''"43'"715<,6'0D"E'-'F4"2*1-'7
G3'"1-6'05'",H"015A"
15"A-,8/'72'
I'*0-1-2"'*0/1'0"1H"
8'J0'"E;1/71-2"43'"
01234"@0,7;<4"
>1K2*4'5"015A
timeac
qu
ire
d p
rod
uc
t k
no
wle
dg
e
L#
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<8.4$,.*$2"=)-"-$,$'2.*/")*">;$
?@
A6 B0.*"21)-.$2"'//-$22.3$,C"48-.*/"$'-,C"2D-.*12"1)"
E8.,4"',,"$22$*>',"=8*9>)*',.1C"$'-,C6
F6 G8.,4"8D"=8*9>)*',.1C")*,C"'H$-"',,"*$9$22.>$2"
'-$".*"D,'9$6
@6 &-)1$91">;$".*"10$"I*',"2D-.*12"=)-"D-)4891"
-$I*$;$*16
J6 722$22"-$,$'2$"-$'4.*$22"'1"10$"$*4")="$'90"
2D-.*1"'2"D'-1")="D-)4891"-$3.$56
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Parting thoughts
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Questions?
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
<8.,4.*/"<$($-"&-)48912"=2.*/
=2$-">1)-?"@'AA.*/
#$%"&'()*BA'()*C'9;6)-/
5556'/.,$A-)48914$2./*69);