90
! #$$% &’( )*+,-. *// 012345 0’5’06’7. 8889:21/’)0,7;<4=’512-9<,> Jeff Patton AgileProductDesign.com Agile Outside the Code Using agile discovery ideas to drive product success

Outside The Code

Embed Size (px)

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

Page 1: Outside The Code

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

Page 2: Outside The Code

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

#

Page 3: Outside The Code

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

Page 4: Outside The Code

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

Page 5: Outside The Code

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

Page 6: Outside The Code

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

Page 7: Outside The Code

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

Page 8: Outside The Code

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

Page 9: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

What was going wrong?

%

Page 10: Outside The Code

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

Page 11: Outside The Code

!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);

Typical process:

<<

discovery delivery

Page 12: Outside The Code

!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);

Bad agile process:

<=

delivery

Page 13: Outside The Code

!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);

Good agile process:

<=

discovery

delivery

Page 14: Outside The Code

!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);

discovery: figuring out

what to build, and

validating those decisions

delivery: building it

<=

Page 15: Outside The Code

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

<=

Page 16: Outside The Code

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

?@

Page 17: Outside The Code

!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);

Common agile practice

today, and what’s missing

<=

Page 18: Outside The Code

!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69);

3 general roles:

team (delivers)

customer/product owner (discovers)

coach/ScrumMaster (supports &

facilitates)

<=

Page 19: Outside The Code

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

Page 20: Outside The Code

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

Page 21: Outside The Code

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

Page 22: Outside The Code

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

Page 23: Outside The Code

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

Page 24: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

Practice #1: Understand

users to understand your

product

#?

Page 25: Outside The Code

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

#?

Page 26: Outside The Code

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

#?

Page 27: Outside The Code

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

Page 28: Outside The Code

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

Page 29: Outside The Code

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

#%

Page 30: Outside The Code

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

Page 31: Outside The Code

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

Page 32: Outside The Code

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

Page 33: Outside The Code

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

Page 34: Outside The Code

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

Page 35: Outside The Code

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

?@

Page 36: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

Practice # 2: Identify and

prioritize goals and users

before features

?@

Page 37: Outside The Code

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

Page 38: Outside The Code

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

Page 39: Outside The Code

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

Page 40: Outside The Code

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

Page 41: Outside The Code

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

?@

Page 42: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

Practice #3: Collaborate to create

visualizations that build shared

understanding

?#

Page 43: Outside The Code

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

Page 44: Outside The Code

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

Page 45: Outside The Code

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

Page 46: Outside The Code

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

Page 47: Outside The Code

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

Page 48: Outside The Code

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

Page 49: Outside The Code

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

Page 50: Outside The Code

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

Page 51: Outside The Code

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

Page 52: Outside The Code

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

Page 53: Outside The Code

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

Page 54: Outside The Code

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

Page 55: Outside The Code

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

Page 56: Outside The Code

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

Page 57: Outside The Code

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

Page 58: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

)0,7;<4"=15<,6'0?"/,,@5"/1@'"4315

AB

Page 59: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

)0,7;<4"=15<,6'0?"/,,@5"/1@'"4315

A%

Page 60: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

At every stage of building product

understanding, make your

understanding visible

?$

Page 61: Outside The Code

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

?@

Page 62: Outside The Code

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

?#

Page 63: Outside The Code

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

Page 64: Outside The Code

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

Page 65: Outside The Code

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

Page 66: Outside The Code

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

Page 67: Outside The Code

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

?@

Page 68: Outside The Code

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

Page 69: Outside The Code

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

Page 70: Outside The Code

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

Page 71: Outside The Code

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

Page 72: Outside The Code

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

Page 73: Outside The Code

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

Page 74: Outside The Code

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

Page 75: Outside The Code

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

Page 76: Outside The Code

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

Page 77: Outside The Code

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

Page 78: Outside The Code

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

Page 79: Outside The Code

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

Page 80: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

Gary applied each of these

strategies for MadMimi.com

(and lots more)

?$

Page 81: Outside The Code

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

Page 82: Outside The Code

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

?#

Page 83: Outside The Code

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

?@

Page 84: Outside The Code

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

?@

Page 85: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

Gary describes MadMimi.com

?@

Page 86: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

Mimi’s visitors have grown steadily

over time?@

Page 87: Outside The Code

!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>

Today MadMimi.com sends tens

of millions of messages per

month

?@

Page 88: Outside The Code

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

??

Page 89: Outside The Code

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

?%

Page 90: Outside The Code

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