Save 37% off PRO during our Black Friday Sale! »

Refactoring to Kotlin - Kotlin/Everywhere

Refactoring to Kotlin - Kotlin/Everywhere

Wajahat Karim delivers a talk about refactoring to Kotlin at Kotlin/Everywhere event organized by Android Pakistan Community (

Full video of the talk is available at:


Wajahat Karim

December 28, 2019


  1. Refactoring to Kotlin Wajahat Karim Moving Big Old Java Codebase

    to New Awesome Kotlin WajahatKarim
  2. I am Wajahat Karim And I work at Contour Software.

    Hey There! Coding 8+ Years Experienced Android Developer Writing Authored 2 Worldwide Published Books Passion Open Source Contributor (many Android libraries) Community AndroidPub, FlutterPub, Articles, and Talks
  3. This is a story of...

  4. Messy Code Deprecated Libraries Frustrated Developers Not-so-happy Clients And Project

  5. An Uber-like app for businesses (B2B) 73+ screens and counting

    6+ different apps for each customer with own colors, server, features 400+ classes (including Activity, Views, Models, POJOs) Existing codebase to work upon - Code modification takes double time. Project X
  6. What We Expected Modern APIs & Frameworks Some good architecture

    like MVP, MVVM etc. Well organized & commented code Unit & Instrumentation Tests
  7. What We Got Modern APIs & Frameworks - 2010 codebase

    never upgraded in years Some good architecture like MVP, MVVM etc. - Everything is in one BIG class. Well organized & commented code - Who has time for it? Unit & Instrumentation Tests - Sorry? What’s that? Never heard of it before.
  8. Old Code Architecture

  9. Let’s convert it Kotlin... CTRL + SHIFT + K

  10. None
  11. New Code Architecture

  12. Refactor vs Rewrite No disturbance in existing features New features

    & bug fixes Tight deadlines & less time Too big risk to handle Refactoring
  13. What We Did 1. Move all network code to Network

    Repository 2. Move all local persistence code to Local Repository 3. Move everything except UI, Navigation, & Business Logic to Common / Utils 4. Create separate Activity/Fragment from big multiple-screen classes 5. Integrate Kotlin & MVVM Core classes 6. Move Business Logic to ViewModel
  14. 1. Unit & Instrumentation Testing 2. CI/CD Automation 3. Integrate

    Room database 4. Integrate Retrofit + Coroutines What’s Next
  15. Show’em the code!

  16. Kotlin Extensions = ❤

  17. Domain Specific Language (DSL) Java Kotlin with DSL Builder

  18. @JVMStatic Kotlin Without @JVMStatic in Java With @JVMStatic in Java

  19. @WajahatKarim Any Questions?