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.
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Outside The Code
1. Agile
Outside the Code
Using agile discovery ideas to drive product success
Jeff Patton
AgileProductDesign.com
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>
2. 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<,> #
9. What was going wrong?
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> %
10. ='4'0>1-1-2"'?*<4/@"83*4"4,"A;1/7"15"
71B<;/4
“The hardest single
part of building a
software system is
deciding precisely what
to build.”
:21/'C5"51>D/'"54,0@"801E-2"
*-7"D01,01EF*E,-"15"51>D/'
G,,"51>D/'9
I0'7"J0,,K5."
*;43,0",L"MN,"O1/6'0"J;//'4P."H%QR
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> H$
12. Bad agile process:
delivery
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69); <=
13. Good agile process:
discovery
delivery
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69); <=
14. discovery: figuring out
what to build, and
validating those decisions
delivery: building it
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69); <=
15. 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)
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69); <=
16. Delivery: Discovery:
• Specify product to build • Understand customers & market
• Write code • Understand competitors
• Test working software • Understand users
• Document product • Distill business strategy into
• Manage product delivery 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
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?@
17. Common agile practice
today, and what’s missing
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69); <=
18. 3 general roles:
team (delivers)
customer/product owner (discovers)
coach/ScrumMaster (supports &
facilitates)
!"#$%"&'()*+"',,"-./012"-$2$-3$4+"55567/.,$&-)4891:$2./*69); <=
23. 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<,> #?
24. Practice #1: Understand
users to understand your
product
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> #?
25. 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<,> #?
26. 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<,> #?
29. 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<,> #%
33. Premier Health User Constituencies
am ple
ex
Mary Patricia Partner Physician Staff
Member Personal Health Advisor • Experienced clinicians and
medical office staff.
• 50+, above average • Experienced nurse, with
income good phone and computer • Desire to serve patients
skills better, but frustrated by
• Mixed health – some very
the economics that make
healthy, others managing • Uses the application many
it difficult.
chronic problems hours at a time, multiple
days a week • Computer skills vary wildly.
• Looking for better quality
health care – specifically • Will receive training and • Fast paced office with a
more help and advice than support big workload.
a doctor and staff seem to • Access to peers to ask • Likely buried in paper
have time to give.
• Not computer phobic, but
?0'*4'"51>@/'"A;1<B"
questions records
not particularly skilled.
• Uses the application 0'C'0'-<'"@*2'5"4,"5,<1*/1D'"
“I want to efficiently help
members and not have to
“I’m excited that Premier
can offer my patients the
extra attention I can’t.
infrequently from home. worry about the technology
“I want someone who can
E,;0">,54"<01F<*/"@'05,-*5
while doing it” But I want to make sure
that the extra record
keeping isn’t a burden for
answer questions and give my staff.”
me advice.”
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> GG
35. 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<,> ?@
36. Practice # 2: Identify and
prioritize goals and users
before features
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?@
40. )01,01?@'"A,;0"2,*/5"B'C,0'"A,;"D01,01?@'"
A,;0"C'*4;0'5
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)
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> E$
41. 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<,> ?@
42. Practice #3: Collaborate to create
visualizations that build shared
understanding
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?#
50. ?014'";5'0"5<'-*01,5"4,"431-@"430,;23";5'0"'AB'01'-<'
Steven
Credit Card Marketing Field
Manager
Steven is a field manager
working at the local shopping 5. The date is defaulted to today, and the shift is defaulted to ‘morning’
center. He’s in the middle of a since he hasn’t yet entered info for today. Steve begins to enter the
long workday supervising 13 reps name, but after a few characters the system auto-completes his
reps who are busy talking to name.
people trying to convince
6. The rep’s ID is already filled in, along with the code for the credit card
them to apply for a credit promotion they’re working on today.
card.
7. Steve fills in the shift information for his rep. He then enters the total
number of applications taken.
Field Manager enters daily performance reports 8. It looks like from the notes on this sheet that this rep left sick two
1. The shift has just ended and his reps are coming up with their hours early. Steve adds a note about this in the system.
totals. They have printed sheets with totals written on them. 9. Time passes as more reps bring in their sheets and Steve completes
Steve quickly looks them over and signs them off. His assistant entering them in between conversations.
manager brings him other sheets with totals he’s signed off.
10. After all the sheets are done, Steve looks at a summary screen for
2. In between visits by reps, Steve opens his Field Manager
the day. It looks like he’s close to his goal. If the next shift continues
Workbench on his laptop. After logging in he sees today’s date
and the planned number of applications his reps should be at this rate he’ll beat the plan by 5% or so. That’s good.
gathering – 180 for today. 11. Steve validates that the base pay is correct at $5 per app, and that
3. He also sees yesterday’s numbers, and last week’s numbers, he’s set an individual bonus giving reps $50 each if they reach 20
and the last 30 days in graph that shows applications relative to apps. Next to each rep he sees the calculated pay, base, bonus, and
approval rate. Last week’s numbers were bad, and it’s the last total pay for the day.
week of the month, so Steve knows he’s got to do well today.
12. The annual sale at Macy’s has brought a lot of people in today. Steve
4. Steve clicks “enter rep performance data.” He shuffles his reps chooses a “sale increases mall foot traffic” code to add to his shift
performance sheets and grabs the first one. data sheet. Frank, his boss, has pestered him to make sure he
includes this type of information in his daily summaries.
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> C$
60. At every stage of building product
understanding, make your
understanding visible
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?$
61. 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<,> ?@
62. 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<,> ?#
63. ?1-<0'>'-@-2A"7'/16'05"*"B14"*4"*"@>'
Incrementing calls for a fully
formed idea.
And, doing it on time requires
dead accurate estimation.
1 2 3 4 5
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> CD
64. During delivery we often fail to
answer some critical questions
A*6'"8'"B;1/4"43'" A*6'"8'"B;1/4"43'"
5,/;C,-"43'">*0D'4" 5,/;C,-"*4"*"I;*/14J"
6*/;'5E /'6'/",;0"4*02'4"
F43'"01234"G0,7;<4H *;71'-<'"8*-45E
F43'"G0,7;<4"01234H
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?@
67. 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<,> ?@
69. ?*-,"<*;@,-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%$*/!*
There’s more to
me than that
2$+).2$7$3/(8"831/'"()"#$%&'$*
silly survey +),-./0*1$2/,.3(*/!*/4$*5(,&(6,%&!3*
technique! !6*)($2(9JK
IIL,01*M1"?*-,
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> N%
70. ?*-,"'@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+)%,-!)+#-*+'.#
“This car has many flaws. Buy it
F3'">,0'",D"4315"H"2'4."43'"
anyway. It’s so much fun to G'+'0
drive”
-- from a NY Times review of the 4).-/&$)0#
Mini Cooper H"/,6'"4315"'/'>'-4",D"43'"
A0,7;<4I
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> J$
75. 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
sprint L9 K6*/;*E-2"0'*71-'55"F*5'7",-"5;FM'<E6'"C;*/14D"4,";-7'054*-7"7,-'-'55
4
3
2
1 A-
B-
D C
D
A
B C-
B-
D
B D
A
B A-
D
B A-
D
BI B-
DI
release
user tasks to support
Product goal: (in 4 sprints) be driving the highest quality bus possible
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?@
76. =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
Opening Mid-Game End-Game
Game Build out Refine the UI and
uncertainty
Build up flexibility and interactions, take
advantage of
necessities business rule
iterative learning
enforcement
uncertainty decreases over time
time
Construx on the Cone of Uncertainty: http://www.construx.com/Page.aspx?hid=1648
Visdos 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<,> MN
78. ?,,@"*4"43'"!"#$%"&'",A"6*/;'",6'0"B>'
C,"D-153",-"B>'"
cumulative business value
8'">*E"F401>"43'"
4*1/G"HE"7'A'001-2"
54,01'5",A">,7'54"
6*/;'
time
Opening Mid Game End Game
Game
Early stories emphasize Once we’re confident Over time the value of
iteration and learning. we have the “shape” stories begin to
We need to be sure of the product right, diminish signaling it’s
we’re building the we begin to pile in time for release
right product value
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> IJ
79. ?,<;51-2",-"@0,7;<4"A-,8/'72'"*<B;10'7."
43'"!"#$%&'()."43'"<;06'"/,,A5"71('0'-4
C3'"1-6'05'",D"015A"
acquired product knowledge
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
time
Opening Mid Game End Game
Game
Early stories emphasize Once we’re confident Over time the value of
iteration and learning. we have the “shape” stories begin to
We need to be sure of the product right, diminish signaling it’s
we’re building the we begin to pile in time for release
right product value
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> I%
80. Gary applied each of these
strategies for MadMimi.com
(and lots more)
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?$
81. 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<,> ?@
82. 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<,> ?#
83. 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<,> ?@
84. 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<,> ?@
86. Mimi’s visitors have grown steadily
over time
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?@
87. Today MadMimi.com sends tens
of millions of messages per
month
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,> ?@
88. 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<,> ??
89. 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<,> ?%
90. Agile
Outside the Code
Using agile discovery ideas to drive product success
Jeff Patton
AgileProductDesign.com
!"#$$%"&'(")*+,-."*//"012345"0'5'06'7."8889:21/')0,7;<4='512-9<,>