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!

71b4edb678001f55b47bdde0741a0ff5?s=128

Fábio Carballo

July 03, 2019
Tweet

Transcript

  1. 4.
  2. 15.
  3. 17.

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

    -Embrace evolution -Favour testability -Protects from making mistakes
  4. 20.
  5. 22.

    S1 S1 S2 S3 S1 spaces reactive store Receive 10

    € into Main Account spaces microservice GET /spaces Reactive Space Details View Model
  6. 23.

    spaces reactive store spaces microservice GET /spaces Reactive Receive 10

    € into Main Account Space Details View Model
  7. 24.

    S1 S2 S3 Spaces Dashboard View Model Space Details View

    Model spaces reactive store spaces microservice GET /spaces Reactive Receive 10 € into Main Account
  8. 25.

    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
  9. 34.

    -Which problem is it solving? -What is the impact? -Is

    it actively maintained? Defining your tech stack
  10. 35.

    -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
  11. 38.

    app Camera Lib 1 - Keeping two Camera libs in

    the app Wrapping 3rd parties behind an interface is actually good.
  12. 39.

    app Camera Lib 1 - Keeping two Camera libs in

    the app Wrapping 3rd parties behind an interface is actually good.
  13. 40.

    app Camera Interface Camera Lib 1 - Keeping two Camera

    libs in the app Wrapping 3rd parties behind an interface is actually good.
  14. 41.

    - 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.
  15. 42.

    app Camera Interface Camera Lib 2 Camera Lib 1 Compression

    issues! camera_lib: “camera_lib_2” camera_lib: “camera_lib_2” “camera_lib_1”
  16. 43.

    app Camera Interface Camera Lib 2 Camera Lib 1 Compression

    issues! camera_lib: “camera_lib_2” “camera_lib_1”
  17. 50.

    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
  18. 51.
  19. 52.
  20. 54.

    app

  21. 56.

    app

  22. 69.

    :spaces data :spaces domain :spaces presentation :moneyBeam data :moneyBeam domain

    :moneyBeam presentation :transactions presentation :app :transactions domain :transactions data
  23. 71.

    :transactions data :transactions domain :transactions presentation :app :spaces data :spaces

    domain :spaces presentation :moneyBeam data :moneyBeam domain :moneyBeam presentation
  24. 77.

    Jan 2019 Oct 14 Jan 2016 Jan 2017 Jan 2018

    7m 5m 3m 1.5m Clean Build Times
  25. 78.

    40% of reduction in build times Jan 2019 Oct 14

    Jan 2016 Jan 2017 Jan 2018 7m 5m 3m 1.5m Clean Build Times
  26. 80.
  27. 86.
  28. 89.

    :spaces :credit SpacesComponent SpacesModule Credit Component CreditModule AppComponent NetworkModule ApplicationModule

    UserComponent User Module Session Module :app Where is App/User component??????
  29. 96.
  30. 97.

    Unit Tests Oct 14 Jan 2016 Jan 2017 Jan 2018

    Jan 2019 8000 Unit tests Easy Safe Refactoring Let you sleep
  31. 98.

    Easy Safe Refactoring Let you sleep Unit Tests Oct 14

    Jan 2016 Jan 2017 Jan 2018 Jan 2019 8000 Unit tests
  32. 99.

    Oct 14 Jan 2016 Jan 2017 Jan 2018 Jan 2019

    8000 Unit tests Unit Tests
  33. 100.
  34. 101.
  35. 102.
  36. 103.

    Unit Tests Functional UI Tests 400 UI Tests Oct 14

    Jan 2016 Jan 2017 Jan 2018 Jan 2019 8000 Unit tests
  37. 104.

    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
  38. 108.
  39. 109.

    :spaces ./run-instrumentation spaces :app :spaces :c :b :a ui-pipeline.sh SpacesViewModel

    + spaceName.text = “Space” - spaceName.text = space.name
  40. 114.
  41. 115.

    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
  42. 116.
  43. 118.
  44. 119.
  45. 120.
  46. 121.
  47. 122.
  48. 123.
  49. 124.
  50. 125.
  51. 128.

    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"),
  52. 132.

    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
  53. 133.

    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
  54. 134.

    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
  55. 135.