50
The Architecture of Uncertainty @KevlinHenney

The Architecture of Uncertainty

Embed Size (px)

DESCRIPTION

Presented at Build Stuff (19th November 2014) Ralph Johnson defined architecture as "the decisions that you wish you could get right early in a project, but that you are not necessarily more likely to get them right than any other". Given our inability to tell the future how can we design effectively for it? Much project management thinking is based on the elimination of uncertainty, and advice on software architecture and guidance for future-proofing code often revolves around adding complexity to embrace uncertainty. In most cases, this is exactly the opposite path to the one that should be taken. The talk looks at how uncertainty, lack of knowledge and options can be used to partition and structure the code in a system.

Citation preview

Page 1: The Architecture of Uncertainty

The Architecture of

Uncertainty

@KevlinHenney

Page 2: The Architecture of Uncertainty
Page 3: The Architecture of Uncertainty

Um. What's the name of the word for things not being the same always. You know, I'm sure there is one. Isn't there?

There's must be a word for it... the thing that lets you know time is happening. Is there a word?

Change.

Oh. I was afraid of that.

Neil Gaiman The Sandman

Page 4: The Architecture of Uncertainty

When a design decision

can reasonably go one of

two ways, an architect

needs to take a step back.

Instead of trying to decide

between options A and B,

the question becomes

"How do I design so that

the choice between A and

B is less significant?"

The most interesting thing

is not actually the choice

between A and B, but the

fact that there is a choice

between A and B.

Kevlin Henney

"Use Uncertainty As a Driver"

Page 5: The Architecture of Uncertainty

We propose [...] that one begins

with a list of difficult design

decisions or design decisions

which are likely to change. Each

module is then designed to hide

such a decision from the others.

David L Parnas "On the Criteria to Be Used in Decomposing Systems into Modules"

Page 6: The Architecture of Uncertainty

struct Date

{

int year, month, day;

};

Page 7: The Architecture of Uncertainty

struct Date

{

int daysSinceEpoch;

};

Page 8: The Architecture of Uncertainty

class Date

{

public:

...

private:

int year, month, day;

};

Page 9: The Architecture of Uncertainty

class Date

{

public:

...

private:

int daysSinceEpoch;

};

Page 10: The Architecture of Uncertainty

class Date

{

public:

...

private:

...

};

Page 11: The Architecture of Uncertainty
Page 12: The Architecture of Uncertainty
Page 13: The Architecture of Uncertainty
Page 14: The Architecture of Uncertainty
Page 15: The Architecture of Uncertainty
Page 16: The Architecture of Uncertainty
Page 17: The Architecture of Uncertainty

There are standard precautions that can

help reduce risk in complex software

systems. This includes the definition of a

good software architecture based on a

clean separation of concerns, data hiding,

modularity, well-defined interfaces, and

strong fault-protection mechanisms.

Gerard J Holzmann "Mars Code", CACM 57(2)

http://cacm.acm.org/magazines/2014/2/171689-mars-code/fulltext

Page 18: The Architecture of Uncertainty

There are standard precautions that can

help reduce risk in complex software

systems. This includes the definition of a

good software architecture based on a

clean separation of concerns, data hiding,

modularity, well-defined interfaces, and

strong fault-protection mechanisms.

Gerard J Holzmann "Mars Code", CACM 57(2)

http://cacm.acm.org/magazines/2014/2/171689-mars-code/fulltext

Page 19: The Architecture of Uncertainty

All architecture is design but not

all design is architecture.

Architecture represents the

significant design decisions that

shape a system, where significant

is measured by cost of change.

Grady Booch

Page 20: The Architecture of Uncertainty

Architecture is the decisions that

you wish you could get right early

in a project, but that you are not

necessarily more likely to get

them right than any other.

Ralph Johnson

Page 21: The Architecture of Uncertainty

Analysis Design Code Test

Page 22: The Architecture of Uncertainty

Analysis Design Code Test

Page 23: The Architecture of Uncertainty

Analysis Design Code Test

Page 24: The Architecture of Uncertainty

Walking on water and developing software from a specification are easy if both are frozen.

Edward V Berard

Page 25: The Architecture of Uncertainty

Expert

Proficient

Competent

Advanced Beginner

Novice

Page 26: The Architecture of Uncertainty

The "defined" process control model requires that every piece of work be completely understood. Given a well-defined set of inputs, the same outputs are generated every time.

Ken Schwaber Agile Software Development with Scrum

Page 27: The Architecture of Uncertainty

The empirical process control model, on the other hand, expects the unexpected. It provides and exercises control through frequent inspection and adaptation for processes that are imperfectly defined and generate unpredictable and unrepeatable results.

Ken Schwaber Agile Software Development with Scrum

Page 28: The Architecture of Uncertainty

Design Design Design Design

Page 29: The Architecture of Uncertainty

Design

Page 30: The Architecture of Uncertainty

Programming is a design

activity.

Jack W Reeves

"What Is Software Design?"

Page 31: The Architecture of Uncertainty

Coding actually makes sense more

often than believed. Often the

process of rendering the design in

code will reveal oversights and the

need for additional design effort. The

earlier this occurs, the better the

design will be.

Jack W Reeves

"What Is Software Design?"

Page 32: The Architecture of Uncertainty

You have to finish things —

that's what you learn from,

you learn by finishing things.

Neil Gaiman

Page 33: The Architecture of Uncertainty
Page 34: The Architecture of Uncertainty

Properly gaining control

of the design process

tends to feel like one is

losing control of the design process.

Page 35: The Architecture of Uncertainty

Speculative Generality

Brian Foote suggested this name for a smell to which we are very sensitive. You get it when people say, "Oh, I think we need the ability to do this kind of thing someday" and thus want all sorts of hooks and special cases to handle things that aren't required. The result often is harder to understand and maintain. If all this machinery were being used, it would be worth it. But if it isn't, it isn't. The machinery just gets in the way, so get rid of it.

Martin Fowler Refactoring

Page 36: The Architecture of Uncertainty

You have a problem. You decide to solve it with configuration. Now you have <%= $problems %> problems!

Dan North https://twitter.com/tastapod/status/342935892207497219

Page 37: The Architecture of Uncertainty
Page 38: The Architecture of Uncertainty

People overvalue their knowledge

and underestimate the probability

of their being wrong.

Page 39: The Architecture of Uncertainty

Prediction is very difficult Prediction is very difficult,

especially about the future.

Niels Bohr

Page 40: The Architecture of Uncertainty
Page 41: The Architecture of Uncertainty
Page 42: The Architecture of Uncertainty

Stewart Brand, How Buildings Learn See also http://www.laputan.org/mud/

Page 43: The Architecture of Uncertainty

Rate of change

Page 44: The Architecture of Uncertainty
Page 45: The Architecture of Uncertainty

package com.sun...;

Page 46: The Architecture of Uncertainty

Public APIs, like diamonds, are forever.

Joshua Bloch "Bumper-Sticker API Design"

http://www.infoq.com/articles/API-Design-Joshua-Bloch

Page 47: The Architecture of Uncertainty
Page 48: The Architecture of Uncertainty

A

B

C

D

E

F

Page 49: The Architecture of Uncertainty

If you have a procedure with

ten parameters, you probably

missed some.

Alan Perlis

Page 50: The Architecture of Uncertainty

Uncertainty is an uncomfortable position, but certainty is an absurd one.

Voltaire