How to rewrite, a bit at a time

How to rewrite, a bit at a time

Domain-Driven Design Europe 2019

4d1993f91aa4f2efccf08051205e3bad?s=128

Sabrina Leandro

February 01, 2019
Tweet

Transcript

  1. How to rewrite, a bit at a time Sabrina Leandro

    @saleandro Domain-Driven Design Europe 2019
  2. Rewrites at Songkick

  3. Rewrites at Songkick 1. Songkick.com

  4. Rewrites at Songkick 1. Songkick.com 2. Tickets store

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

    tools
  6. BIG REWRITE STRIKES AGAIN

  7. BIG REWRITE STRIKES AGAIN

  8. • The problem • How to start a rewrite project

    • How to run it • How to finish it • How to not need it again! This talk
  9. Stop me if you think you’ve heard this one before

    The problem
  10. 10101 11001

  11. 10101 11001 10101110011010 11100110011100 11100111001100 11100111001110 00101011100111 00111001

  12. Software Entropy 10101 11001 10101110011010 11100110011100 11100111001100 11100111001110 00101011100111 00111001

  13. Complex abstractions Lots of features Too many slow tests Little

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

    to no tests No clear abstractions Lots of features Tickets store & Internal tools
  15. 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
  16. None
  17. How to start it

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

  19. Is it the right time? Discovery vs Delivery

  20. Is it the right time? Yes, if the product has

    a clear business value today.
  21. Is it the right reason? What difference does it make?

  22. Is it the right reason? Yes, if there’s one clear

    business case.
  23. PLEASE PLEASE PLEASE Let me get what I want

  24. How to sell it Have one clear business case

  25. How to sell it Show what a great new world

    it will be!
  26. How to sell it Find allies outside of your team

  27. Make the pain visible How to sell it

  28. How to sell it Do Repeat Yourself

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

  30. How to run it

  31. Technical vision and strategy Now The future! ???

  32. Technical vision and strategy Now The future!

  33. Technical vision and strategy Now The future! Steps to get

    there ???
  34. Now Bright future! Team 2: Building new application Rewrite from

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

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

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

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

    scratch Legacy application Team 1: Maintaining legacy application New Legacy application Legacy application
  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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. “Rewrite from scratch: Waterfall process of rewrites

  46. The strangler application

  47. Team 1: Maintaining legacy and building new application Now Bright

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

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

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

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

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

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

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

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

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

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

    VALUE! Now Bright future! Rewrite using strangler
  58. /orders /customers

  59. /orders /customers new/customers

  60. /orders /customers

  61. /orders /customers Build Validate Replace Delete Repeat

  62. None
  63. “ Deleting is faster than rewriting

  64. Cut features to move faster Must haves Should haves Won’t

    haves
  65. Must haves: main proposition Should haves: if there’s time Won’t

    haves: remove completely Cut features to move faster
  66. “ If we were starting over, what would we build

    today, knowing what we know now?
  67. During the project

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

  69. 1. Find the biggest blocker 2. Remove it completely 3.

    Repeat How to run it Warning: Step 2 might involve more than coding
  70. How to run it Celebrate your successes!

  71. None
  72. None
  73. None
  74. None
  75. That joke isn’t funny anymore… How to run it Do

    Repeat Yourself, again
  76. How to finish it

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

  78. How to finish it These things 
 take time

  79. How to not need it again

  80. 10101 11001 10101110011010 11100110011100 11100111001100 11100111001110 001010111 Time… Software Entropy

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

  82. None
  83. DELETE

  84. DELETE CODE

  85. DELETE CODE FEATURES

  86. DELETE CODE FEATURES PRODUCTS

  87. “ If we were starting over, what would we build

    today, knowing what we know now?
  88. Make it part of your day-to-day How to not need

    it again
  89. “ A refactor a day keeps the rewrite away!

  90. How to not need it again A little bit and

    often
  91. How to not need it again Get used to inconsistencies

  92. Technical migrations Continuously deliver value Delete what’s not valuable One

    business goal
  93. Sustainable Software Make maintenance cost visible Learn and collaborate Refactor

    a little bit and often
  94. Thanks! Sabrina, take a bow… sabrina@saleandro.com @saleandro

  95. 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… sabrina@saleandro.com @saleandro
  96. 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://brightonruby.com/2017/livable-code-sarah-mei/ • 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
  97. 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