from monoliths to services: grafually paying your technical debt

98
From Monoliths to Services Gradually paying your Technical Debt BY DAVID LITVAK (@dlitvakb)

Upload: david-litvak-bruno

Post on 16-Apr-2017

91 views

Category:

Software


2 download

TRANSCRIPT

Page 1: From Monoliths to Services: Grafually paying your Technical Debt

From Monoliths to Services Gradually paying your Technical Debt

BY DAVID LITVAK (@dlitvakb)

Page 2: From Monoliths to Services: Grafually paying your Technical Debt

2

TECHNICAL DEBT

Page 3: From Monoliths to Services: Grafually paying your Technical Debt

“You want to make a “quick change” to your software […], and it isn’t quick.

Whatever made that happen, that’s tech debt.”

Dave Diehl

http://jimplush.com/talk/2015/02/

Senior Developer at Fusion Alliance

Page 4: From Monoliths to Services: Grafually paying your Technical Debt
Page 5: From Monoliths to Services: Grafually paying your Technical Debt

Metaphor explaining difficulties of shipping software

Page 6: From Monoliths to Services: Grafually paying your Technical Debt

Like financial debt, technical debt comes with interests.

Failing to pay your debt, interests will come back at you.

Why is it called Debt?

Page 7: From Monoliths to Services: Grafually paying your Technical Debt
Page 8: From Monoliths to Services: Grafually paying your Technical Debt

THE SOFTWARE COST TRIAD

Move one corner and the others will adjust accordingly

If you want to increase Quality, you will have to spend more Money and Time

Money Time

Quality

SOFTWARE COST

Technical Debt comes when Quality is not taken into account, prioritising spending less or working faster

Page 9: From Monoliths to Services: Grafually paying your Technical Debt

Debt itself is not a bad thing!

Invest and pay back early!

Don’t leave debt hanging!

But Hey! It’s not always bad!

Page 10: From Monoliths to Services: Grafually paying your Technical Debt
Page 11: From Monoliths to Services: Grafually paying your Technical Debt

What are the causes?

• Cutting Corners

“I know it looks complicated, but I don’t have time to refactor it.”

https://www.codementor.io/ruby-on-rails/tutorial/staying-on-top-of-your-technical-debt

Page 12: From Monoliths to Services: Grafually paying your Technical Debt
Page 13: From Monoliths to Services: Grafually paying your Technical Debt

What are the causes?

• Lack of Testing

“We can write tests for it later.”

https://www.codementor.io/ruby-on-rails/tutorial/staying-on-top-of-your-technical-debt

Page 14: From Monoliths to Services: Grafually paying your Technical Debt
Page 15: From Monoliths to Services: Grafually paying your Technical Debt

What are the causes?

• Assuming “False Positives” are Positives

“The build fails sometimes, but it passes most of the time. Let’s just move on.”

https://www.codementor.io/ruby-on-rails/tutorial/staying-on-top-of-your-technical-debt

Page 16: From Monoliths to Services: Grafually paying your Technical Debt
Page 17: From Monoliths to Services: Grafually paying your Technical Debt

How to avoid?

• Work Small

Make incremental progress

Page 18: From Monoliths to Services: Grafually paying your Technical Debt
Page 19: From Monoliths to Services: Grafually paying your Technical Debt

How to avoid?

• Work Clean

Seek for refactoring opportunities

Page 20: From Monoliths to Services: Grafually paying your Technical Debt
Page 21: From Monoliths to Services: Grafually paying your Technical Debt

How to avoid?

• Work Green

Have a Test Suite - Use Continuous Integration Tools

Page 22: From Monoliths to Services: Grafually paying your Technical Debt
Page 23: From Monoliths to Services: Grafually paying your Technical Debt

Grades of Debt - James Higgs

• Grade One: Accumulation due to extrinsic changes

Keep up to date with your dependencies and technologies

https://madebymany.com/blog/the-four-grades-of-technical-debt

