Top Banner
Turning Development Outside In @ KevlinHenney
72

Turning Development Outside-In

Jan 22, 2018

Download

Software

Kevlin Henney
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Turning Development Outside-In

Turning

Development

Outside–In

@KevlinHenney

Page 2: Turning Development Outside-In

What We Talk About

When We Talk About

Development

@KevlinHenney

Page 3: Turning Development Outside-In

What We Talk About

When We Talk About

Requirements

@KevlinHenney

Page 4: Turning Development Outside-In
Page 5: Turning Development Outside-In

Too often we push the problem

into the background because we

are in a hurry to proceed to a

solution.

Page 6: Turning Development Outside-In

If you read most software

development texts thoughtfully,

you will see that almost everything

is about the solution; almost

nothing is about the problem.

Page 7: Turning Development Outside-In

Analysis Design Code Test

Page 8: Turning Development Outside-In

Analysis Design Code Test

Page 9: Turning Development Outside-In

Analysis Design Code Test

Page 10: Turning Development Outside-In

It's expensive to

know everything

up front.Kolton Andrus

Page 11: Turning Development Outside-In

You have to finish things —

that's what you learn from,

you learn by finishing things.

Neil Gaiman

Page 12: Turning Development Outside-In

SCRUM: A Pattern

Language for

Hyperproductive

Software

Development Teams

Mike Beedle, Martine Devos,

Yonat Sharon,Ken Schwaber,

and Jeff Sutherland

Page 13: Turning Development Outside-In

SCRUM Master

Sprint

Backlog

SCRUM Meetings

Demo After Sprint

SCRUM Master

Sprint

Backlog

SCRUM Meetings

Demo After Sprint

Page 14: Turning Development Outside-In

Problem

You want to balance the needs of developers to work

undisturbed and the needs of management and the

customer to see real progress, as well as control the

direction of that progress throughout the project.

Solution

Divide the project in Sprints. A Sprint is a period of

approximately 30 days in which an agreed amount of

work will be performed to create a deliverable. Each

Sprint takes a pre-allocated amount of work from the

Backlog.

Sprint

Page 15: Turning Development Outside-In

Analysis

Sprint

Design

Sprint

Code

Sprint

Test

Sprint

Page 16: Turning Development Outside-In

Analysis DesignCodeTest

Analysis DesignCodeTest

Analysis DesignCodeTest

Analysis DesignCodeTest

Page 17: Turning Development Outside-In

Develop Develop Develop Develop

Page 18: Turning Development Outside-In

Develop

Page 19: Turning Development Outside-In
Page 20: Turning Development Outside-In

If a plot works out exactly

as you first planned, you're

not working loosely enough

to give room to your

imagination and instincts.

Page 21: Turning Development Outside-In

/ WordFriday

Page 22: Turning Development Outside-In

pantser, noun▪ Writer who writes by the seat of their pants.

▪ In contrast to a plotter, a pantser doesn't

work to (or have) an outline.

Page 23: Turning Development Outside-In
Page 24: Turning Development Outside-In

Your Customers

Do Not Mean

What They Say

Nate Jackson

Page 25: Turning Development Outside-In

I’ve never met a customer yet that

wasn’t all too happy to tell me what

they wanted—usually in great detail.

The problem is that customers don’t

always tell you the whole truth.

Nate Jackson

Page 26: Turning Development Outside-In

They generally don't lie.

They use their terms and their contexts.

They leave out significant details.

They make assumptions.

Nate Jackson

Page 27: Turning Development Outside-In

This is compounded by the fact that

many customers don’t actually know

what they want in the first place!

Nate Jackson

Page 28: Turning Development Outside-In

Systems have properties

— capabilities, features,

characteristics, etc. —

inside and out.

Page 29: Turning Development Outside-In

Development should

discover the specific

properties desired

and make them so.

Page 30: Turning Development Outside-In
Page 31: Turning Development Outside-In

Page 32: Turning Development Outside-In

Page 33: Turning Development Outside-In

Page 34: Turning Development Outside-In

Page 35: Turning Development Outside-In

Try to leave

out the part

that readers

tend to skip.Elmore Leonard

Page 36: Turning Development Outside-In

Page 37: Turning Development Outside-In

Page 38: Turning Development Outside-In
Page 39: Turning Development Outside-In

Stack{new, push, pop, depth, top}

Page 40: Turning Development Outside-In

GivenWhenThen

an empty stackan item is pushedit should not be empty

Page 41: Turning Development Outside-In

GivenWhenThen

an empty stackan item is pushedif it's OK with you, I think that, perhaps, it should probably not be empty, don't you think?

Page 42: Turning Development Outside-In

Omit needless words.

William Strunk and E B White

The Elements of Style

Page 43: Turning Development Outside-In

Make definite assertions.

Avoid tame, colourless, hesitating, noncommittal language.

