From macro to micro goto

136
From Macro To Micro Sam Newman ThoughtWorks

description

 

Transcript of From macro to micro goto

Page 1: From macro to micro   goto

From Macro To Micro

Sam Newman ThoughtWorks

Page 2: From macro to micro   goto

@samnewman#gotoaar

Page 3: From macro to micro   goto

@samnewman#gotoaar

Page 4: From macro to micro   goto

@samnewman#gotoaar

Page 5: From macro to micro   goto

@samnewman#gotoaar

Durability

Page 6: From macro to micro   goto

@samnewman#gotoaar

Technology

Page 7: From macro to micro   goto

@samnewman#gotoaar

Geography

Page 8: From macro to micro   goto

@samnewman#gotoaar

Team Structure & Organisation

Page 9: From macro to micro   goto

@samnewman#gotoaar

Speed Of Change

Page 10: From macro to micro   goto

@samnewman#gotoaar

http://bit.ly/GeeCon2012SamN

Page 11: From macro to micro   goto

@samnewman#gotoaar

What makes a good service?

Page 12: From macro to micro   goto

@samnewman#gotoaar

High Cohesion

Page 13: From macro to micro   goto

@samnewman#gotoaar

Loose Coupling

Page 14: From macro to micro   goto

@samnewman#gotoaar

Page 15: From macro to micro   goto

@samnewman#gotoaar

Page 16: From macro to micro   goto

@samnewman#gotoaar

Page 17: From macro to micro   goto

@samnewman#gotoaar

Page 18: From macro to micro   goto

@samnewman#gotoaar

Page 19: From macro to micro   goto

@samnewman#gotoaar

Page 20: From macro to micro   goto

@samnewman#gotoaar

Page 21: From macro to micro   goto

@samnewman#gotoaar

Page 22: From macro to micro   goto

@samnewman#gotoaar

Page 23: From macro to micro   goto

@samnewman#gotoaar

Page 24: From macro to micro   goto

@samnewman#gotoaar

Page 25: From macro to micro   goto

@samnewman#gotoaar

Bounded Context

Page 26: From macro to micro   goto

@samnewman#gotoaar

"The delimited applicability of a particular model. BOUNDING CONTEXTS gives team members a clear and shared understanding of what has to be consistent and what can develop independently."

Page 27: From macro to micro   goto

@samnewman#gotoaar

A specific responsibility enforced by explicit boundaries

!

http://www.sapiensworks.com/blog/post/2012/04/17/DDD-The-Bounded-Context-Explained.aspx

Page 28: From macro to micro   goto

@samnewman#gotoaar

Page 29: From macro to micro   goto

@samnewman#gotoaar

Page 30: From macro to micro   goto

@samnewman#gotoaar

Add to cart

Page 31: From macro to micro   goto

@samnewman#gotoaar

Add to cart

Checkout

Page 32: From macro to micro   goto

@samnewman#gotoaar

Add to cart

Checkout

View Latest Releases

Page 33: From macro to micro   goto

@samnewman#gotoaar

Add to cart

Checkout

View Latest Releases

Search

Page 34: From macro to micro   goto

@samnewman#gotoaar

Add to cart

Checkout

View Latest Releases

Search

Listen To Previews

Page 35: From macro to micro   goto

@samnewman#gotoaar

Add to cart

CheckoutView Latest

Releases

Search

Listen To Previews

Page 36: From macro to micro   goto

@samnewman#gotoaar

Add to cart

CheckoutView Latest

Releases

Search

Listen To Previews

Shopping Cart Catalog

Music Library

Page 37: From macro to micro   goto

@samnewman#gotoaar

Page 38: From macro to micro   goto

@samnewman#gotoaar

Page 39: From macro to micro   goto

@samnewman#gotoaar

MusikShopMono

Page 40: From macro to micro   goto

@samnewman#gotoaar

MusikShopMono

Warehouse Finance

Catalog Recommendation

Page 41: From macro to micro   goto

@samnewman#gotoaar

That was the easy bit

Page 42: From macro to micro   goto

@samnewman#gotoaar

Enter the DB

Page 43: From macro to micro   goto

@samnewman#gotoaar

Page 44: From macro to micro   goto

@samnewman#gotoaar

DB

MusikShopMono

Page 45: From macro to micro   goto

@samnewman#gotoaar

DB Schema

Recomendation Service

MusicShopMono

Page 46: From macro to micro   goto

@samnewman#gotoaar

DB Schema

Recomendation ServiceMusicShopMono

Page 47: From macro to micro   goto

@samnewman#gotoaar

DB Schema

Recomendation ServiceMusicShopMono

Page 48: From macro to micro   goto

@samnewman#gotoaar

DB

