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

Loving Legacy Code

Keith Pitty
February 05, 2015

Loving Legacy Code

Are you approaching the challenge of working with legacy code with helpful techniques and a good attitude?

Accompanying blog post at http://keithpitty.com/blog/archives/2015-02-06-loving-legacy-code

Presented at RubyConf Australia on 5 February, 2015.

Keith Pitty

February 05, 2015
Tweet

More Decks by Keith Pitty

Other Decks in Programming

Transcript

  1. Loving Legacy Code
    Keith Pitty

    View Slide

  2. Loving legacy code?

    View Slide

  3. Seriously?

    View Slide

  4. Do you love legacy code?

    View Slide

  5. Legacy deserves respect!

    View Slide

  6. More love!

    View Slide

  7. Approach
    Techniques
    Attitude

    View Slide

  8. What is legacy code?

    View Slide

  9. No tests?
    What is legacy code?

    View Slide

  10. Impedes change
    What is legacy code?

    View Slide

  11. Why so negative?

    View Slide

  12. Technical debt?
    Why so negative?

    View Slide

  13. Poor design
    Why so negative?

    View Slide

  14. Obfuscation
    Why so negative?

    View Slide

  15. Counterproductive tests
    Why so negative?

    View Slide

  16. No “shiny” tech?
    Why so negative?

    View Slide

  17. Tender loving care

    View Slide

  18. OK, maybe beyond TLC

    View Slide

  19. Or maybe not …

    View Slide

  20. Original developers?

    View Slide

  21. Understand why
    Original developers?

    View Slide

  22. Respect
    Original developers?

    View Slide

  23. Learn from mistakes
    Original developers?

    View Slide

  24. Approach
    Techniques
    Attitude

    View Slide

  25. Pain points

    View Slide

  26. Customer feedback
    Pain points

    View Slide

  27. Monitoring tools
    Pain points

    View Slide

  28. Listen to developers
    Pain points

    View Slide

  29. Measure code quality
    Pain points

    View Slide

  30. Nursing legacy code

    View Slide

  31. Version control!
    Nursing legacy code

    View Slide

  32. Testing

    View Slide

  33. No tests?
    Nursing legacy code: testing

    View Slide

  34. Unit tests
    Nursing legacy code: testing

    View Slide

  35. Fast feedback
    Nursing legacy code: testing

    View Slide

  36. Break dependencies
    Nursing legacy code: testing

    View Slide

  37. Nurture tests
    Nursing legacy code: testing

    View Slide

  38. Remove tests?
    Nursing legacy code: testing

    View Slide

  39. Nurture CI builds
    Nursing legacy code: testing

    View Slide

  40. Refactoring

    View Slide

  41. Refactor judiciously
    Nursing legacy code: refactoring

    View Slide

  42. Separate concerns
    Nursing legacy code: refactoring

    View Slide

  43. e.g. Rails models
    Nursing legacy code: refactoring

    View Slide

  44. Nursing legacy code

    View Slide

  45. Service classes
    Nursing legacy code: refactoring

    View Slide

  46. “Best” Practices
    Nursing legacy code: refactoring

    View Slide

  47. Simplify design
    Nursing legacy code: refactoring

    View Slide

  48. 1. Tests pass
    2. Expresses intent
    3. No duplication
    4. Small
    Nursing legacy code: refactoring

    View Slide

  49. “Remove duplication and
    improve names in small cycles.”
    — JB Rainsberger
    Nursing legacy code: refactoring

    View Slide

  50. Less code
    Nursing legacy code: refactoring

    View Slide

  51. Satisfaction
    Nursing legacy code: refactoring

    View Slide

  52. Design Opportunities
    Nursing legacy code: refactoring

    View Slide

  53. Tool support

    View Slide

  54. Nursing legacy code: tool support

    View Slide

  55. RuboCop
    Nursing legacy code: tool support

    View Slide

  56. Other open source
    Section

    View Slide

  57. Automate workflow
    Nursing legacy code: tool support

    View Slide

  58. Managing legacy code

    View Slide

  59. Invest wisely
    Managing legacy code

    View Slide

  60. Maintenance effort
    Managing legacy code

    View Slide

  61. Maintenance budget
    Managing legacy code

    View Slide

  62. If necessary …
    Managing legacy code

    View Slide

  63. migrate away
    Managing legacy code

    View Slide

  64. Approach
    Techniques
    Attitude

    View Slide

  65. Approach
    Techniques
    Attitude

    View Slide

  66. Managers

    View Slide

  67. Devote resources
    Managers

    View Slide

  68. Listen to developers
    Managers

    View Slide

  69. Respect
    Managers

    View Slide

  70. Share support roles
    Managers

    View Slide

  71. Developers

    View Slide

  72. Share knowledge
    Developers

    View Slide

  73. GitHub PRs
    Developers

    View Slide

  74. Future
    Developers

    View Slide

  75. Language
    Developers

    View Slide

  76. Respect past
    Developers

    View Slide

  77. No codebase is perfect
    Developers

    View Slide

  78. Listen to managers
    Developers

    View Slide

  79. Respect
    Developers

    View Slide

  80. Metaphors

    View Slide

  81. Nursing
    Metaphors

    View Slide

  82. Gardening
    Metaphors

    View Slide

  83. Renovation
    Metaphors

    View Slide

  84. Conclusion

    View Slide

  85. Loving legacy code …

    View Slide

  86. can be rewarding

    View Slide

  87. Respect

    View Slide

  88. Thanks for listening!

    View Slide

  89. Keith Pitty
    @keithpitty

    View Slide