2017 • Never looked back • Lessons learned: ◦ We quickly needed a standard for Kotling coding style ◦ Built-in nullability is a blessing, but beware of java interop • Code distribution as of September 2018:
use cases ◦ Cancel background tasks • Lessons learned ◦ Importance of educating the team on operators and general philosophy ◦ Enforce disposing of subscriptions, Kotlin extensions ◦ RxPlugins: Global error handler, JUnit rule for easy unit testing • Today: ◦ Most API calls return Observables ◦ Heavy usage of Subjects
through deeply nested layers of objects is cumbersome ◦ No compile time validation, No object scoping ◦ Reduce usage of global singletons • Lessons learned: ◦ Even harder sell than RxJava: steep learning curve, no immediate benefit ◦ AndroidInjection helps reducing some initial boilerplate ◦ Benefits start showing only after a good portion of the code base is migrated • Today: ◦ ~90% of our Presenters are constructor injected ◦ Ongoing work to get rid of global Singletons
move from REST to GQL ◦ Less dependencies on the backend, more flexibility ◦ Partial object caching • Lessons learned: ◦ Relying on a pre-alpha GQL library is scary ◦ Schema based, awkward versioning ◦ Beware of your fragments usage • Today: ◦ ~80% of our API calls go through GQL
QA for regression testing ◦ Reduce our release cadence to 2 weeks ◦ Improve confidence for big code changes • Lessons learned: ◦ Having a easy DSL and base framework helped a lot ◦ Team-wide “UI testing day” to improve coverage ◦ UI tests flakiness is a real pain • Today: ◦ ~70 unique tests, covers the main user flows ◦ Runs nightly, and on every alpha/beta push to google play
strong 1+ year later • But can still be improved: ◦ Loosen coupling between Presentation and View layers ◦ Leverage ViewModel and LifecycleOwner from architecture components ◦ Automatic cleanup, easy way to persist Presenters Helium: Reactive MVP Framework. 100% Kotlin https://github.com/joaquim-verges/helium
metrics for every new screen • Daily/Weekly reports on latency changes • Frame rate monitoring tools and reports • Video performance monitoring tools and reports