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

Tackling Android at Scale

Tackling Android at Scale

In this talk I presented our journey at N26 during from early 2018 until mid 2019, where we went from 5 to 27 developers and how we achieved technical readiness that supported that growth!

Fábio Carballo

July 03, 2019
Tweet

More Decks by Fábio Carballo

Other Decks in Technology

Transcript

  1. What to consider defining your architecture? -Reduce number of discussions

    -Embrace evolution -Favour testability -Protects from making mistakes
  2. S1 S1 S2 S3 S1 spaces reactive store Receive 10

    € into Main Account spaces microservice GET /spaces Reactive Space Details View Model
  3. spaces reactive store spaces microservice GET /spaces Reactive Receive 10

    € into Main Account Space Details View Model
  4. S1 S2 S3 Spaces Dashboard View Model Space Details View

    Model spaces reactive store spaces microservice GET /spaces Reactive Receive 10 € into Main Account
  5. S1 S2 S3 S2 S3 S1 S2 S3 S1 S2

    S3 Space Details View Model spaces reactive store spaces microservice GET /spaces Reactive Receive 10 € into Main Account Spaces Dashboard View Model
  6. -Which problem is it solving? -What is the impact? -Is

    it actively maintained? Defining your tech stack
  7. -Which problem is it solving? -What is the impact? -Is

    it actively maintained? 2.0.1 2.0.2 2.1.0 2.2.0 2.3.0 2.4.0 2.5.0 Retrofit Version along 2.5 years Defining your tech stack
  8. app Camera Lib 1 - Keeping two Camera libs in

    the app Wrapping 3rd parties behind an interface is actually good.
  9. app Camera Lib 1 - Keeping two Camera libs in

    the app Wrapping 3rd parties behind an interface is actually good.
  10. app Camera Interface Camera Lib 1 - Keeping two Camera

    libs in the app Wrapping 3rd parties behind an interface is actually good.
  11. - Keeping two Camera libs in the app app Camera

    Interface Camera Lib 2 Camera Lib 1 Wrapping 3rd parties behind an interface is actually good.
  12. app Camera Interface Camera Lib 2 Camera Lib 1 Compression

    issues! camera_lib: “camera_lib_2” camera_lib: “camera_lib_2” “camera_lib_1”
  13. app Camera Interface Camera Lib 2 Camera Lib 1 Compression

    issues! camera_lib: “camera_lib_2” “camera_lib_1”
  14. android-machete git:(DES-156-discreet) android-machete git:(develop) git add . git checkout -b

    DES-156-discreet Switched to a new branch `DES-156-discreet` android-machete git:(DES-156-discreet) git commit -m “add discreet section to glossary” | JIRA ticket 'DES-156' prepended to commit message [DES-156-discreet 6219e9cbd4] DES-156 add discreet section to glossary
  15. app

  16. app

  17. :spaces data :spaces domain :spaces presentation :moneyBeam data :moneyBeam domain

    :moneyBeam presentation :transactions presentation :app :transactions domain :transactions data
  18. :transactions data :transactions domain :transactions presentation :app :spaces data :spaces

    domain :spaces presentation :moneyBeam data :moneyBeam domain :moneyBeam presentation
  19. Jan 2019 Oct 14 Jan 2016 Jan 2017 Jan 2018

    7m 5m 3m 1.5m Clean Build Times
  20. 40% of reduction in build times Jan 2019 Oct 14

    Jan 2016 Jan 2017 Jan 2018 7m 5m 3m 1.5m Clean Build Times
  21. :spaces :credit SpacesComponent SpacesModule Credit Component CreditModule AppComponent NetworkModule ApplicationModule

    UserComponent User Module Session Module :app Where is App/User component??????
  22. Unit Tests Oct 14 Jan 2016 Jan 2017 Jan 2018

    Jan 2019 8000 Unit tests Easy Safe Refactoring Let you sleep
  23. Easy Safe Refactoring Let you sleep Unit Tests Oct 14

    Jan 2016 Jan 2017 Jan 2018 Jan 2019 8000 Unit tests
  24. Oct 14 Jan 2016 Jan 2017 Jan 2018 Jan 2019

    8000 Unit tests Unit Tests
  25. Unit Tests Functional UI Tests 400 UI Tests Oct 14

    Jan 2016 Jan 2017 Jan 2018 Jan 2019 8000 Unit tests
  26. Automated Regression 10% 50% Functional UI Tests 400 UI Tests

    Unit Tests Oct 14 Jan 2016 Jan 2017 Jan 2018 Jan 2019 8000 Unit tests
  27. :spaces ./run-instrumentation spaces :app :spaces :c :b :a ui-pipeline.sh SpacesViewModel

    + spaceName.text = “Space” - spaceName.text = space.name
  28. That one “divider grey” Yeah it should be the grey

    we used in that other screen :) Is this the right grey for the divider? I thought it was this one? Hmm, I was using this to be honest
  29. TransactionContainer( "From Main Account", " to Home", Money(BigDecimal(5), Euro)), TransactionContainer(

    "From Main Account", "Last one ... ", Money(BigDecimal(4.50), Euro)), TransactionContainer( "From Main Account", "Just one more ", Money(BigDecimal(5), Euro)), TransactionContainer( "From Main Account", "Money for drinks!", Money(BigDecimal(5), Euro)))) SectionHeader("Transactions"), listOf( SubSectionHeader(“Today"),
  30. Discreet Mode In a company of 1000+ people, 2 persons

    were able to develop and drive the launch of this feature QA Design Marketing Product Bank Security
  31. QA Design Marketing Product Bank Security Discreet Mode In a

    company of 1000+ people, 2 persons were able to develop and drive the launch of this feature
  32. Discreet Mode In a company of 1000+ people, 2 persons

    were able to develop and drive the launch of this feature QA Design Marketing Product Bank Security