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

Beyond Hyper-growth: Tackling scalability chall...

Beyond Hyper-growth: Tackling scalability challenges on Android

In just over a year, our Android team exploded from 4 people to 34!
In this talk we will go through the challenges faced by Android engineers when dealing with fast growing teams. Most importantly, we are going to showcase scalable and sustainable solutions.
We'll tackle questions like: What were our biggest technical challenges? How did we prevent bottlenecks? How did we maintain consistency and not block creativity? What were our biggest mistakes and how did we solve them?
By the end of this talk you will have a better understanding of the problems scaling an Android team, how to tackle them and how to create a safe and productive environment.

Daniel Horowitz

February 20, 2020
Tweet

More Decks by Daniel Horowitz

Other Decks in Programming

Transcript

  1. –Slack bot , slack analytics “N26 slack users grew from

    less than 200 to more than 2k in 3 years”
  2. “The android team grew 500% in 1.5 years” # of

    android devs 2014 2016 2018 2020 4 13 27 34
  3. :app Feature A Feature B Feature C Core Login Architecture

    Database Dependency Injection Logging Feature n Feature D …
  4. Monolith Long build times Hidden dependency and coupling between features

    No clear ownership for features No awareness of changes
  5. Monolith Microservices Highly maintainable and testable Loosely coupled and independently

    deployable Organised around business capabilities Clear ownership
  6. :app Explore Spaces Actions Feeds … user-identity bank-account … Contacts

    Pin-input … Analytics NXD Security Navigation Networking Forge26
  7. Modularisation in practice Reduce build times :app Explore Spaces Actions

    Feeds … user-identity bank-account … Contacts Pin-input … Analytics NXD Security Navigation Networking Forge26 //Parallelise builds for multiple modules //gradle.properties org.gradle.parallel=true
  8. KYC Install on demand Downloads N26 Reduced apk size Sign

    up Continue to N26 Home KYC Dynamic feature Dynamic delivery
  9. Testing Every feature should be unit tested - More than

    8k unit tests UI tests for ensuring behaviour - More than 400 Espresso tests E2E for happy paths Testing
  10. Release trains PRs triggers quality tasks - Tests - Lint

    and style checks Automation of manual tasks - Bootstrap features - Run UI tests on CI - Feature migration - Git hooks Automation
  11. SectionHeader("Transactions"), listOf( SubSectionHeader(“Today"), 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))))
  12. Server driven UI Server driven UI Polymorphic API response Map

    into data models UI Rendering Carousel Section ImageCard Rendering framework
  13. Server driven UI Server driven UI API response Map to

    data models UI Rendering Carousel ImageCard Rendering framework Section
  14. Server driven UI API response Map to data models UI

    Rendering SimpleCard ImageCard Rendering framework Section Server driven UI
  15. Server driven UI Server driven UI Be mindful of API

    design Versioning and backwards compatibility There’s no silver bullet