MusikShopMono

Warehouse Finance

Catalog Recommendation

Repository

Page 49: From macro to micro   goto

@samnewman#gotoaar

DB

MusikShopMono

Warehouse Finance

Catalog Recommendation

Page 50: From macro to micro   goto

@samnewman#gotoaar

Page 51: From macro to micro   goto

@samnewman#gotoaar

Page 52: From macro to micro   goto

@samnewman#gotoaar

Catalog

MusikShopMono

Page 53: From macro to micro   goto

@samnewman#gotoaar

Catalog

Line Items

MusikShopMono

Page 54: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items

MusikShopMono

Page 55: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items Ledger

MusikShopMono

Page 56: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items Ledger

MusikShopMono

Page 57: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items Ledger

MusikShopMono

Page 58: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items Ledger

MusikShopMono

Page 59: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items Ledger

MusikShopMono

Page 60: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items Ledger

MusikShopMono

Page 61: From macro to micro   goto

@samnewman#gotoaar

Catalog Finance

Line Items Ledger

MusikShopMono

Page 62: From macro to micro   goto

@samnewman#gotoaar

Catalog Service Finance Service

MusikShop System

Page 63: From macro to micro   goto

@samnewman#gotoaar

Catalog Service Finance Service

MusikShop System

Page 64: From macro to micro   goto

@samnewman#gotoaar

Catalog Service Finance Service

MusikShop System

Line Items

Page 65: From macro to micro   goto

@samnewman#gotoaar

Catalog Service Finance Service

MusikShop System

Line Items Ledger

Page 66: From macro to micro   goto

@samnewman#gotoaar

Catalog Service Finance Service

MusikShop System

Line Items Ledger

/sku/185

Page 67: From macro to micro   goto

@samnewman#gotoaar

Catalog

Finance

Warehouse

Country Codes

MusikShopMono

Page 68: From macro to micro   goto

@samnewman#gotoaar

Catalog

FinanceWarehouse

Country Codes

Country Codes

Country Codes

MusikShopMono

Page 69: From macro to micro   goto

@samnewman#gotoaar

Catalog

FinanceWarehouse

MusikShopMono

Page 70: From macro to micro   goto

@samnewman#gotoaar

Finance Warehouse

Customer Record

MusikShopMono

Page 71: From macro to micro   goto

@samnewman#gotoaar

reify

Page 72: From macro to micro   goto

@samnewman#gotoaar

Page 73: From macro to micro   goto

@samnewman#gotoaar

Finance Warehouse

Customer Record

MusikShop

Page 74: From macro to micro   goto

@samnewman#gotoaar

Finance Warehouse

Customer Record

Customer

MusikShop

Page 75: From macro to micro   goto

@samnewman#gotoaar

Warehouse ServiceFinance Service

MusikShop System

Customer Service

Page 76: From macro to micro   goto

@samnewman#gotoaar

Catalog Warehouse

Item

MusikShop

Page 77: From macro to micro   goto

@samnewman#gotoaar

Catalog Warehouse

Item

MusikShop

Bee Gees Hits | $4.99 | 45

Page 78: From macro to micro   goto

@samnewman#gotoaar

Catalog Warehouse

Item

MusikShop

Bee Gees Hits | $4.99 | 45

Page 79: From macro to micro   goto

@samnewman#gotoaar

Catalog Warehouse

Item

MusikShop

Bee Gees Hits | $4.99 | 45

Page 80: From macro to micro   goto

@samnewman#gotoaar

Catalog Warehouse

Catalog Item

MusikShop

Stock Levels

Page 81: From macro to micro   goto

@samnewman#gotoaar

Page 82: From macro to micro   goto

@samnewman#gotoaar

Page 83: From macro to micro   goto

@samnewman#gotoaar

Page 84: From macro to micro   goto

@samnewman#gotoaar

Page 85: From macro to micro   goto

@samnewman#gotoaar

DB

Page 86: From macro to micro   goto

@samnewman#gotoaar

DB

Cost Of Change

Page 87: From macro to micro   goto

@samnewman#gotoaar

Page 88: From macro to micro   goto

@samnewman#gotoaar

Microservices

Page 89: From macro to micro   goto

@samnewman#gotoaar

UNIX Way

Page 90: From macro to micro   goto

@samnewman#gotoaar

“This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface”

- Douglas McIlroy!

Page 91: From macro to micro   goto

@samnewman#gotoaar

Page 92: From macro to micro   goto

@samnewman#gotoaar

Rule of Modularity: Developers should build a program out of simple parts connected by well defined interfaces, so problems are local, and parts of the program can be replaced in future versions to support new features. This rule aims to save time on debugging complex code that is complex, long, and unreadable.