Page 24: From Monoliths to Services: Grafually paying your Technical Debt
Page 25: From Monoliths to Services: Grafually paying your Technical Debt

Grades of Debt - James Higgs

• Grade Two: Developer Comfort

Code for readability - your future self and co-workers will much appreciate it

https://madebymany.com/blog/the-four-grades-of-technical-debt

Page 26: From Monoliths to Services: Grafually paying your Technical Debt
Page 27: From Monoliths to Services: Grafually paying your Technical Debt

Grades of Debt - James Higgs

• Grade Three: Cost of Pragmatism

Use debt wisely and prototype - throw away if not successful

https://madebymany.com/blog/the-four-grades-of-technical-debt

Page 28: From Monoliths to Services: Grafually paying your Technical Debt
Page 29: From Monoliths to Services: Grafually paying your Technical Debt

Grades of Debt - James Higgs

• Grade Four: The One with the Bite - Impossibility to Move Forward

Point of no return! If you’re here, it may be wise to think about restarting!

https://madebymany.com/blog/the-four-grades-of-technical-debt

Page 30: From Monoliths to Services: Grafually paying your Technical Debt
Page 31: From Monoliths to Services: Grafually paying your Technical Debt

31

MICROSERVICES

Page 32: From Monoliths to Services: Grafually paying your Technical Debt

Architectural Styles

• Monoliths

Single Application - Multiple Responsibilities

• Microservices

Multiple Applications - Single Responsibilities

Page 33: From Monoliths to Services: Grafually paying your Technical Debt

“The microservice architectural style is an approach to developing a single application as a suite of

small services, each running in its own process and communicating with lightweight mechanisms, often

an HTTP resource API.”

Martin Fowler

Chief Scientist at ThoughtWorks

http://martinfowler.com/articles/microservices.html

Page 34: From Monoliths to Services: Grafually paying your Technical Debt

It's an architectural style that enables us to separate each of our product’s responsibilities into very small and separate applications

This gives us flexibility

Page 35: From Monoliths to Services: Grafually paying your Technical Debt

KISS / UNIX

Modern development adopted a similar style

Where does it come from?

https://en.wikipedia.org/wiki/KISS_principle

Page 36: From Monoliths to Services: Grafually paying your Technical Debt
Page 37: From Monoliths to Services: Grafually paying your Technical Debt

Why is it useful?

• Service Independence

Independent from one another - they have “contracts”

Page 38: From Monoliths to Services: Grafually paying your Technical Debt

Why is it useful?

• Deployability

Have a bug in a component - fix and deploy

Page 39: From Monoliths to Services: Grafually paying your Technical Debt

Why is it useful?

• Team Independence

Each can be owned by a different team

Page 40: From Monoliths to Services: Grafually paying your Technical Debt

What are the downsides?• Piping

You have to take into account the inter-connections

• Deployability

Orchestration and Versioning

• Infrastructure

Much more complex setup

Page 41: From Monoliths to Services: Grafually paying your Technical Debt

41

STATE OF THE CLOUD

Page 42: From Monoliths to Services: Grafually paying your Technical Debt

“If someone asks me what cloud computing is, I try not to get bogged down with definitions. I tell them that, simply put, cloud computing is a better way to

run your business.”

Marc Benioff

CEO of salesforce.com

http://www.mercurynews.com/2009/10/23/2009-qa-marc-benioff-ceo-of-salesforce-com/

Page 43: From Monoliths to Services: Grafually paying your Technical Debt

2016

Page 44: From Monoliths to Services: Grafually paying your Technical Debt
Page 45: From Monoliths to Services: Grafually paying your Technical Debt

“Cloud computing is really a no-brainer for any start-up because it allows you to test your business plan very

quickly for little money. Every start-up, or even a division within a company that has an idea for something new,

should be figuring out how to use cloud computing in its plan.”

Brad Jefferson

CEO & Co-Founder of Animoto

http://www.cio.com/article/2428093/infrastructure/cloud-computing--pros-and-cons.html

