Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Le projet legacy, quelles stratégies pour s'en sortir ? – Software Crafts·wo·manship Rennes juin 2021

Le projet legacy, quelles stratégies pour s'en sortir ? – Software Crafts·wo·manship Rennes juin 2021

Beb422437c1dfb5366f197919e41ac50?s=128

Arnaud LEMAIRE
PRO

June 17, 2021
Tweet

Transcript

  1. None
  2. What is Legacy Code ? De fi nition

  3. A code you want to change, that no one understands

    but still provides value. De fi nition
  4. A code without predictability De fi nition

  5. A code without predictability De fi nition Developers have no

    idea how long a change can take 01. 02. There is no correlation between the business and the technical complexity 03. You don’t know when something will break
  6. A code with no test De fi nition

  7. A code with no test De fi nition « Most

    of the fear involved in making changes to large code bases is fear of introducing subtle bugs; fear of changing things inadvertently. Without test, you just don’t know whether things are getting better or worse. » — Michael Feathers
  8. An inverse problem De fi nition

  9. An inverse problem De fi nition Observations Causes Forward problem

    Inverse problem
  10. An inverse problem De fi nition

  11. Hello, I work in the fi nance industry at Sunday.app.

    My name is Arnaud LEMAIRE, And my twitter handle is @lilobase Who am I?
  12. This talk is focused on strategic considerations and not tactical

    ones Disclaimer
  13. A natural process Why does it appear?

  14. A natural process Why does it appear? Add lines of

    code More complexity Increase in software entropy Legacy Code
  15. You need to let your software die* A natural process

    that cannot be stopped
  16. You need to let your software die* * a part

    of your software 01. 02. Without bringing the remaining parts with it 03. Optimize your software for replacement A natural process that cannot be stopped
  17. That can be speeded up or slowed down Why does

    it appear?
  18. That can be speeded up or slowed down Why does

    it appear? Refactoring helps to keep complexity under control 01. 02. A good software design is critical in the long term 03. Technical debt ≠ legacy software, but it can accelerate the process
  19. What do we do now ?

  20. You need to have empathy, and take the time to

    understand the project's history What do we do now ?
  21. Strategies at the code level Legacy Code

  22. Would you rather go to the dentist twice a year

    or brush your teeth every day? When to refactor
  23. When to refactor Always leave the campground cleaner than you

    found it.
  24. Always leave the campground cleaner than you found it. When

    to refactor This is the « boy scout rule » 01. 03. When you found a bug, fi rst write a test that triggers it, then fi x it. 04. Beware of the broken windows syndrome Developing a new feature and refactoring doesn’t mix well! 02.
  25. Culture emerge from practices, not the other way around. When

    to refactor
  26. Stop the weekly technical debt repayment session When to refactor

  27. Stop the weekly technical debt repayment session When to refactor

    The « We’ll fi x it later » syndrome 01. 02. The same cause always produces the same effect Instead provide a learning time, so you stop writing legacy code 03.
  28. Avoid the big bang refactoring

  29. The mikado™ method How to refactor

  30. The mikado™ method How to refactor Undo when an experiment

    fail
  31. The golden master Testing How to refactor

  32. The golden master Testing « In nearly every legacy system,

    what the system does is more important that what it’s supposed to do. » — Michael Feathers How to refactor
  33. The golden master Testing « A Gold Master test is

    a regression test for complex, untested systems that asserts a consistent macro-level behavior. » — Jake Worth How to refactor
  34. The Hotspot™ method How to refactor

  35. The Hotspot™ method How to refactor

  36. The Hotspot™ method How to refactor

  37. The Hotspot™ method How to refactor

  38. Strategies at the system level Legacy system

  39. Refactoring ? How to tackle it?

  40. Refactoring ? How to tackle it?

  41. Rewrite ? How to tackle it?

  42. Rewrite ? How to tackle it?

  43. The Ship of Theseus strategy How to tackle it?

  44. The Ship of Theseus strategy How to tackle it?

  45. Ask your business to help you mapping your (business) domain

    01. Invoice Generation Invoicing Car rental
  46. Ask them to tag where there is room for improvement.

    02. Invoice Generation Invoicing Car rental
  47. Select a tagged support service with few dependencies 03. Invoice

    Generation Invoicing
  48. Rewrite it… 04. Invoice Generation Invoicing New invoice Generation

  49. And put an anti-corruption layer to prevent legacy leakage 05.

    Invoicing New invoice Generation Legacy API Legacy Database New Api ACL
  50. The Anti-Corruption Layer Anti-Corrupution Layer The Green fi eld code

    must not call directly the Legacy code 01. 02. The Legacy code must not call directly the Green fi eld code 03. Even through the persistence system: database or event/message bus
  51. Invoicing New invoice Generation Legacy DB Event bus Hidden dependencies

  52. Invoicing New invoice Generation Legacy DB Event bus

  53. Our system Vendor API ACL An anti-corruption layer can also

    protect us from the outside world
  54. Replace the old legacy system 06. Invoicing Invoice Generation New

    invoice Generation
  55. Repeat 07. Invoice Generation Invoicing Car rental

  56. Until you can reach the core 08. Invoice Generation Invoicing

    Car rental
  57. The Ship of Theseus strategy also known as the Strangler

    pattern How to tackle it?
  58. The Ship of Theseus strategy also known as the Strangler

    pattern How to tackle it? You’ll need to coordinate your actions at the system level 01. 02. Beware of functional debt 03. Optimize your new system for replacement!
  59. What you shouldn’t do Some mistakes to avoid

  60. Starting from your existing system Mistakes to avoid

  61. Starting from your existing system Mistakes to avoid

  62. Starting by your core business Mistakes to avoid

  63. Starting by your core business Mistakes to avoid Invoice Generation

    Invoicing Car rental !
  64. Starting by your core business Mistakes to avoid Too many

    legacy dependencies 01. 02. The developers will need some training…
  65. Don’t do horizontal slicing ! Mistakes to avoid

  66. Don’t do horizontal slicing ! Mistakes to avoid UI Persistence

    Service !
  67. Don’t do horizontal slicing ! Mistakes to avoid UI Persistence

    Service
  68. • The Mikado method • Software Design X-Rays • Working

    E ff ectively with Legacy Code • Refactoring Going further Thanks to Michael C. Feather, Adam Thornhill, Cyrille Martraire, Thomas Pierrain, Martin Fowler, Jean-Baptiste Dusseaut, Ola Ellnestam, Daniel Brolund, Adrian Bolboaca
  69. Thank you! I work in the fi nance industry at

    Sunday.app. My name is Arnaud LEMAIRE, And my twitter handle is @lilobase
  70. Feedbacks ? https://roti.express/r/febhha