63
Refactor your Software Architecture

Ncrafts.io - Refactor your software architecture

Embed Size (px)

DESCRIPTION

Most dev teams have a very simple conception of software architecture. They start with a database, a user interface, and add layers of (DRY) mess between the two. Then they have a performance problem so they add memcache and mongodb (Now we're webscale!). Months or years later, releasing new features in production gets harder and riskier: it's time for a rewrite. Let's use AnguNodeMvcDoop to solve all our maintainability issues! And the cycle starts over... In this talk we'll see that software architecture is not defined by the technologies you use but by the high level principles you set. We'll see what really matters to make your information system maintainable and how to get there progressively!

Citation preview

Page 1: Ncrafts.io - Refactor your software architecture

Refactor your Software Architecture

Page 2: Ncrafts.io - Refactor your software architecture

Who am I?Julien Lavigne du CadetDev lead at Criteo

http://fr.linkedin.com/in/julienlavigneducadet/@julienlavigne

Page 3: Ncrafts.io - Refactor your software architecture

How to structure yourenterprise applications

Page 4: Ncrafts.io - Refactor your software architecture

… a business problem!

We often start with…

Page 5: Ncrafts.io - Refactor your software architecture

That we try to solve with…

Page 6: Ncrafts.io - Refactor your software architecture

That we try to solve with…

Languages

Frameworks

Persistencetechnologies

Page 7: Ncrafts.io - Refactor your software architecture

...and a 3 tiers architecture

Business

Data

UI

Page 8: Ncrafts.io - Refactor your software architecture

…and a 3 tiers architecture

Asp.net MVC

SQL Server

Angular

Page 9: Ncrafts.io - Refactor your software architecture

…and a 3 tiers architecture

WCF

SQL Server

WPF

Page 10: Ncrafts.io - Refactor your software architecture

...and a 3 tiers architecture

Play

Oracle

Ember

Page 11: Ncrafts.io - Refactor your software architecture

With some layers…

DTOApplication LogicBusiness LogicData Access

Database

UI

Page 12: Ncrafts.io - Refactor your software architecture

With some layers…

Application LogicBusiness LogicData Access

Database

UI

Page 13: Ncrafts.io - Refactor your software architecture

And it grows…

Page 14: Ncrafts.io - Refactor your software architecture

And it grows…

… and it gets slow!

Page 15: Ncrafts.io - Refactor your software architecture

And it gets unmaintanable!

Page 16: Ncrafts.io - Refactor your software architecture

Why?Why?

Page 17: Ncrafts.io - Refactor your software architecture

Releases are all or nothing*

Page 18: Ncrafts.io - Refactor your software architecture

Releases are all or nothing**Some people will tell you that’s why we have stored procedures... Don’t trust them :p.

Page 19: Ncrafts.io - Refactor your software architecture

Refactorings are expansiveMigrating to new frameworks requires rewriting a whole layer

Page 20: Ncrafts.io - Refactor your software architecture

One size doesn’t fit allHard to have custom solutions for a vertical

Page 21: Ncrafts.io - Refactor your software architecture

What can we do?

Page 22: Ncrafts.io - Refactor your software architecture

We learned to split in the wrong direction

Page 23: Ncrafts.io - Refactor your software architecture

Split the system into small components…

Page 24: Ncrafts.io - Refactor your software architecture

… releasable independently from each other

Page 25: Ncrafts.io - Refactor your software architecture

Architecture:interfaces and interactions between our components

Page 26: Ncrafts.io - Refactor your software architecture

Business

Database

UI

Or how to go from…

Page 27: Ncrafts.io - Refactor your software architecture

UI

To…

Page 28: Ncrafts.io - Refactor your software architecture

UI

Or more realistically to…

Business

Database

Page 29: Ncrafts.io - Refactor your software architecture

UI

Or even that…

Business

Database

Job Scheduler

Page 30: Ncrafts.io - Refactor your software architecture

How do we proceed?

Page 31: Ncrafts.io - Refactor your software architecture

Start small

Page 32: Ncrafts.io - Refactor your software architecture

Identify one featurethat has few dependencies… Example: sending emails

Page 33: Ncrafts.io - Refactor your software architecture

Define the APIinterface & communication protocol

Page 34: Ncrafts.io - Refactor your software architecture

Choose an architectural style

RESTWEB SERVICESERVICE BUS…

Page 35: Ncrafts.io - Refactor your software architecture

What is the offered service?

Page 36: Ncrafts.io - Refactor your software architecture

What is the offered service?

InputsFROMTOTITLEBODY

Page 37: Ncrafts.io - Refactor your software architecture

What is the offered service?

InputsFROMTOTITLEBODY

OutputsACK / ERROR CODECALLBACKS / EVENTS

Page 38: Ncrafts.io - Refactor your software architecture

UI

Focus on

Page 39: Ncrafts.io - Refactor your software architecture

Implement and deploydeployment should be independent of everything else!

Page 40: Ncrafts.io - Refactor your software architecture

Replace usages everywhere

Page 41: Ncrafts.io - Refactor your software architecture

Go back to step one and… start again**a lot… :-)

Page 42: Ncrafts.io - Refactor your software architecture

The next steps

Page 43: Ncrafts.io - Refactor your software architecture

Start writing all new code in components

Page 44: Ncrafts.io - Refactor your software architecture

Encapsulate legacy codeIt’s fine to have some uglyness in a component as long as the interface is clean!

Page 45: Ncrafts.io - Refactor your software architecture

Define clear boundaries

Page 46: Ncrafts.io - Refactor your software architecture

Make everything accessible through an APIFrom business features to technical features

Page 47: Ncrafts.io - Refactor your software architecture

What did we achieve?

Page 48: Ncrafts.io - Refactor your software architecture

Reuse and centralisation

Page 49: Ncrafts.io - Refactor your software architecture

Independent deployments…and rollbacks!Shorter release cycles, less risks, happy users!

Page 50: Ncrafts.io - Refactor your software architecture

Independent component designsKeep It Simple, Stupid

Page 51: Ncrafts.io - Refactor your software architecture

Independent component designsExperiment!

Page 52: Ncrafts.io - Refactor your software architecture

Replaceable components

Page 53: Ncrafts.io - Refactor your software architecture

Easier testingTest the component & the interactions with the component

Page 54: Ncrafts.io - Refactor your software architecture

In conclusion…

Page 55: Ncrafts.io - Refactor your software architecture

Software architecture is aboutdefining high level principles…

Page 56: Ncrafts.io - Refactor your software architecture

To shorten release cycles…

Page 57: Ncrafts.io - Refactor your software architecture

And keep the system maintenable

Page 58: Ncrafts.io - Refactor your software architecture

My suggestion

Page 59: Ncrafts.io - Refactor your software architecture

build small components…

Page 60: Ncrafts.io - Refactor your software architecture

That communicate throuh defined interfaces

Page 61: Ncrafts.io - Refactor your software architecture

Give it a try!

Page 62: Ncrafts.io - Refactor your software architecture

Thank you!

Page 63: Ncrafts.io - Refactor your software architecture

We’re hiring!http://www.criteo.com/en/jobs