Page 46: From Monoliths to Services: Grafually paying your Technical Debt

What does it provide us? - Infrastructure

• Cheap

Even with pay-on-demand pricing models

Page 47: From Monoliths to Services: Grafually paying your Technical Debt

What does it provide us? - Infrastructure

• Replaceable

Changed the service? Drop the server and create a new one

Page 48: From Monoliths to Services: Grafually paying your Technical Debt

What does it provide us? - Infrastructure

• Scalable

When demand raises, automatically spin up new copies to cope with demand

Page 49: From Monoliths to Services: Grafually paying your Technical Debt

What does it provide us? - Software

• CDNs

Global content caching - Blazing fast websites

Page 50: From Monoliths to Services: Grafually paying your Technical Debt
Page 51: From Monoliths to Services: Grafually paying your Technical Debt

What does it provide us? - Software

• Content and Databases

Storage servers with multiple architectures

Page 52: From Monoliths to Services: Grafually paying your Technical Debt
Page 53: From Monoliths to Services: Grafually paying your Technical Debt

What does it provide us? - Software

• And EVERYTHING Else

Even sending “Thank You” notes as a Service

Page 54: From Monoliths to Services: Grafually paying your Technical Debt
Page 55: From Monoliths to Services: Grafually paying your Technical Debt

Current Options - Infrastructure

• Amazon Web Services

• Microsoft Azure

• Rackspace

• Google Cloud Engine

Page 56: From Monoliths to Services: Grafually paying your Technical Debt

Current Options - CDNs

• CloudFront

• Akamai

• MaxCDN

• Fastly

Page 57: From Monoliths to Services: Grafually paying your Technical Debt

Current Options - Services

• Contentful

Content Management as a Service

Page 58: From Monoliths to Services: Grafually paying your Technical Debt
Page 59: From Monoliths to Services: Grafually paying your Technical Debt

Current Options - Services

• Snipcart

Shopping Cart as a Service

Page 60: From Monoliths to Services: Grafually paying your Technical Debt
Page 61: From Monoliths to Services: Grafually paying your Technical Debt

Current Options - Services

• Auth0

Authentication as a Service

Page 62: From Monoliths to Services: Grafually paying your Technical Debt
Page 63: From Monoliths to Services: Grafually paying your Technical Debt

63

GOING SERVERLESS

Page 64: From Monoliths to Services: Grafually paying your Technical Debt

“Serverless architectures refer to applications that significantly depend on third-party services (knows as

Backend as a Service or "BaaS") or on custom code that's run in ephemeral containers (Function as a Service or

“FaaS”). […] By using these ideas, and by moving much behaviour to the front end, such architectures remove the need for the traditional 'always on' server system sitting

behind an application”

Mike Roberts

CEO & Co-Founder of Fried Gold Software

http://www.martinfowler.com/articles/serverless.html

Page 65: From Monoliths to Services: Grafually paying your Technical Debt

TRADITIONAL APPLICATION

Unintelligent Client

Server does most of the hard work

Source: https://www.martinfowler.com

Page 66: From Monoliths to Services: Grafually paying your Technical Debt

SERVERLESS APPLICATION

Rich client - Many Frontends

Independent services and infrastructure

Source: https://www.martinfowler.com

Page 67: From Monoliths to Services: Grafually paying your Technical Debt

“If your PaaS can efficiently start instances in 20ms that run for half a second, then call it serverless.”

Adrian Cockcroft

Technology Fellow at Battery Ventures

https://twitter.com/adrianco/status/736553530689998848

Page 68: From Monoliths to Services: Grafually paying your Technical Debt

68

GOODBYE MONOLITH

Page 69: From Monoliths to Services: Grafually paying your Technical Debt

“Microservices architecture potentially offers an easier way to pay down technical debt. Refactoring a big monolithic application can be the equivalent

of a balloon payment. […] you can pay your technical debt incrementally by refactoring services

one by one.”

Eric Knorr

Editor in Chief at CNET

