Le projet Legacy, quelles stratégies pour s'en sortir ? — Tech.rocks 2019

Le projet Legacy, quelles stratégies pour s'en sortir ? — Tech.rocks 2019

Beb422437c1dfb5366f197919e41ac50?s=128

Arnaud LEMAIRE

December 04, 2019
Tweet

Transcript

  1. What is Legacy Code ? Definition

  2. A code you want to change that no one understands

    but still provides value. Definition
  3. A code without predictability Definition

  4. A code without predictability Definition Developers have no idea how

    long a change can take 01.
  5. A code without predictability Definition Developers have no idea how

    long a change can take 01. 02. There is no correlation between the business and the technical complexity
  6. A code without predictability Definition 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
  7. A code with no test Definition

  8. A code with no test Definition « 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
  9. Hello, I work in the finance industry at Lgo.group. My

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

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

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

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

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

    code More complexity Increase in software entropy
  15. A natural process Why does it appear? Add lines of

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

    that cannot be stopped
  17. You need to let your software die* * part of

    your software 01. A natural process that cannot be stopped
  18. You need to let your software die* * part of

    your software 01. 02. Without bringing the remaining parts with it A natural process that cannot be stopped
  19. You need to let your software die* * 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
  20. But that can be slowed down A natural process that

    cannot be stopped
  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.
  25. Always leave the campground cleaner than you found it. When

    to refactor This is the « boy scout rule » 01. Developing a new feature and refactoring doesn’t mix well! 02.
  26. 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, first write a test that triggers it, then fix it. Developing a new feature and refactoring doesn’t mix well! 02.
  27. Stop the weekly technical debt repayment session When to refactor

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

    The « We’ll fix it later » syndrome 01.
  29. Stop the weekly technical debt repayment session When to refactor

    The « We’ll fix it later » syndrome 01. 02. The same cause always produces the same effect
  30. Stop the weekly technical debt repayment session When to refactor

    The « We’ll fix 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.
  31. Avoid the big bang refactoring

  32. The mikado™ method How to refactor

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

    fail
  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. Refactoring ? How to tackle it?

  42. Rewrite ? How to tackle it?

  43. Rewrite ? How to tackle it?

  44. Ask your business to help you map your (business) domain

    01. Invoice Generation Invoicing Car rental
  45. Starting from your existing system Don’t start from your existing

    system
  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. Starting with your core business Don’t start by your core

    business Invoice Generation Invoicing Car rental
  49. Starting with your core business Don’t start by your core

    business Invoice Generation Invoicing Car rental !
  50. Starting with your core business Don’t start by your core

    business Invoice Generation Invoicing Car rental !
  51. Don’t do horizontal slicing ! Don’t do horizontal slicing UI

    Persistence Service !
  52. Don’t do horizontal slicing ! UI Persistence Service Don’t do

    horizontal slicing
  53. Rewrite it… 04. Invoice Generation Invoicing New invoice Generation

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

    Invoicing New invoice Generation Legacy API Legacy Database New Api ACL
  55. Invoicing New invoice Generation Legacy DB Event bus

  56. Invoicing New invoice Generation Legacy DB Event bus Hidden dependencies

  57. Invoicing New invoice Generation Legacy DB Event bus

  58. Replace the old legacy system 06. Invoicing Invoice Generation New

    invoice Generation
  59. Replace the old legacy system 06. Invoicing New invoice Generation

  60. Repeat 07. Invoice Generation Invoicing Car rental

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

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

    pattern How to tackle it?
  63. 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.
  64. 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
  65. 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. Optimise your new system for replacement!
  66. • The Mikado method (Ellnestam & Brolund) • Software Design

    X-Rays (Thornhill) • Working Effectively with Legacy Code (Feather) • Refactoring (Fowler) Going further Thanks to Michael C. Feather, Adam Thornhill, Cyrille Martraire, Thomas Pierrain, Martin Fowler, Jean-Baptiste Dusseaut, Ola Ellnestam, Daniel Brolund, Adrian Bolboaca
  67. Thank you! I work in the finance industry at Lgo.group.

    My name is Arnaud LEMAIRE, And my twitter handle is @lilobase