×
Copy
Open
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
Loving Legacy Code Keith Pitty
Slide 2
Slide 2 text
Loving legacy code?
Slide 3
Slide 3 text
Seriously?
Slide 4
Slide 4 text
Do you love legacy code?
Slide 5
Slide 5 text
Legacy deserves respect!
Slide 6
Slide 6 text
More love!
Slide 7
Slide 7 text
Approach Techniques Attitude
Slide 8
Slide 8 text
What is legacy code?
Slide 9
Slide 9 text
No tests? What is legacy code?
Slide 10
Slide 10 text
Impedes change What is legacy code?
Slide 11
Slide 11 text
Why so negative?
Slide 12
Slide 12 text
Technical debt? Why so negative?
Slide 13
Slide 13 text
Poor design Why so negative?
Slide 14
Slide 14 text
Obfuscation Why so negative?
Slide 15
Slide 15 text
Counterproductive tests Why so negative?
Slide 16
Slide 16 text
No “shiny” tech? Why so negative?
Slide 17
Slide 17 text
Tender loving care
Slide 18
Slide 18 text
OK, maybe beyond TLC
Slide 19
Slide 19 text
Or maybe not …
Slide 20
Slide 20 text
Original developers?
Slide 21
Slide 21 text
Understand why Original developers?
Slide 22
Slide 22 text
Respect Original developers?
Slide 23
Slide 23 text
Learn from mistakes Original developers?
Slide 24
Slide 24 text
Approach Techniques Attitude
Slide 25
Slide 25 text
Pain points
Slide 26
Slide 26 text
Customer feedback Pain points
Slide 27
Slide 27 text
Monitoring tools Pain points
Slide 28
Slide 28 text
Listen to developers Pain points
Slide 29
Slide 29 text
Measure code quality Pain points
Slide 30
Slide 30 text
Nursing legacy code
Slide 31
Slide 31 text
Version control! Nursing legacy code
Slide 32
Slide 32 text
Testing
Slide 33
Slide 33 text
No tests? Nursing legacy code: testing
Slide 34
Slide 34 text
Unit tests Nursing legacy code: testing
Slide 35
Slide 35 text
Fast feedback Nursing legacy code: testing
Slide 36
Slide 36 text
Break dependencies Nursing legacy code: testing
Slide 37
Slide 37 text
Nurture tests Nursing legacy code: testing
Slide 38
Slide 38 text
Remove tests? Nursing legacy code: testing
Slide 39
Slide 39 text
Nurture CI builds Nursing legacy code: testing
Slide 40
Slide 40 text
Refactoring
Slide 41
Slide 41 text
Refactor judiciously Nursing legacy code: refactoring
Slide 42
Slide 42 text
Separate concerns Nursing legacy code: refactoring
Slide 43
Slide 43 text
e.g. Rails models Nursing legacy code: refactoring
Slide 44
Slide 44 text
Nursing legacy code
Slide 45
Slide 45 text
Service classes Nursing legacy code: refactoring
Slide 46
Slide 46 text
“Best” Practices Nursing legacy code: refactoring
Slide 47
Slide 47 text
Simplify design Nursing legacy code: refactoring
Slide 48
Slide 48 text
1. Tests pass 2. Expresses intent 3. No duplication 4. Small Nursing legacy code: refactoring
Slide 49
Slide 49 text
“Remove duplication and improve names in small cycles.” — JB Rainsberger Nursing legacy code: refactoring
Slide 50
Slide 50 text
Less code Nursing legacy code: refactoring
Slide 51
Slide 51 text
Satisfaction Nursing legacy code: refactoring
Slide 52
Slide 52 text
Design Opportunities Nursing legacy code: refactoring
Slide 53
Slide 53 text
Tool support
Slide 54
Slide 54 text
Nursing legacy code: tool support
Slide 55
Slide 55 text
RuboCop Nursing legacy code: tool support
Slide 56
Slide 56 text
Other open source Section
Slide 57
Slide 57 text
Automate workflow Nursing legacy code: tool support
Slide 58
Slide 58 text
Managing legacy code
Slide 59
Slide 59 text
Invest wisely Managing legacy code
Slide 60
Slide 60 text
Maintenance effort Managing legacy code
Slide 61
Slide 61 text
Maintenance budget Managing legacy code
Slide 62
Slide 62 text
If necessary … Managing legacy code
Slide 63
Slide 63 text
migrate away Managing legacy code
Slide 64
Slide 64 text
Approach Techniques Attitude
Slide 65
Slide 65 text
Approach Techniques Attitude
Slide 66
Slide 66 text
Managers
Slide 67
Slide 67 text
Devote resources Managers
Slide 68
Slide 68 text
Listen to developers Managers
Slide 69
Slide 69 text
Respect Managers
Slide 70
Slide 70 text
Share support roles Managers
Slide 71
Slide 71 text
Developers
Slide 72
Slide 72 text
Share knowledge Developers
Slide 73
Slide 73 text
GitHub PRs Developers
Slide 74
Slide 74 text
Future Developers
Slide 75
Slide 75 text
Language Developers
Slide 76
Slide 76 text
Respect past Developers
Slide 77
Slide 77 text
No codebase is perfect Developers
Slide 78
Slide 78 text
Listen to managers Developers
Slide 79
Slide 79 text
Respect Developers
Slide 80
Slide 80 text
Metaphors
Slide 81
Slide 81 text
Nursing Metaphors
Slide 82
Slide 82 text
Gardening Metaphors
Slide 83
Slide 83 text
Renovation Metaphors
Slide 84
Slide 84 text
Conclusion
Slide 85
Slide 85 text
Loving legacy code …
Slide 86
Slide 86 text
can be rewarding
Slide 87
Slide 87 text
Respect
Slide 88
Slide 88 text
Thanks for listening!
Slide 89
Slide 89 text
Keith Pitty @keithpitty