complexity game from big balls of mud to shiny...
TRANSCRIPT
![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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/1.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/2.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/3.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/4.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/5.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/6.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/7.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/8.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/9.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/10.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/11.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/12.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/13.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/14.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/15.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/16.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/17.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/18.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/19.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/20.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/21.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/22.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/23.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/24.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/25.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/26.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/27.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/28.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/29.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/30.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/31.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/32.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/33.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/34.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/35.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/36.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/37.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/38.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/39.jpg)
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](https://reader034.vdocument.in/reader034/viewer/2022050419/5f8f228e48bed616297f16d5/html5/thumbnails/40.jpg)
net.developerdays.pl @DeveloperDaysPL