the art of software design

87
THE ART OF (SOFTWARE) DESIGN Jérémie GRODZISKI - Thomas PIERRAIN DDD Meetup - February 2017

Upload: thomas-pierrain

Post on 16-Feb-2017

138 views

Category:

Software


1 download

TRANSCRIPT

Page 1: The art of Software Design

THE ART OF (SOFTWARE) DESIGNJérémie GRODZISKI - Thomas PIERRAIN

DDD Meetup - February 2017

Page 2: The art of Software Design

HAS 'AGILE' KILLED DESIGN IN SOFTWARE?

Page 3: The art of Software Design

PROBABLY BUT…

Page 4: The art of Software Design

’AGILE' WANTED TO KILL BIG UPFRONT DESIGN ONLY

Page 5: The art of Software Design

BIG UPFRONT DESIGN

DESIGN≠

Page 6: The art of Software Design

LACK OF DESIGN

EMERGENT DESIGN≠

Page 7: The art of Software Design

DON'T THROW THE BABY WITH

THE BATHWATER

DON’T THROW THE DESIGN « BABY » WITH…

Page 8: The art of Software Design

WHAT IS DESIGN?

Page 9: The art of Software Design

DESIGN IS MAKING DECISIONS

Page 10: The art of Software Design

MAKING DECISIONS TO

BUILD SOMETHING

Page 11: The art of Software Design

EVERYONE IS MAKING DECISIONS

Page 12: The art of Software Design

EVERYONE IS MAKING DECISIONS…

BUT WITH DIFFERENT IMPACTS

Page 13: The art of Software Design

BUILDING SOMETHING

OK, BUT WHY?

Page 14: The art of Software Design

WHY?WHY?

WHY?WHY?

WHY?

BUILDING SOMETHING

OK, BUT WHY?

Page 15: The art of Software Design

SOLUTION SPACE

PROBLEM SPACE

WHY

WHAT

Page 16: The art of Software Design

HOW

SOLUTION SPACE

Page 17: The art of Software Design

PROBLEM SPACE

Problem Usages Languages Domain Requirements Constraints People

Page 18: The art of Software Design

PROBLEM SPACE

Problem Usages Languages Domain Requirements Constraints People

DOMAIN ( noun, do·main)

Set of concepts

That through usages

Help to solve problems

Page 19: The art of Software Design

PROBLEM SPACE

Problem Usages Languages Domain Requirements Constraints People

DOMAIN Solve Problems

Page 20: The art of Software Design

SOLUTION SPACE

Software Model

Design Patterns

Heuristics Feedback

Page 21: The art of Software Design

Driven

PROBLEM SPACE

Problem Usages Languages Domain Requirements Constraints People

SOLUTION SPACE

Software Model

Design Patterns

Heuristics Feedback

Page 22: The art of Software Design

PROBLEM SPACE

Domain

SOLUTION SPACE

Design- Driven

Page 23: The art of Software Design

HEURISTICS?practical method not guaranteed to be

optimal or perfect, but sufficient for the immediate goals.

Page 24: The art of Software Design

PATTERNS

FAVORITES ALGORITHMS

FAVORITES SOLUTIONS

FAVORITES APPROACHES

OUR MENTAL MODELS

Page 25: The art of Software Design

HOUSTON?

Page 26: The art of Software Design

TRAPPED BY YOUR OWN HEURISTICS?

Page 27: The art of Software Design

SYSTEMATIC LAYERS

ORMFRAMEWORKSANEMIC

BEHAVIORS…IOC

Page 28: The art of Software Design

FROM HEURISTICS TO SOLUTION-FIRST BIAS

Page 29: The art of Software Design
Page 30: The art of Software Design

MOST DEVELOPERS LIKES…

SOLUTIONS

Page 31: The art of Software Design

OUR USERS ARE TIRED OF C.R.U.D.

APPLICATIONS

Page 32: The art of Software Design

C.R.U.D. APPLICATIONS

Page 33: The art of Software Design

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 34: The art of Software Design

Create

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 35: The art of Software Design

Ctrl-C

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 36: The art of Software Design

Update

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 37: The art of Software Design

Ctrl-V

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 38: The art of Software Design

Create

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 39: The art of Software Design

Ctrl-V

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 40: The art of Software Design

Update

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 41: The art of Software Design

Ctrl-V

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 42: The art of Software Design

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 43: The art of Software Design

