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

Lessons Learned on Managing Technical Debt at P...

Lessons Learned on Managing Technical Debt at Parkmobile

Slides for the talk I gave on Appdevcon at March 15, 2019.

Avatar for Emre Küçükayvaz

Emre Küçükayvaz

March 15, 2019

Other Decks in Programming

Transcript

  1. 1 TECHNICAL DEBT, REVISITED Back to basics. 2 HOW DID

    WE END UP HERE? “Well, how hard can it be?” 3 WHAT WORKED FOR US? Technically and culturally
  2. “If we failed to make our program align with what

    we then understood to be the proper way to think about our financial objects, then we were going to continue to stumble on that disagreement which is like paying interest on a loan.”
  3. - Similar features, different UX - Swift + Objective-C -

    No code sharing, living in 2 separate repos
  4. - Similar features, different UX - Swift + Objective-C -

    No code sharing, living in 2 separate repos + Some modularisation
  5. “How can we build a feature once, and use it

    everywhere?” * with some customization of course.
  6. “How can we build a feature once, and use it

    everywhere?” * with some customization of course. * we need to differentiate design.
  7. “How can we build a feature once, and use it

    everywhere?” * with some customization of course. * we need to differentiate design. * UX should stay the same if you’re refactoring.
  8. “Gradual rewrite in Swift” - Decouple and isolate the old

    thing - Replace it with the new thing - Test the hell out of it - Repeat
  9. Try to solve actual technical problems, do not try to

    adapt architectures or techniques because they’re cool.
  10. Try to solve actual technical problems, do not try to

    adapt architectures or techniques because they’re cool. Architectural Decision Records (ADRs)
  11. 1. Decide early: rewrite or refactor? 2. Make (changing) things

    easier for your team. 3. Using Swift from Objective-C is horrible, don’t waste your time on it. 4. Decouple aggressively, especially your global dependencies. 5. Start from your view controllers and views. 6. Do not rush to introduce new things. 7. Reduce Work-in-Progress (WIP) and aggressively eliminate dependencies for your team.