$30 off During Our Annual Pro Sale. View Details »

How to rewrite, a bit at a time - Pipeline Conference 2018

How to rewrite, a bit at a time - Pipeline Conference 2018

There’s nothing more frustrating than not being able to deliver new features because of unnecessarily complicated code. A fast deployment pipeline is of no use if the code itself is too hard and slow to change.

You may decide it’s time to throw it all away and start over… and what began full of optimism, drags on for months and years, adding even more complexity and various levels of legacy.

It doesn’t have to be this way! In this presentation, you’ll hear a first-hand experience of how to approach technical debt in an iterative way. This talk will teach you lessons on how to start, and most importantly, finish a big rewrite project.

You will learn how to approach the conversation with the “business”, avoid the most common pitfalls when changing the architecture of a complex codebase, and ensure the rewrite brings value from the start till the very happy end.

Sabrina Leandro

March 20, 2018
Tweet

More Decks by Sabrina Leandro

Other Decks in Technology

Transcript

  1. How to rewrite,
    a bit at a time
    Sabrina Leandro
    @saleandro
    Pipeline Conference 2018

    View Slide

  2. Rewrites at Songkick

    View Slide

  3. Rewrites at Songkick
    1. Songkick.com
    2. Tickets store
    3. Internal tools

    View Slide

  4. BIG REWRITE STRIKES AGAIN

    View Slide

  5. • The problem
    • How to start a rewrite project
    • How to run it
    • How to finish it
    • How to not need it again!
    This talk

    View Slide

  6. Stop me if you think you’ve heard this one before
    The problem

    View Slide

  7. 10101
    11001

    View Slide

  8. 10101
    11001
    1010111001101
    0111001100111
    0011100111001
    1001110011100
    1110001010111
    0011100111001

    View Slide

  9. Software Entropy
    10101
    11001
    1010111001101
    0111001100111
    0011100111001
    1001110011100
    1110001010111
    0011100111001

    View Slide

  10. Complex abstractions
    Lots of features
    Too many slow tests
    Little to no tests
    No clear abstractions
    Lots of features

    View Slide

  11. Complex abstractions
    Lots of features
    Too many slow tests
    Little to no tests
    No clear abstractions
    Lots of features
    Tickets store &
    Internal tools

    View Slide

  12. Complex abstractions
    Lots of features
    Too many slow tests
    Little to no tests
    No clear abstractions
    Lots of features
    Songkick.com
    Tickets store &
    Internal tools

    View Slide

  13. View Slide

  14. How to start it

    View Slide

  15. •Is it the right time?
    •Is it the right reason?

    View Slide

  16. Is it the right time?
    Discovery vs Delivery

    View Slide

  17. Is it the right time?
    Yes, if the product has a
    clear business value today.

    View Slide

  18. Is it the right reason?
    What difference does
    it make?

    View Slide

  19. Is it the right reason?
    Yes, if there’s one clear
    business case.

    View Slide

  20. PLEASE
    PLEASE
    PLEASE
    Let me get what I want

    View Slide

  21. How to sell it
    Have one clear
    business case

    View Slide

  22. How to sell it
    Show what a great
    new world it will be!

    View Slide

  23. How to sell it
    Find allies outside of
    your team

    View Slide

  24. Make
    the
    pain
    visible
    How to sell it

    View Slide

  25. How to sell it
    Do Repeat Yourself

    View Slide

  26. How to sell it
    Do Repeat Yourself
    Do Repeat Yourself

    View Slide

  27. How to run it

    View Slide

  28. Technical vision and strategy
    Now The future!

    View Slide

  29. Technical vision and strategy
    Now The future!
    Steps to get there
    ???

    View Slide

  30. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application

    View Slide

  31. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application

    View Slide

  32. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    Legacy
    application

    View Slide

  33. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    Legacy
    application

    View Slide

  34. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    Legacy
    application
    Legacy
    application

    View Slide

  35. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    Legacy
    application
    Legacy
    application
    New
    application

    View Slide

  36. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    New
    application
    Legacy
    application
    Legacy
    application
    New
    application

    View Slide

  37. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    New
    application
    Legacy
    application
    Legacy
    application
    RIP
    Legacy
    application
    New
    application

    View Slide

  38. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    New
    application
    VALUE
    Legacy
    application
    Legacy
    application
    RIP
    Legacy
    application
    New
    application

    View Slide

  39. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    Legacy
    application
    Legacy
    application
    New
    application

    View Slide

  40. Now Bright future!
    Team 2: Building new application
    Rewrite from scratch
    Legacy
    application
    Team 1: Maintaining legacy application
    New
    Legacy
    application
    Legacy
    application
    New
    application
    Legacy
    application

    View Slide

  41. “Rewrite from scratch:
    Waterfall process of
    rewrites

    View Slide

  42. The strangler
    application

    View Slide

  43. Team 1: Maintaining legacy and building new application
    Now Bright future!
    Rewrite using strangler

    View Slide

  44. Team 1: Maintaining legacy and building new application
    Now Bright future!
    Rewrite using strangler

    View Slide

  45. Team 1: Maintaining legacy and building new application
    Now Bright future!
    Rewrite using strangler

    View Slide

  46. Team 1: Maintaining legacy and building new application
    Now Bright future!
    Rewrite using strangler

    View Slide

  47. Team 1: Maintaining legacy and building new application
    Now Bright future!
    Rewrite using strangler

    View Slide

  48. Team 1: Maintaining legacy and building new application
    Now Bright future!
    Rewrite using strangler

    View Slide

  49. Team 1: Maintaining legacy and building new application
    New
    applicati
    Now Bright future!
    Rewrite using strangler

    View Slide

  50. Team 1: Maintaining legacy and building new application
    New
    applicati
    Now Bright future!
    Rewrite using strangler

    View Slide

  51. Team 1: Maintaining legacy and building new application
    New
    applicati
    Now Bright future!
    Rewrite using strangler

    View Slide

  52. Team 1: Maintaining legacy and building new application
    New
    applicati
    Now Bright future!
    Rewrite using strangler

    View Slide

  53. Team 1: Maintaining legacy and building new application
    New
    applicati
    VALUE!
    Now Bright future!
    Rewrite using strangler

    View Slide

  54. /orders
    /customers

    View Slide

  55. /orders
    /customers
    new/customers

    View Slide

  56. /orders /customers

    View Slide

  57. /orders /customers
    Build
    Validate
    Replace
    Delete
    Repeat

    View Slide

  58. “ Deleting is faster
    than rewriting

    View Slide

  59. Bones
    Muscle
    Fat
    Cut features
    to move
    faster

    View Slide

  60. “ If we were starting over,
    what would we build today,
    knowing what we know
    now?

    View Slide

  61. During the project

    View Slide

  62. How to run it
    Do one thing at a time

    View Slide

  63. 1.Find the biggest blocker
    2.Remove it completely
    3.Repeat
    How to run it
    Warning: Step 2 might involve more than coding

    View Slide

  64. How to run it
    Celebrate your
    successes!

    View Slide

  65. View Slide

  66. View Slide

  67. View Slide

  68. View Slide

  69. That joke isn’t funny anymore…
    How to run it
    Do Repeat Yourself,
    again

    View Slide

  70. How to finish it

    View Slide

  71. How to finish it
    I started something I couldn’t finish

    View Slide

  72. How to finish it
    These things 

    take time

    View Slide

  73. How to not need it again

    View Slide

  74. 10101
    11001
    1010111001101
    0111001100111
    0011100111001
    1001110011100
    1110001010111
    Time…
    Software Entropy

    View Slide

  75. How to not need it again
    Make the cost visible

    View Slide

  76. View Slide

  77. DELETE

    View Slide

  78. DELETE
    CODE

    View Slide

  79. DELETE
    CODE
    FEATURES

    View Slide

  80. DELETE
    CODE
    FEATURES
    PRODUCTS

    View Slide

  81. “ If we were starting over,
    what would we build today,
    knowing what we know
    now?

    View Slide

  82. Make it part of your
    day-to-day
    How to not need it again

    View Slide

  83. “ A refactor a day
    keeps the rewrite
    away!

    View Slide

  84. How to not need it again
    A little bit and often

    View Slide

  85. How to not need it again
    Get used to
    inconsistencies

    View Slide

  86. Technical migrations
    Continuously deliver
    value
    Delete what’s not
    valuable
    One business
    goal

    View Slide

  87. Sustainable Software
    Make maintenance
    cost visible
    Learn and
    collaborate
    Refactor a little
    bit and often

    View Slide

  88. Thanks!
    Sabrina, take a bow…
    [email protected]
    @saleandro

    View Slide

  89. Bigmouth Strikes Again
    This Charming Man
    Stop Me If You Think You’ve Heard This One Before
    What Difference Does It Make?
    Please, Please, Please, Let Me Get What I Want
    That Joke Isn’t Funny Anymore
    I Started Something I Couldn’t Finish
    These Things Take Time
    Sheila Take A Bow
    Thanks!
    Sabrina, take a bow…
    [email protected]
    @saleandro

    View Slide

  90. Songkick.com rewrite
    • https://devblog.songkick.com/the-path-to-soa-d986a18d4a8b
    • https://devblog.songkick.com/our-object-based-rails-frontend-3e2ddc048d12
    • https://www.youtube.com/watch?v=-VEf8j6aGMk
    • https://www.martinfowler.com/bliki/StranglerApplication.html
    Celebrate your successes
    • https://medium.com/@Songkick/gamify-your-product-team-to-power-
    level-9000-261e9fceaa22
    Hoarders metaphor / Liveable code
    • https://twitter.com/sarahmei/status/783115752794492928
    • https://www.youtube.com/watch?v=mz3l_oEA2cU
    • https://twitter.com/kentbeck/status/856537528886673408
    Product discovery and product delivery
    • http://jpattonassociates.com/dual-track-development/
    • https://martinfowler.com/bliki/DesignStaminaHypothesis.html
    • https://www.facebook.com/notes/kent-beck/teams-in-3x/1244519748914220/
    References

    View Slide

  91. References
    Make the cost visible
    • http://codemanship.co.uk/parlezuml/blog/?postid=1433
    • http://blogs.msdn.com/b/elee/archive/2009/03/11/source-code-is-a-liability-not-an-
    asset.aspx
    Make it part of your day-to-day
    • https://martinfowler.com/bliki/OpportunisticRefactoring.html
    • http://ronjeffries.com/xprog/articles/refactoring-not-on-the-backlog/
    • http://firstround.com/review/forget-technical-debt-heres-how-to-build-technical-
    wealth/
    • https://www.infoq.com/presentations/microservices-replaceability-consistency
    • https://www.sandimetz.com/blog/2017/6/1/the-half-life-of-code
    • https://www.infoq.com/presentations/remove-unneeded-code
    Playlist :)
    • https://open.spotify.com/user/saleandro/playlist/6i3RVHtys4djlYlLLGZc26

    View Slide