http://www.infoworld.com/article/2878659/application-development/reducing-technical-debt-with-microservices.html

Page 70: From Monoliths to Services: Grafually paying your Technical Debt

Now that we’ve introduced the concepts

Let’s dive into how to apply them in practice

Page 71: From Monoliths to Services: Grafually paying your Technical Debt

Starting from your Rails App

• Identify

Models usually travel in families - identify these families

Page 72: From Monoliths to Services: Grafually paying your Technical Debt
Page 73: From Monoliths to Services: Grafually paying your Technical Debt

Starting from your Rails App

• Categorize

Understand the functionality and responsibility of each component family

Page 74: From Monoliths to Services: Grafually paying your Technical Debt
Page 75: From Monoliths to Services: Grafually paying your Technical Debt

Starting from your Rails App

• Split

Create separate API apps exposing them

Page 76: From Monoliths to Services: Grafually paying your Technical Debt
Page 77: From Monoliths to Services: Grafually paying your Technical Debt

Starting from your Rails App

• Communicate

Integrate different parts of the application through it’s HTTP Interfaces

Page 78: From Monoliths to Services: Grafually paying your Technical Debt
Page 79: From Monoliths to Services: Grafually paying your Technical Debt

Moving away from Rails

• Move Static and Read-first content to a CMS

Marketing, Blogs, Product and non-user generated content moved

Page 80: From Monoliths to Services: Grafually paying your Technical Debt
Page 81: From Monoliths to Services: Grafually paying your Technical Debt

Moving away from Rails

• Decouple your Front-End from your business logic

Your HTML or Native app shouldn’t be tied to your server code

Page 82: From Monoliths to Services: Grafually paying your Technical Debt
Page 83: From Monoliths to Services: Grafually paying your Technical Debt

Moving away from Rails

• Profit from 3rd party Services

Use cloud based authentication, messaging, mailing, payments to remove burden from your code

Page 84: From Monoliths to Services: Grafually paying your Technical Debt
Page 85: From Monoliths to Services: Grafually paying your Technical Debt

Moving away from Rails

• Leverage Static Sites and Static Assets

Using Static Site Generated websites + CDNs to deliver fast and increase conversion

Page 86: From Monoliths to Services: Grafually paying your Technical Debt

“It’s much easier mentally to tackle $10,000 of debt across 4 credit cards at $2500 each than 1 card at

the full $10,000.”

Jim Plush

Sr Director of Engineering at CrowdStrike

http://jimplush.com/talk/2015/02/28/microservices-allow-for-localized-tech-debt/

Page 87: From Monoliths to Services: Grafually paying your Technical Debt

Keep Security in Check

• Validate

Validate on your Client side code - specially on payment transactions

Page 88: From Monoliths to Services: Grafually paying your Technical Debt
Page 89: From Monoliths to Services: Grafually paying your Technical Debt

Keep Security in Check

• Validate

Validate on your Middleware - specially on payment transactions

Page 90: From Monoliths to Services: Grafually paying your Technical Debt
Page 91: From Monoliths to Services: Grafually paying your Technical Debt

Keep Security in Check

• Validate

Make sure not to expose your internals

Page 92: From Monoliths to Services: Grafually paying your Technical Debt
Page 93: From Monoliths to Services: Grafually paying your Technical Debt

Keep Security in Check

• Validate

Make sure you have retry and fallback mechanisms

Page 94: From Monoliths to Services: Grafually paying your Technical Debt
Page 95: From Monoliths to Services: Grafually paying your Technical Debt

Rounding up

• Prototype and test ideas

• Create single responsibility applications

• Test your code

• Keep it safe

Page 96: From Monoliths to Services: Grafually paying your Technical Debt

Demo Time

Page 97: From Monoliths to Services: Grafually paying your Technical Debt
Page 98: From Monoliths to Services: Grafually paying your Technical Debt

We’re Hiring!

Twitter: @dlitvakbEmail: [email protected]

Thanks!