Transcript
Page 1: Legacy Code: Evolve or Rewrite?

Legacy CodeEvolve or Rewrite ?

A retrospective

Cyrille Martraire - @cyriux -

Page 2: Legacy Code: Evolve or Rewrite?

http://1.bp.blogspot.com/_SOzNIrpkT7M/TIhYjDKKz-I/AAAAAAAABjo/NCPSaVmZn0w/s1600/100_2824.jpg

Page 3: Legacy Code: Evolve or Rewrite?

Passionate developer

PARIS Since 1999

!@cyriux

Page 4: Legacy Code: Evolve or Rewrite?

Paris Software Craftsmanship Community

http://www.meetup.com/paris-software-craftsmanship/

Page 5: Legacy Code: Evolve or Rewrite?

TDDBDDDDDLegacy

Page 6: Legacy Code: Evolve or Rewrite?
Page 7: Legacy Code: Evolve or Rewrite?

LEGACY

Page 8: Legacy Code: Evolve or Rewrite?

Legacy:Evolve or rewrite?

Page 9: Legacy Code: Evolve or Rewrite?

Actual Example

Page 10: Legacy Code: Evolve or Rewrite?

Once upon a time…

Page 11: Legacy Code: Evolve or Rewrite?

There was a frustrated ambition

Page 12: Legacy Code: Evolve or Rewrite?

We Want:

Page 13: Legacy Code: Evolve or Rewrite?

Large Ambition

Page 14: Legacy Code: Evolve or Rewrite?

Asset Management

Page 15: Legacy Code: Evolve or Rewrite?
Page 16: Legacy Code: Evolve or Rewrite?

wanna do big things stuck with a legacy

Page 17: Legacy Code: Evolve or Rewrite?

So what do we do?

Page 18: Legacy Code: Evolve or Rewrite?

REWRITE

Page 19: Legacy Code: Evolve or Rewrite?

STOP!

Page 20: Legacy Code: Evolve or Rewrite?

We all want to rewrite

Page 21: Legacy Code: Evolve or Rewrite?
Page 22: Legacy Code: Evolve or Rewrite?

hard to release regressions

Page 23: Legacy Code: Evolve or Rewrite?

Legacy

Page 24: Legacy Code: Evolve or Rewrite?

Legacy

No Test& Technical Debt too

Page 25: Legacy Code: Evolve or Rewrite?

http://skillsmatter.com/podcast/design-architecture/talk-from-eric-evans

Page 26: Legacy Code: Evolve or Rewrite?

Plenty of Legacy code working since 1993

Redoing = Waste + Risk

Page 27: Legacy Code: Evolve or Rewrite?

Poorly designed codeWorking wellNever changed

Is OK

Page 28: Legacy Code: Evolve or Rewrite?

KEEP iT

Page 29: Legacy Code: Evolve or Rewrite?

KEEP GUI

, DB,

APP Ser

ver,

middleware

Page 30: Legacy Code: Evolve or Rewrite?

We Want NEW FEATURES!CHA

NGE

SOMETH

ING

Page 31: Legacy Code: Evolve or Rewrite?

Haz Change?

Page 32: Legacy Code: Evolve or Rewrite?

JUSTDO IT!

Page 33: Legacy Code: Evolve or Rewrite?

QUICK

Page 34: Legacy Code: Evolve or Rewrite?

Did we break something?

Page 35: Legacy Code: Evolve or Rewrite?

http://martinezglass.com

No Test

Page 36: Legacy Code: Evolve or Rewrite?

Takes a lot of time

No Test+ Debug!

Page 37: Legacy Code: Evolve or Rewrite?

Just Do It: Not that quick

Again and again

Page 38: Legacy Code: Evolve or Rewrite?

Could we do better?

Page 39: Legacy Code: Evolve or Rewrite?

EVOLVE

Page 40: Legacy Code: Evolve or Rewrite?

Surround with tests FIRST

Page 41: Legacy Code: Evolve or Rewrite?

Surround with tests!

Page 42: Legacy Code: Evolve or Rewrite?
Page 43: Legacy Code: Evolve or Rewrite?

Testing legacy code is hard & slow

Page 44: Legacy Code: Evolve or Rewrite?

Testing is an investment

Page 45: Legacy Code: Evolve or Rewrite?

Driver = Cost of testing

Page 46: Legacy Code: Evolve or Rewrite?

A matter of velocity

Page 47: Legacy Code: Evolve or Rewrite?

Legacy testing effort Vs.

All new tested code?

Is it worth it?

Page 48: Legacy Code: Evolve or Rewrite?

1:4(Ok, I totally made it up)

ratio

Page 49: Legacy Code: Evolve or Rewrite?

REDO

Page 50: Legacy Code: Evolve or Rewrite?

Differentiating to the business?

Page 51: Legacy Code: Evolve or Rewrite?

The CEO will tell you

Page 52: Legacy Code: Evolve or Rewrite?

Not differentiating?

Page 53: Legacy Code: Evolve or Rewrite?

BUY

Page 54: Legacy Code: Evolve or Rewrite?

&ADA

PT

your

proc

ess

Page 55: Legacy Code: Evolve or Rewrite?

Differentiating!

Page 56: Legacy Code: Evolve or Rewrite?

REWRITE

Page 57: Legacy Code: Evolve or Rewrite?

• Why not, but not now • Don't get lost redoing everything forever

"What if we also rewrote this crappy part?"

Page 58: Legacy Code: Evolve or Rewrite?

...

Page 59: Legacy Code: Evolve or Rewrite?

JUSTENOUGH

Page 60: Legacy Code: Evolve or Rewrite?

You cannotrewrite all

You can rewrite