I’m doing all the job actually…

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 44: The art of Software Design

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 45: The art of Software Design

Damn it!

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 46: The art of Software Design

Damn I.T!

THE C.R.U.D. BURDEN CRUD app #1

CRUD app #2

CRUD app #3

Page 47: The art of Software Design

WHY?!?

Page 48: The art of Software Design

MANY REASONS BUT…

Page 49: The art of Software Design

DATA MODELS INSTEAD OF

DOMAIN MODELS

Page 50: The art of Software Design

LAZINESS

« Laziness is nothing more than the habit of resting before you get tired. » (Jules Renard)

Page 51: The art of Software Design

A DDD ALTERNATIVE?

THE APP REALLY HELPS WITH A SPECIFIC & CONSISTANT USER JOURNEY

Page 52: The art of Software Design

OTHER BIASES?

Page 53: The art of Software Design

BEWARE OF FADS

micro-services, blockchains, …

Page 54: The art of Software Design

THE ABSTRACTION-FIRST PITFALL

Page 55: The art of Software Design

CONCRETE THINGS FIRST!

Page 56: The art of Software Design

THE CV-DRIVEN DEVELOPMENT

PANDEMIC

Page 57: The art of Software Design

I.T. AS SEEN BY

THE BUSINESS

Page 58: The art of Software Design

WE MUST FOCUS MORE ON

THE BUSINESS CONCERNS!

Page 59: The art of Software Design

DESIGN IS CONSCIOUS

CHOICES(Banksy)

Page 60: The art of Software Design

ALWAYS CONNECT YOUR DECISIONS

TO YOUR BUSINESS OBJECTIVES

Page 61: The art of Software Design

DESIGN IS THE ART OF TRADE-OFF

Page 62: The art of Software Design

design = f(requirements + constraints)trade-off

Page 63: The art of Software Design

DESIGN SOFTWARE?

Page 64: The art of Software Design

ALIGNMENT & EFFICIENCY

solution space

problem space

Page 65: The art of Software Design

SOME CONSTRAINTS

(the mythical man-month)

Page 66: The art of Software Design

THERMODYNAMICS OF SOFTWARE

Page 67: The art of Software Design

HEXAGONAL ARCHITECTURE

DOMAINCODE

(domain first)

Page 68: The art of Software Design

HEXAGONAL ARCHITECTURE

DOMAINCODE

DO NOT MESS BUSINESS CODE

INFRA CODE

(infra later)

Page 69: The art of Software Design

STANDARD SOFTWARE DESIGN

(take all your favorite heuristics with you ;-(

Page 70: The art of Software Design

CONSCIOUS (SOFTWARE) DESIGN

(take only what you need for the usages/contraints)

Page 71: The art of Software Design

CONSCIOUS (SOFTWARE) DESIGN

USAGES FIRST - INFRA LATER HEXAGONAL ARCHITECTURE

EXAMPLES & BEHAVIOURS (TESTS) DRIVEN EXPLICIT (AND BOUNDED) CONTEXTS

Page 72: The art of Software Design

SOFTWARE DESIGN VS.

REAL WORLD DESIGN?

Page 73: The art of Software Design

DUPLICATION OF

CODE AND DATA AT ALMOST NO

COST

Page 74: The art of Software Design

SCALING

Page 75: The art of Software Design

EASY MODULARIZATION AND INTERFACING

Page 76: The art of Software Design

BEWARE OF THE BUILDING

METAPHOR

Page 77: The art of Software Design

WRAP UP

Page 78: The art of Software Design

MINDSETAPPROACH

Page 79: The art of Software Design

MINDSETAPPROACH

Page 80: The art of Software Design

ALWAYS MAKE CONSCIOUS DECISIONS

{ Value | Constraint }

(Banksy)

Page 81: The art of Software Design

FOSTER CONSCIOUS

DESIGN!

Page 82: The art of Software Design

STAY CONSCIOUS OF YOUR

BIAS

Page 83: The art of Software Design

MINDSETAPPROACH

Page 84: The art of Software Design

MINDSETAPPROACH

Page 85: The art of Software Design

USAGES FIRST …INFRA LATER

Page 86: The art of Software Design

BE ADAPTABLE RATHER THAN PREDICTABLE

Page 87: The art of Software Design

THANK YOU! JOIN US @DDDREBOOT