!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Jeff Patton
AgileProductDesign.com
Agile
Outside the CodeUsing agile discovery ideas to drive product success
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
A story about Gary and his rough start
creating a product using an agile
approach
4 strategies Gary used to course correct
Gary’s successful product today
#
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?
@''4"A*0B9""
C'D5"*">;51<1*-"E*551,-*4'"*F,;4"*"E0,7;<4"17'*9
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?*0@"8*-45"4,"A;1/7"*"B0,7;<4"C,0"
B',B/'"/1D'"31>5'/C
E3'"B0,7;<4"8,;/7"3'/B"
>;51<1*-5"<,//*A,0*4'
B/*-"B0,F'<45"*-7"2125
A;1/7"'/'<40,-1<"B0'55"D145
>*-*2'"*"A*-7">*1/1-2"/154
B0,>,4'"2125"430,;23"'>*1/
!"#$%&'&()%*+&*,-)%#./&
('.012,3&*,#1.4'+156
?*0@"<*//'7"14"!"#$!%&%G
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?*0@"A,;-7"*"43'"B'54"C*1/5"7'6'/,D'0"
3'"<,;/7
:0>'7"8143"*"D0,7;<4"6151,-."43'"4'*>"
2,4"54*04'79E
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?3'@";5'7"*"51>A/'"*21/'"*AA0,*<3."B0'*C1-2"
7,8-"8,0C"1-4,"5>*//"A*045"D";5'0"54,01'5
E,0C"A0,20'55'79""F*0@"5*8"20'*4"
5,G8*0'"B'1-2"B;1/4"'6'0@"7*@9H
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
:5"5,?8*0'"2'45"@;1/4."A*0BC5"<*53"
0'5'06'5"2,"7,8-
D
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
:5"5,?8*0'"2'45"@;1/4."A*0BC5"<*53"
0'5'06'5"2,"7,8-
D
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
What was going wrong?
%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
='4'0>1-1-2"'?*<4/@"83*4"4,"A;1/7"15"
71B<;/4
:21/'C5"51>D/'"54,0@"801E-2"
*-7"D01,01EF*E,-"15"51>D/'
G,,"51>D/'9
H$
I0'7"J0,,K5."
*;43,0",L"MN,"O1/6'0"J;//'4P."H%QR
“The hardest single
part of building a
software system is
deciding precisely what
to build.”
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Typical process:
<<
discovery delivery
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Bad agile process:
<=
delivery
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Good agile process:
<=
discovery
delivery
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
discovery: figuring out
what to build, and
validating those decisions
delivery: building it
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Think of a product you were
proud to have contributed to...
How did discovery happen
before and during the
project?(take 5 minutes and talk with someone near you)
<=
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Delivery:• Specify product to build
• Write code
• Test working software
• Document product
• Manage product delivery
Discovery:• Understand customers & market
• Understand competitors
• Understand users
• Distill business strategy into
product strategy
• Ideate product ideas
• Prototype user experience
• Validate prototype user
experience with users
• Create detailed UI design
• Validate working software with
users
• Compare expected market results
with actual market results
after delivery
?@
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
Common agile practice
today, and what’s missing
<=
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);
3 general roles:
team (delivers)
customer/product owner (discovers)
coach/ScrumMaster (supports &
facilitates)
<=
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?-"*21/'"7'6'/,@>'-4"8'A0'"1-6,/6'7"1-"
>*-B"-'54'7"<B</'5
product
release release
Sprint
daily story development
cycles
time
39© 2006-2009 Jeff Patton, All rights reserved, www.agileproductdesign.com
!""#$%&'()(%*+,#$%*('%+,#'(,(+-(-#*.#/'(+0#
12#,.%3#2('$."-#/(*4((%#21/,$&#'(,(+-(-
© 2006-2007 Jeff Patton, All rights reserved, www.agileproductdesign.com 40
public release
incremental delivery
incremental delivery
Sprint
daily story development
cycles
time
product
5#6778#9(:#;+<.%=#+,,#'$3>*-#'(-('?("=#444@!3$,(;'."1&*A(-$3%@&.) 67
!"#$$%$&'#$(')%*%+%"%,-'"../'(%0121$,'#,'
(%0121$,'#"3,4(1*
© 2006-2007 Jeff Patton, All rights reserved, www.agileproductdesign.com 40
public release
incremental delivery
incremental delivery
Sprint
daily story development
cycles
time
product
5'6778'910'!#:.$;'#""'2%&<,*'21*12)1(;'===>?&%"1!2.(4@,A1*%&$>@.B 6C
D<1',1#B'"%)1*'<121EF.@4*'.$'*G2%$,'&.#"*EH11G'#$'1-1'4G',.',<1'21"1#*1
D<1'G2.(4@,',1#B'"%)1*'<121EF.@4*'.$'21"1#*1'&.#"*EH11G'#$'1-1'4G',.',<1'2.#(B#G
!"#$%&'()*+&#,-".(*+('/-(0*++*12(3/4+-
© 2006-2007 Jeff Patton, All rights reserved, www.agileproductdesign.com 40
public release
incremental delivery
incremental delivery
Sprint
daily story development
cycles
product
5(6778(9-:(!4;#1<(4==("*2/'+("-+-",-$<(>>>?@2*=-!"#$%&')-+*21?� 66
Product Discovery
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
We’ll focus on 4 emergent agile
strategies that emphasize discovery:
1. Understand users and what they need
to succeed
2. Prioritize goals and users before
features
3. Make the product concept visible
4. Use both iterative and incremental
delivery strategies that maximize
discovery#?
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice #1: Understand
users to understand your
product
#?
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Gary assumed his users were just
like him, so he didn’t have to
think much about them.
The Rails expert assumed the
same.
#?
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
You aren’t your user. And
likely neither is your
client or customer.
#?
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?4*04"@A"/15B-2"'*<3"C1-7",D";5'0",D"A,;0"
E0,7;<4
F*<3"4AE'",D";5'0"3*5"5,>'431-2"43'AG7"/1C'"4,"
*<<,>E/153"8143"A,;0"E0,7;<4."83*4"15"14H
#I
J*-7"K*-*2'0
J*-7"L*-
K;51<1*-
M*5;*/"<,-<'04N2,'0
M/;@">*-*2'0
)0'55
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?,0'"4@A'5",B";5'05"C">,0'"4@A'5",B"
;5'5
?,0'"4@A'5",B";5'5"C">,0'"5,D8*0'
#E
F*-7"?*-*2'0
F*-7"G*-
?;51<1*-
H*5;*/"<,-<'04I2,'0
H/;J">*-*2'0
)0'55
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Different users don’t just do
different things
Different users value software
things... differently
#%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?@'4<3"*"/12348'1234"A'05,-*"4,"
;-7'054*-7"83B"B,;0";5'05"*0'-C4"/1@'"B,;
D$
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?0'*@-2"A'05,-*5"<*-"B'"C*54"*-7"
<,//*B,0*@6'
DE
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?0'*@-2"A'05,-*5"<*-"B'"C*54"*-7"
<,//*B,0*@6'
D#
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Premier Health User Constituencies
Patricia
Personal Health Advisor
• Experienced nurse, with
good phone and computer
skills
• Uses the application many
hours at a time, multiple
days a week
• Will receive training and
support
• Access to peers to ask
questions
“I want to efficiently help members and not have to worry about the technology while doing it”
Partner Physician Staff
• Experienced clinicians and
medical office staff.
• Desire to serve patients
better, but frustrated by
the economics that make
it difficult.
• Computer skills vary wildly.
• Fast paced office with a
big workload.
• Likely buried in paper
records
“I’m excited that Premier can offer my patients the extra attention I can’t. But I want to make sure that the extra record keeping isn’t a burden for my staff.”
Mary
Member
• 50+, above average
income
• Mixed health – some very
healthy, others managing
chronic problems
• Looking for better quality
health care – specifically
more help and advice than
a doctor and staff seem to
have time to give.
• Not computer phobic, but
not particularly skilled.
• Uses the application
infrequently from home.
“I want someone who can answer questions and give me advice.”
example
?0'*4'"51>@/'"A;1<B"
0'C'0'-<'"@*2'5"4,"5,<1*/1D'"
E,;0">,54"<01F<*/"@'05,-*5
GG
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?*7"?1>1@5"A054"51>B/'";5'0"B0,A/'5
CD
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Use lightweight user personas to
identify what you do and don’t
know about your users
Backfill with lightweight research
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice # 2: Identify and
prioritize goals and users
before features
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
=,-?4"<,-@;5'"@'*4;0'5"A,;"<0'*4'"B"A,;0"
!"#$"#"B"@0,>"C0,7;<4?5"%&$'(#
D,,7"C0,7;<4"2,*/5"@,<;5",-"-,4"E83*4F"4,"G;1/7"G;4"7'5<01G'"E83AF"
1-"43'"@,0>",@"G'-'H4"8'?//"0'<'16'
IJ
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
)0,7;<4"2,*/5.";5'05"*-7"*<?61?'5"5;@@,04'7"
AB"5,C8*0'"D,0>"*"7'@'-7'-4"31'0*0<3BProduct Goals
(Increase Revenue,
Reduce Costs)
User Types
(The people that will
use some solution to
meet their goals)
Activities &
Tasks
(performed by users
using software)
EF
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
)01,01?@1-2"2,*/5"*-7"'/1>1-*?-2"/,8"
A01,014B"2,*/5"3*5"<*5<*71-2"'('<45",-"5<,A'Product Goals
(Increase Revenue,
Reduce Costs)
User Types
(The people that will
use some solution to
meet their goals)
Activities &
Tasks
(performed by users
using software)
C%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
)01,01?@'"A,;0"2,*/5"B'C,0'"A,;"D01,01?@'"
A,;0"C'*4;0'5Product Goals
(Increase Revenue,
Reduce Costs)
User Types
(The people that will
use some solution to
meet their goals)
Activities &
Tasks
(performed by users
using software)
E$
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Identify your product goals and your users
What goals are most important to achieve
first?
What users are critical to support to reach
those goals?
Prioritize goals and users before digging too
deep into features
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice #3: Collaborate to create
visualizations that build shared
understanding
?#
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?@'-"83'-"8'"6'0A*//B"715<;55"17'*5."8'">*B"
1-<,00'<4/B"A'/1'6'"8'"3*6'"43'"5*>'";-7'054*-71-2
CD
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?'@0'5'-A-2",;0"17'*5"*5">,7'/5"*//,85";5"4,"
7'4'<4"1-<,-5154'-<1'5"1-",;0";-7'054*-71-2
BB
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?30,;23"715<;551,-"*-7"14'0*@6'">,7'/"A;1/71-2"
8'"*0016'"*4"*"540,-2'0"53*0'7";-7'054*-71-2
BC
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?51-2"43*4"<,>>,-";-7'054*-71-2"8'"<*-"
8,0@"4,2'43'0"4,"*0016'"*4"43'"5*>'",AB'<C6'5
DE
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?;1/71-2"*">*@"A0,>"*21/'";5'0"54,01'5"
B;1/75"53*0'7"@0,7;<4";-7'054*-71-2
Gary Levitt, owner & designer of Mad Mimi
CD
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?02*-1@'";5'0"54,01'5"4,"4'//"*"A122'0"54,0B"
*A,;4"B,;0";5'05"'CD'01'-<'"
EF
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?5'">*@5"*5"*"A*<B70,@"C,0"715<;551,-
=15<;551,-"17'-DCE"015B5."1-<,>@/'4'"
;-7'054*-71-2."*-7"7'@'-7'-<1'5
F%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?014'";5'0"5<'-*01,5"4,"431-@"430,;23";5'0"'AB'01'-<'
Field Manager enters daily performance reports 1. The shift has just ended and his reps are coming up with their
totals. They have printed sheets with totals written on them. Steve quickly looks them over and signs them off. His assistant manager brings him other sheets with totals he’s signed off.
2. In between visits by reps, Steve opens his Field Manager Workbench on his laptop. After logging in he sees today’s date and the planned number of applications his reps should be gathering – 180 for today.
3. He also sees yesterday’s numbers, and last week’s numbers, and the last 30 days in graph that shows applications relative to approval rate. Last week’s numbers were bad, and it’s the last week of the month, so Steve knows he’s got to do well today.
4. Steve clicks “enter rep performance data.” He shuffles his reps performance sheets and grabs the first one.
5. The date is defaulted to today, and the shift is defaulted to ‘morning’ since he hasn’t yet entered info for today. Steve begins to enter the reps name, but after a few characters the system auto-completes his name.
6. The rep’s ID is already filled in, along with the code for the credit card promotion they’re working on today.
7. Steve fills in the shift information for his rep. He then enters the total number of applications taken.
8. It looks like from the notes on this sheet that this rep left sick two hours early. Steve adds a note about this in the system.
9. Time passes as more reps bring in their sheets and Steve completes entering them in between conversations.
10. After all the sheets are done, Steve looks at a summary screen for the day. It looks like he’s close to his goal. If the next shift continues at this rate he’ll beat the plan by 5% or so. That’s good.
11. Steve validates that the base pay is correct at $5 per app, and that he’s set an individual bonus giving reps $50 each if they reach 20 apps. Next to each rep he sees the calculated pay, base, bonus, and total pay for the day.
12. The annual sale at Macy’s has brought a lot of people in today. Steve chooses a “sale increases mall foot traffic” code to add to his shift data sheet. Frank, his boss, has pestered him to make sure he includes this type of information in his daily summaries.
C$
Steven
Credit Card Marketing Field
Manager
Steven is a field manager
working at the local shopping
center. He’s in the middle of a
long workday supervising 13
reps who are busy talking to
people trying to convince
them to apply for a credit
card.
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?,>1<"@,,A1-2"5'45"*";5'0"5<'-*01,"4,"
B1<4;0'5
C''"88897'512-<,>1<59,02"D,0"</1B*04"*-7"'E*>B/'5FG
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?@'4<3A,*071-2"15"<,//*A,0*B6'"8*C"4,"
<,>'";D"8143"EF"17'*5
G#
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?3'"7'512-"54;71,"*@@0,*<3"/'4A5"'6'0B,-'"
3*6'"*"2,"*4"14
Design Studio Approach
http://interaction08.ixda.org/Jeff_White%20and%20Jim%20Ungar.php
177© 2006-2009 Jeff Patton, All rights reserved, www.agileproductdesign.com
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?;1/7"@*@'0"@0,4,4A@'5"*5"A,;"8,;/7"*"
;5'0"1-4'0B*<'
C,>@,-'-DE'7"@*@'0"@0,4,4A@'5"*0'"F;1<G"4,"
H;1/7"<,//*H,0*D6'/A"*-7"'*5A"4,"<3*-2'
IJ
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?,6'*@/'"<,>A,-'-45"*//,8"51>;/*B-2"
43'";5'",C"*"A0,7;<4"@'C,0'"14"'D1545
EE
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
&,'"0'<,>>'-75";51-2"43'"?*?'0"
?0,4,4@?'"4,"<,>>;-1<*4'"43'"AB"7'512-
CD
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?,>>;-1<*4'"@,8"8143"/12348'1234"
54,0AB,*075
176© 2006-2009 Jeff Patton, All rights reserved, www.agileproductdesign.com
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
)0,7;<4"=15<,6'0?"/,,@5"/1@'"4315
AB
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
)0,7;<4"=15<,6'0?"/,,@5"/1@'"4315
A%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
At every stage of building product
understanding, make your
understanding visible
?$
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice #4: When developing use
iterative and incremental
strategies to maximize learning,
and minimize risk
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Don’t confuse a purely
incremental approach with an
iterative and incremental
approach
?#
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?1-<0'>'-@-2A"7'/16'05"*"B14"*4"*"@>'
1 2 3 4 5
Incrementing calls for a fully
formed idea.
And, doing it on time requires
dead accurate estimation.
CD
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
During delivery we often fail to
answer some critical questions
?@
A*6'"8'"B;1/4"43'"
5,/;C,-"43'">*0D'4"
6*/;'5E
F43'"01234"G0,7;<4H
A*6'"8'"B;1/4"43'"
5,/;C,-"*4"*"I;*/14J"
/'6'/",;0"4*02'4"
*;71'-<'"8*-45E
F43'"G0,7;<4"01234H
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?14'0*@-2A"'BC'<45"<3*-2'."D;1/75"*"0,;23"6'051,-."
6*/17*4'5"*-7"<3*-2'5."43'-"5/,8/E"D;1/75";C"F;*/14E
1 2 3
A more iterative strategy
allows you to move from
vague idea to realization
making course corrections as
you go.
4 5
GH
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>193 ??
@*-A",02*-1B*C,-5"<,-517'0"0'6151-2"43'"5*>'"
D;-<C,-*/14A"*5"D*1/;0'9""E4'0*C,-"15"-,4"
4,/'0*4'79
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
An iterative strategy builds up
subjective quality
(did you know there were two kinds of
quality?)
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
51
)0,7;<45"8143"51>1/*0"?'*4;0'5",@'-"6*0A"
5;B54*-C*//A"1-"43'"D01<'"8'"D*A
low cost moderate cost high cost
E31-F"*B,;4"43'"3123G/'6'/"?'*4;0'5"
1-"*"<*0"G"8'//"*"B;5"1-",;0"'H*>D/'
:4"*"3123"/'6'/."*//"?'*4;0'5"*0'"
-'<'55*0A
I;4"8'"F-,8"43*4"*//"B;5'5"7,-J4"
3*6'"43'"5*>'"D01<'
K*<3"'55'-C*/"?'*4;0'"6*01'5"1-"
5;BL'<C6'"M;*/14A"*('<C-2"43'"N-*/"
D01<'
OP
'-21-'
40*-5>1551,-
B0*F'5
5;5D'-51,-
5'*45
54''01-2"83''/
Q"
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?*-,"<*;@,-5";5"4,"<,-517'0"A;*/14B"*5"C'1-2"
<,>D,5'7",E"!"#$%&'$"*-7"()"#$%&'$"'/'>'-45
F=15<;551,-5",E"A;*/14B"3*6'"0'6,/6'7"
*0,;-7"43'"48,"*5D'<45",E"5;CG'<@614B"
*-7",CG'<@614B"51-<'"43'"@>'",E"
:0154,4/'9"
H>C'77'7"1-"4315",CG'<@6'I5;CG'<@6'"
5D/14"15"43'"17'*"43*4"!"#$%&'$*+),-./0*
1$2/,.3(*/!*/4$*5%!36!27,3%$*/!*
2$+).2$7$3/(8"831/'"()"#$%&'$*
+),-./0*1$2/,.3(*/!*/4$*5(,&(6,%&!3*
!6*)($2(9JK
IIL,01*M1"?*-,
There’s more to
me than that
silly survey
technique!
N%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?*-,"'@A/*1-5"430''"2'-'0*/"</*551B<*C,-5"D,0"A0,7;<4"
D'*4;0'5E"!"#$%&'()#."*+)%,-!)+#-*+'.#."*-7",).-/&$)0#1
2"#$%&'()#F3'"A0,7;<45">;54"3*6'"4315"
D'*4;0'5"D,0">'"4,"G'"
<,-517'0"43'"A0,7;<4"
*<<'A4*G/'
3+)%,-!)+#-*+'.#F3'">,0'",D"4315"H"2'4."43'"
G'+'0
4).-/&$)0#H"/,6'"4315"'/'>'-4",D"43'"
A0,7;<4I
“This car has many flaws. Buy it
anyway. It’s so much fun to
drive”
-- from a NY Times review of the
Mini Cooper
J$
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?5'"43'"@*-,"</*551A<*B,-5"4,"C,43"
D01,01BE'"*-7"5D/14
Brakes
(must have)
Basic brakes
(must have)
Stopping
distance(one dimensional)
Anti-locking
(delighter)
Cool dashboard
light when
slipping
(delighter)
FG
@''D"1-">1-7H"I,;">;54"J-,8"I,;0"<;54,>'05"*-7";5'05"4,"
7'4'0>1-'"5;CK'<B6'"6*/;'9
L-'"D'05,-M5"7'/1234'0">*I"/'*6'",43'05"*D*43'B<9""
:-,43'0M5">;54N3*6'">*I"C'";5'/'55"4,"5,>',-'"'/5'
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
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
?#
@'4A5"/,,B"*4"83*4"3*CC'-5"1D"8'"4*B'"*"
-*16'"1-<0'>'-4*/"*CC0,*<3"4,"<,-540;<E,-
@'4A5"54*04"8143"43'"F*51<"D'*4;0'5",D",;0"F;59
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
1 2 3
Iterating affords building up quality over time
?'"<*-"/'6'0*2'"14'0*@,-"4,"A;1/7";B"
C;*/14D
EF
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
?,-517'0"43'5'"@,;0"54,0A"5B/1C-2"
3';015D<5"43*4"E;1/7";B"F;*/14A
!"#$%&$'$(()*+%
G,0"43'"@'*4;0'"4,"E'">1-1>*//A"
7'>,-540*E/'"H"E;4"-,4"0'/'*5*E/'."
83*4"15"43'">1-1>*/"@;-<D,-*/14A
!"#$%&'()*)+,-$)./01),2&3)2'4'55#-3)
6'&75)#27)2,)8#&/7#9,2
,"-".)/)*+%0%1/$2).)/)*+"
I3*4"8,;/7"*77"43'"*E1/14A"4,"B'0@,0>"
43'";5'0"4*5J"1-"71('0'-4"8*A5K""
:771-2"1-"5;E"4*5J5"43*4"*0'",BD,-*//A"
B'0@,0>'7K
!"#$%&'()#)+,-$)./01),%9,2#&)6'&75:)
7#0')&,,;<%)0,,&5:)/2%<0)0-#25	,2),2)
7#0'5
3"4$*+"
I3*4"8,;/7">*J'"4315"@'*4;0'"5*@'0"
@,0">'"4,";5'K""G,0"E,43"43'";5'0."*-7"
@,0"43'"E;51-'55"B*A1-2"@,0"43'"
5,L8*0'K
!"#$%&'()/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%
;--$"/
I3*4"8,;/7">*J'"4315"@'*4;0'"'*51'0"
4,";5'K"M,0'"7'510*E/'"4,";5'K""G*54'0"
4,";5'K
!"#$%&'()#<0,>4,$%&'9,2:)5'"3)8/5<#&)
7'5/?2:)5%''7);'35
NO
* Adapted from Gerard Meszaros’ “Storyotypes”
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
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
?@
A;1/71-2";B"C;*/14D"14'0*E6'/D"*-7"
1-<0'>'-4*//D"531B5"43'"F'54"B0,7;<4"B,551F/'
G9 H'"I-,8"'*<3"54,0D"<*-"F'"5B/14"1-4,"*4"/'*54"J,;0"B*045
#9 K*0/D"14'0*E,-5"54016'"4,"F;1/7"F*0'"-'<'551E'5."/*4'0"14'0*E,-5"F;1/7";B"
C;*/14D
L9 K6*/;*E-2"0'*71-'55"F*5'7",-"5;FM'<E6'"C;*/14D"4,";-7'054*-7"7,-'-'55
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
=1617'"0'/'*5'"7'512-"?"7'6'/,@>'-4"1-4,"
430''"@3*5'5!"#$%$&'()*#+"A;1/7"*"51>@/'"5B54'>"5@*-",C"-'<'55*0B"C'*4;0'5"
D054"E"43'"8*/F1-2"5F'/'4,-
,%-.()*#+":77"<*@*G1/14B."H'I1G1/14B."*-7"5*C'4B
/$-'()*#+"J1-153"8143";5*G1/14B."@'0C,0>*-<'."*-7"5'I"*@@'*/
K'5'06'"L>'"1-"43'"0'>*1-1-2"43107"C,0";-C,0'5''-"*771L,-5"
*-7"*7*@4*L,-5
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
MN
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/
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
timeuncertainty decreases over time
un
cert
ain
ty
?315"@0,7;<4"20,81-2"540*4'2A"5/,8/A"
B01-25"43'"@0,7;<4"1-4,"C,<;5
:-"*0D54"'-6151,-5"*-"'-D0'"@*1-D-2"BA"54*0D-2"8143"*"5E'4<3",0"*-"
;-7'0F@*1-D-2"*-7"5/,8/A"B;1/71-2";@"7'4*1/"
:@@/A"43'"5*>'"540*4'2A"4,"/'*0-"*B,;4"43'"@0,7;<4"7,>*1-"*5"G;1<E/A"
*5"@,551B/'"H"4,"<3*5'",;4";-<'04*1-4A"B'C,0'"4,,"3'*61/A"1-6'5D-2
OpeningGame
Build up necessities
Mid-GameBuild out
flexibility and business rule enforcement
End-GameRefine the UI and interactions, take
advantage of iterative learning
II
!"#$$%"&'(")*+,-."*//"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
?,,@"*4"43'"!"#$%"&'",A"6*/;'",6'0"B>'
C,"D-153",-"B>'"
8'">*E"F401>"43'"
4*1/G"HE"7'A'001-2"
54,01'5",A">,7'54"
6*/;'
time
cu
mu
lative
bu
sin
ess
va
lue
IJ
!"#$$%"&'(")*+,-."*//"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."
43'"!"#$%&'()."43'"<;06'"/,,A5"71('0'-4
C3'"1-6'05'",D"015A"
15"A-,8/'72'
E'*0-1-2"'*0/1'0"1D"
8'F0'"G;1/71-2"43'"
01234"@0,7;<4"
>1H2*4'5"015A
timeac
qu
ire
d p
rod
uc
t k
no
wle
dg
e
I%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Gary applied each of these
strategies for MadMimi.com
(and lots more)
?$
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice #1: Understand users to
understand your product
Gary identified different types of
users he’d targeted.
He quickly saw how serving too
many people wasn’t helping him
get to market?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice # 2: Identify and prioritize goals
and users before features
Gary originally had goals to serve
many markets, challenging many
competitors
In the end he chose differentiate his
product in a smaller, more specific,
market
?#
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice #3: Collaborate to
create visualizations that build
shared understanding
Gary mapped the user stories that
described his product, and
prototyped UI relentlessly
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Practice #4: Use iterative and
incremental strategies to maximize
learning, and minimize risk
Gary built up the product in thin
slices seeing the first fully
functional product in a few weeks.
(Rails really is fast when you know
what you’re building)
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Gary describes MadMimi.com
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Mimi’s visitors have grown steadily
over time?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Today MadMimi.com sends tens
of millions of messages per
month
?@
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Mimi earns over $100,000 USD
per month in recurring revenue
from thousands of active
customers
??
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
The strategies described here are
used on small products like
Mimi, and many larger products
world wide
?%
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
Jeff Patton
AgileProductDesign.com
Agile
Outside the CodeUsing agile discovery ideas to drive product success