Page 61: Legacy Code: Evolve or Rewrite?

Where to stop?

What to rewrite?

Page 62: Legacy Code: Evolve or Rewrite?
Page 63: Legacy Code: Evolve or Rewrite?

Find boundaries

What to rewrite?

Page 64: Legacy Code: Evolve or Rewrite?

Discover the app

!!

Read the documents

Interview people

Use the application

Read the code

Fix bugs

Page 65: Legacy Code: Evolve or Rewrite?

Visualize[primary flow & support features]

http://www.fimarkets.com/pagesen/back-middle-front-office.php

Page 66: Legacy Code: Evolve or Rewrite?

Visualize[primary flow & support features]

http://www.fimarkets.com/pagesen/back-middle-front-office.php

Page 67: Legacy Code: Evolve or Rewrite?

Visualize[primary flow & support features]

http://www.fimarkets.com/pagesen/back-middle-front-office.php

Page 68: Legacy Code: Evolve or Rewrite?

http://staff.bath.ac.uk/enssa/LPDev.htm

Asset Inventory

Page 69: Legacy Code: Evolve or Rewrite?

Asset Capture

http://martinfowler.com/bliki/AssetCapture.html

Engine

Exhaust

Transmission

Page 70: Legacy Code: Evolve or Rewrite?

Asset Capture

Focus on one single asset : the engine

http://martinfowler.com/bliki/AssetCapture.html

Engine

Exhaust

Transmission

Page 71: Legacy Code: Evolve or Rewrite?

Main concepts[in selling-something business]

Trading

Financial Instruments

Page 72: Legacy Code: Evolve or Rewrite?

Main concepts[in selling-something business]

Trading

Financial Instruments

DON’t

TOUCH

REWRITE

Page 73: Legacy Code: Evolve or Rewrite?

DOMAIN FTW!

Page 74: Legacy Code: Evolve or Rewrite?

BOUNDARIES& STRUCTURE

Page 75: Legacy Code: Evolve or Rewrite?

Agree on maxims [communicate the plan]

• “Only one work site at a time: instruments” !

• “When in Rome, do as Romans do”

Page 76: Legacy Code: Evolve or Rewrite?

"The code says it all"

Page 77: Legacy Code: Evolve or Rewrite?

Legacy: Fossilized Domain Expertise

http://newspaper.li/fossil/

•inspiration

•obfuscated

Page 78: Legacy Code: Evolve or Rewrite?

Rewrite:!

because of CHANGES (or it’s a bad idea)

Page 79: Legacy Code: Evolve or Rewrite?

needs

Page 80: Legacy Code: Evolve or Rewrite?

Rewrite:!

must inject NEW knowledge

Page 81: Legacy Code: Evolve or Rewrite?

Rewrite:!

need business ANALYSIS

Page 82: Legacy Code: Evolve or Rewrite?

WHOLETEAM

Page 83: Legacy Code: Evolve or Rewrite?

Like a new project from

scratch!

Page 84: Legacy Code: Evolve or Rewrite?

So how do we

integrate?

Page 85: Legacy Code: Evolve or Rewrite?

STRANGLE

Page 86: Legacy Code: Evolve or Rewrite?

Strangler application

A new module will progressively strangle the

former one, for one single asset

only

http://www.flickr.com/photos/louisfoecy/4114597043http://martinfowler.com/bliki/StranglerApplication.html

Page 87: Legacy Code: Evolve or Rewrite?

Feature Toggles

!

Progressively turn off legacy functionalities & turn on the new ones

NEWOLD

Page 88: Legacy Code: Evolve or Rewrite?

if(c == category1) {legacy.compute(...)} else if(c == category2) {strangler.compute(...)} //...

Page 89: Legacy Code: Evolve or Rewrite?

Grow a Bubble Context

Page 90: Legacy Code: Evolve or Rewrite?

!

Listen to domain experts High hygiene standards

Pair-programming TDD, BDD, DDD

Page 91: Legacy Code: Evolve or Rewrite?

Invest in domain knowledge

• Bi-weekly 30mn training sessions

Page 92: Legacy Code: Evolve or Rewrite?

Dream model must pass every scenario

Bespoke custom DREAM MODEL

Given a floating rate bond on EURIBOR 3M And a nominal of 15M EUR And an issue date of 2011/06/15 And an end date of 2012/06/14 And an SEMI_ANNUAL calculation period !When the EURIBOR 3M evolves:

| 2011/09/15 | 3.5% | | 2012/03/15 | 4.0% | !

Then the cash-flows are: | 2011/12/13 | 23000 | | 2012/06/14 | 25500 |

Page 93: Legacy Code: Evolve or Rewrite?

Anti-corruption layer

Page 94: Legacy Code: Evolve or Rewrite?

Adapter

Page 95: Legacy Code: Evolve or Rewrite?

API

SPI

Page 96: Legacy Code: Evolve or Rewrite?

Easier to integrate by construction

bespoke lib

Page 97: Legacy Code: Evolve or Rewrite?

Old code: Freeze it

Page 98: Legacy Code: Evolve or Rewrite?

Rewrite=

clear boundaries +

new strangler application +

minimal integration

Page 99: Legacy Code: Evolve or Rewrite?

Deliver Value

Quickly

Page 100: Legacy Code: Evolve or Rewrite?
Page 101: Legacy Code: Evolve or Rewrite?

Questions? Did you try similar things too?

Let’s discuss!

@cyriux

Page 102: Legacy Code: Evolve or Rewrite?

Follow me @cyriux !

Slides: slideshare.net/cyriux Blog: cyrille.martraire.com

!

In Paris? Join !

Page 103: Legacy Code: Evolve or Rewrite?

Merci


Recommended