Page 93: From macro to micro   goto

@samnewman#gotoaar

Rule of Simplicity: Developers should design for simplicity by looking for ways to break up program systems into small, straightforward cooperating pieces. This rule aims to discourage developers’ affection for writing “intricate and beautiful complexities” that are in reality bug prone programs.

Page 94: From macro to micro   goto

@samnewman#gotoaar

Rule of Parsimony: Developers should avoid writing big programs. This rule aims to prevent overinvestment of development time in failed or suboptimal approaches caused by the owners of the program’s reluctance to throw away visibly large pieces of work. Smaller programs are not only easier to optimize and maintain; they are easier to delete when deprecated.

Page 95: From macro to micro   goto

@samnewman#gotoaar

ls

Page 96: From macro to micro   goto

@samnewman#gotoaar

ls | grep “Sam”

Page 97: From macro to micro   goto

@samnewman#gotoaar

Page 98: From macro to micro   goto

@samnewman#gotoaar

Page 99: From macro to micro   goto

@samnewman#gotoaar

Page 100: From macro to micro   goto

@samnewman#gotoaar

200 lines of code

Page 101: From macro to micro   goto

@samnewman#gotoaar

Basket

Page 102: From macro to micro   goto

@samnewman#gotoaar

Login

Basket

Page 103: From macro to micro   goto

@samnewman#gotoaar

Login

Basket

Registration

Page 104: From macro to micro   goto

@samnewman#gotoaar

Login

Basket

Recommendation

Registration

Page 105: From macro to micro   goto

@samnewman#gotoaar

Login

Basket

Registration

Recommendation - Now With Added

Clojure!

Page 106: From macro to micro   goto

@samnewman#gotoaar

Page 107: From macro to micro   goto

@samnewman#gotoaar

Page 108: From macro to micro   goto

@samnewman#gotoaar

Test!

Page 109: From macro to micro   goto

@samnewman#gotoaar

Page 110: From macro to micro   goto

@samnewman#gotoaar

Page 111: From macro to micro   goto

@samnewman#gotoaar

Page 112: From macro to micro   goto

@samnewman#gotoaar

Page 113: From macro to micro   goto

@samnewman#gotoaar

Page 114: From macro to micro   goto

@samnewman#gotoaar

Page 115: From macro to micro   goto

@samnewman#gotoaar

Alert!!!

Page 116: From macro to micro   goto

@samnewman#gotoaar

Page 117: From macro to micro   goto

@samnewman#gotoaar

Page 118: From macro to micro   goto

@samnewman#gotoaar

Page 119: From macro to micro   goto

@samnewman#gotoaar

Page 120: From macro to micro   goto

@samnewman#gotoaar

Page 121: From macro to micro   goto

@samnewman#gotoaar

UP

Page 122: From macro to micro   goto

@samnewman#gotoaar

DOWN

Page 123: From macro to micro   goto

@samnewman#gotoaar

Page 124: From macro to micro   goto

@samnewman#gotoaar

Page 125: From macro to micro   goto

@samnewman#gotoaar

UP?

Page 126: From macro to micro   goto

@samnewman#gotoaar

UP? DOWN?

Page 127: From macro to micro   goto

@samnewman#gotoaar

Number >> Size

Page 128: From macro to micro   goto

@samnewman#gotoaar

Page 129: From macro to micro   goto

@samnewman#gotoaar

Page 130: From macro to micro   goto

@samnewman#gotoaar

Page 131: From macro to micro   goto

@samnewman#gotoaar

Page 132: From macro to micro   goto

@samnewman#gotoaar

Page 133: From macro to micro   goto

@samnewman#gotoaar

Page 134: From macro to micro   goto

@samnewman#gotoaar

Page 135: From macro to micro   goto

@samnewman#gotoaar

Summary

- Identify your bounded contexts

- Understand the cost of change - and do just enough up front thinking!

- This is an incremental journey - you won’t get it right first time

- While size is important, number of services is often the limiting factor

Page 136: From macro to micro   goto

[email protected] @samnewman

http://www.flickr.com/photos/janicskovsky/6362911179/ http://www.flickr.com/photos/mayhem/2939259129/ http://www.flickr.com/photos/clover_1/4855455737/ http://www.flickr.com/photos/safari_vacation/6384704645/ http://www.flickr.com/photos/moriza/292125851/ http://www.flickr.com/photos/hoyvinmayvin/4010761680/ http://www.flickr.com/photos/jakescreations/52860690/ http://www.flickr.com/photos/doug88888/5888519573/ http://www.flickr.com/photos/dannykboyd/4746718211/ http://www.flickr.com/photos/anantns/6765139575/ http://www.flickr.com/photos/pen3ya/2011092846/