Outside The Code

Preview:

DESCRIPTION

Languages and applications development frameworks continue to get more capable, more dependable, and help us build applications faster than every before. But building good applications fast usually draws attention to what we all know is the toughest part of software development: figuring out what to build.The good news is that while tools we use to build software have been improving, the tools we use to figure out what to build have been improving too. This short talk focuses on the techniques we use outside the software to collaborate and plan with our customers and users. You’ll learn about concepts and techniques for effectively talking about and representing your product ideas, for understanding the people who use your software, and how to leverage iterative and incremental development to learn faster and reduce risk.As a responsible software craftsman, you’ll walk away with ideas for matching your skills outside the code with your skills inside the code.

Citation preview

!"#$$%"&'(")*+,-."*//"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?&#0 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&#9,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

Recommended