When a sentence is made stronger, it usually becomes shorter. Thus brevity is a by-product of vigour.

William Strunk and E B White

The Elements of Style

Page 44: Turning Development Outside-In

GivenWhenThen

an empty stackan item is pushedit is not empty

Page 45: Turning Development Outside-In

GivenWhenThenAnd

an empty stackan item is pushedit has a depth of 1the top item is the item that was pushed

Page 46: Turning Development Outside-In

Given_an_empty_stack_When_an_item_is_pushed_Then_it_has_a_depth_of_1_And_the_top_item_is_the_item_that_was_pushed

Page 47: Turning Development Outside-In

Non-EmptyEmpty

depth depthtoppushpop [depth > 1]

push

pop [depth = 1]

new

Page 48: Turning Development Outside-In

public class Stack_spec{

public static class A_new_stack{

@Testpublic void is_empty()

}

public static class An_empty_stack{

@Test()public void throws_when_queried_for_its_top_item() @Test()public void throws_when_popped() @Testpublic void acquires_depth_by_retaining_a_pushed_item_as_its_top()

}

public static class A_non_empty_stack{

@Testpublic void becomes_deeper_by_retaining_a_pushed_item_as_its_top() @Testpublic void on_popping_reveals_tops_in_reverse_order_of_pushing()

}}

Page 49: Turning Development Outside-In

public classStack_spec

{public static class

A_new_stack{

@Testpublic void is_empty()

}

public static class

An_empty_stack{

@Test()public void throws_when_queried_for_its_top_item() @Test()public void throws_when_popped() @Testpublic void acquires_depth_by_retaining_a_pushed_item_as_its_top()

}

public static class

A_non_empty_stack{

@Testpublic void becomes_deeper_by_retaining_a_pushed_item_as_its_top() @Testpublic void on_popping_reveals_tops_in_reverse_order_of_pushing()

}}

Page 50: Turning Development Outside-In

public classStack_spec

{public static class

A_new_stack{

@Testpublic void is_empty()

}

public static class

An_empty_stack{

@Test()public void throws_when_queried_for_its_top_item() @Test()public void throws_when_popped() @Testpublic void acquires_depth_by_retaining_a_pushed_item_as_its_top()

}

public static class

A_non_empty_stack{

@Testpublic void becomes_deeper_by_retaining_a_pushed_item_as_its_top() @Testpublic void on_popping_reveals_tops_in_reverse_order_of_pushing()

}}

Page 51: Turning Development Outside-In

Systems have properties

— capabilities, features,

characteristics, etc. —

inside and out.

Page 52: Turning Development Outside-In
Page 53: Turning Development Outside-In

Functional

Operational

Developmental

Page 54: Turning Development Outside-In

We want our code

to be unit testable.

What is a unit test?

Page 55: Turning Development Outside-In

A test is not a unit test if:

▪ It talks to the database

▪ It communicates across the network

▪ It touches the file system

▪ It can't run at the same time as any of your other

unit tests

▪ You have to do special things to your environment

(such as editing config files) to run it.

Michael Feathershttp://www.artima.com/weblogs/viewpost.jsp?thread=126923

Page 56: Turning Development Outside-In

A unit test is a test of behaviour

whose success or failure is wholly

determined by the correctness of

the test and the correctness of the

unit under test.

Kevlin Henneyhttp://www.theregister.co.uk/2007/07/28/what_are_your_units/

Page 57: Turning Development Outside-In

What do we want

from unit tests?

Page 58: Turning Development Outside-In

When a unit test

passes, it shows

the code is correct.

Page 59: Turning Development Outside-In

When a unit test

fails, it shows the

code is incorrect.

Page 60: Turning Development Outside-In

As aI wantSo that

$Role$Feature$Benefit

Page 61: Turning Development Outside-In

As aI wantSo that

developer of the software$Feature$Benefit

Page 62: Turning Development Outside-In

As aI wantSo that

developer of the softwareclean code$Benefit

Page 63: Turning Development Outside-In

As aI wantSo that

customer of the software$Feature$Benefit

Page 64: Turning Development Outside-In

As aI wantSo that

user of the software$Feature$Benefit

Page 65: Turning Development Outside-In

As aI wantSo that

$Rolelogging$Benefit

Page 66: Turning Development Outside-In

As aI wantSo that

developer of the softwarelogging$Benefit

Page 67: Turning Development Outside-In

As aI wantSo that

customer of the softwarelogging$Benefit

Page 68: Turning Development Outside-In

As aI wantSo that

$Roledocumentation$Benefit

Page 69: Turning Development Outside-In

As aI wantSo that

$Rolean agile process$Benefit

Page 70: Turning Development Outside-In

As aI wantSo thatAs shown by

$Role$Feature$Benefit$Evidence

Page 71: Turning Development Outside-In
Page 72: Turning Development Outside-In

Design an architectural

space to accommodate

a specific program,

experience, or intent.