40
COMPLEXITY GAME – FROM BIG BALLS OF MUD TO SHINY BULLETS Raimondas Tijūnaitis

COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

COMPLEXITY GAME – FROM BIG BALLS OF MUD TO SHINY BULLETS

Raimondas Tijūnaitis

Page 2: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Adform Established in DK, 2002

350+ engineers

7 data centers across 4 continents

2 million requests/s in less than 100ms

50 billion transactions a day

3000+ servers

Petabytes of data

Page 3: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

“Modern” software evolution

https://tommcfarlin.com/design-patterns-for-refactoring-facade/

Page 4: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

One and only one true metric

Is it harder to make changes?

Page 5: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Physics against us? • A computer program that is

used will be modified

• When a program is modified, its complexity will increase, provided that one does not actively work against this. -- Lehman M. M

http://www.eternagame.org/web/blog/4948894/

Page 6: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Welcome to the maze

Page 7: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

The princess, aka - Event-sourced micro-services

Page 8: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

LEVEL 1: Picking the strategy

Refactoring Rework

Old System

New System

Sync

Old System

Change

Test

Change

Function 1 Function 2 Function 3

Page 9: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Messages from old system

Page 10: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Dual-writes: time and time again

DB - 1

DB - 2

t

t

t

t

Write A Write A

Write A’ Write A’

Page 11: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 12: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Meet new enemies

Eventual consistency

Idempotency and ordering

Desynchronization/dual-writes

Page 13: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

SECRET LEVEL - CDCs

… … … … … … … … …

DB Writes Application Changes

Indexing Cache Hadoop

Persisted log

Log changes

Page 14: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Technologies

Page 15: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Use cases

Data replication

Building Caches and Secondary indexes

Data processing and transformation

Building Read-models/Materialized views

Page 16: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 17: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

LEVEL 2 – Strategic Design

Page 18: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Event Storming

Invite the right people

Explore the domain starting from Domain Events

Explore origin of the domain events – define commands

Page 19: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 20: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

LEVEL 3: Event sourcing

Event Store Service Commands Events

BannerCreated BannerClickUrlsAdded BannerRenamed BannerRenamed

Page 21: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Event store

Stores series of immutable events

There is no delete

Acts as “Event Log”

Has built in projection engine

Is not designed for querying

Page 22: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 23: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Level 4: Projections

Banner Projection

Click Urls changed

Image Renamed

Image Created

Other systems

Read model

Indexes

Page 24: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 25: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

LEVEL 5: API

Should be the only way to interact with your system

UI is built on top of the API

Clear and agreed guidelines

Page 26: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Commands as HTTP resources

Re-upload File PUT: http://.../ImageBaner/{uuid}/File

Rename Banner PUT: http://.../ImageBaner/{uuid}/Name

Page 27: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 28: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

LEVEL 6: Task based UI

Page 29: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

From excel to business cases

https://cqrs.wordpress.com/documents/task-based-ui/

https://cqrs.wordpress.com/documents/task-based-ui/

Page 30: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 31: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

LEVEL 7: Distributed Monolith

Page 32: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

App Intelligence

Page 33: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Service toolkit libraries

Windows Service

Web API

Testing lib

Pub/sub lib

Data Sync framework

Event-store lib

Caching lib

Diagnostics lib

Page 34: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Service Templates

Page 35: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Check!

Page 36: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

But what if…

No guns for You!!!

Page 37: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Adapt to business thinking Avoid technical arguments

Code quality is poor

We need to refactor

Technology is old

Everyone is using Angular now…

Missing “best practices”

We want to try NoSQL…

Prefer economical arguments

Releases every day

Faster feature development

New products

Involve more developers

MS licenses are expensive…

Page 38: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Don’t get lost in a dungeon

Have a VISION

COMMIT

Define Your STRATEGY

Create TACTICS

FIGHT ADOPT new tactics Fight HARDER WIN

Page 39: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL

Thanks

Page 40: COMPLEXITY GAME FROM BIG BALLS OF MUD TO SHINY BULLETS2016.net.developerdays.pl/wp-content/2016_mat_conf/NETDeveloper… · @DeveloperDaysPL net.developerdays.pl Adform Established

net.developerdays.pl @DeveloperDaysPL