Mohit SarveiyaBuilding Android Infra Teams at Scale@heyitsmohit
View Slide
Building Android Infra Teams at Scale● Purpose & Motivations● How to build an infra team● Best practices
What is an Android Infra Team?● Focuses on Arch, CI and Tooling● Customers are devs.
MotivationsTeam SizeComplexity
Greenfield Phase● Small team size● Iterate quickly● Minimal processes
Scaling Up● Larger team● Developer Experience● Tooling
Scaling Problems● Gradle build setup & build times
Scaling ProblemsTeamsMonorepo
Scaling ProblemsMonorepo Gradle
Gradle Setup● 100+ Gradle Modules● Gradle Plugins (KAPT)● Library Dependencies
Scenario● Upgrade Gradle Plugin
Scenario● Upgrade Gradle Plugin● Causes Out of Memory Exception
Scenario● Upgrade Gradle Plugin● Causes Out of Memory Exception● Effects whole team (Slows down development)
Motivations for Infra● Need to maintain Gradle setup● Detect build regression
Scaling Problems● Gradle build setup & build times● Architecture Fragmentation
Scaling ProblemsCodebase
Scaling ProblemsCodebaseLegacy code
Arch Fragmentation● Legacy Architecture● Example - MVC/MVP● Older design patterns
Arch FragmentationCodebaseLegacy codeFeature A
Arch FragmentationCodebaseLegacy codeFeature AFeature B
Motivations for Infra● Uniform app arch● Specify how to migrate legacy arch
Building Infra Team
Team Charter● Ownership areas
Ownership Areas● Architecture● Shared Libraries● Build tools (Gradle, Buck, Basel)● CI
Ownership AreasTeam SizeComplexity100+
Ownership AreasInfra Org
Ownership AreasInfra OrgCI Arch Dev Ex Build ToolsTeams
Ownership AreasTeam SizeComplexity30+
Ownership AreasInfra OrgSingle Team (CI, Arch, Build Tools)Teams
Challenges● Diverse skill set
CI● How to build pipelines● Jenkins or CircleCI ● Setting up automation
Challenges● Diverse skill set● Prioritizing
Team Charter● Ownership areas● Key Performance Indicators (KPIs)
Key Performance Indicators (KPIs)● Service Level Objectives
Service Level Objectives● Build times● Infra for performance metrics● Infra for network metrics
Service Level ObjectivesCodebaseFeature AFeature BFeature C
Scenario9:41● Scroll performance● Network Latency
Service Level ObjectivesPlatformMonitoring
Team Charter● Ownership areas● Key Performance Indicators (KPIs)● Objectives and key results
Objectives & Key Results (OKRs)● Top down approach● Bottom up approach
Objectives & Key Results (OKRs)● Determine important problems to solve● Prioritize
Team Surveys● Challenges● Build times● Architecture● Testing
Building RoadmapTeam surveyOKRs & Priotrize projectsExecute
Examples OKRs● Improve local build times by 10%● Reduce onboarding to 10th commit● Refactor navigation
Best Practices
Best practices● Feedback
AcquisitionsFeatureTeamsInfra TeamContinous Feedback
AcquisitionsImprovement POC DetailsSerializationPerformanceFeature Team AFeature Team B
PlanningReview acquisitionsPriortrize/PlanSetup Roadmap
Bi-Weekly UpdatesFeatureTeamsInfra TeamDigests
Bi-Weekly Digests● Project Status ● Improvements● Infra Asistance
Example● Improved Gradle build times by 10%● Created tools to improve dev workflow● Assisted in project
Best practices● Feedback● Expectations
OKRs● Not every OKR can have a metric
OKRs● Not every OKR can have a metric● Continuous team survey feedback
Best practices● Feedback● Expectations● Setup processes for using new tech
Introducing New LibrariesRequest for Comments Proposal
Introducing New LibrariesRequest for Comments ProposalReviewed by Infra
Introducing New LibrariesRequest for Comments ProposalReviewed by InfraApproval & Follow up
Best practices● Feedback● Expectations● Setup processes for infra● Automate best practices
Automate Best Practices● Static Code Analysis● Custom lint rules
Best practices● Feedback● Expectations● Setup processes● Automate best practices● Open source libraries
Open source librariesTeam BTeam A Team CDistribute ownership
Open source librariesTeam BTeam A Team CDistribute ownershipSDK
Open Source libraries (Infra ownership)● Gradle tools● Custom Lint repo● Arch frameworks
Open Source libraries● Prioritize OSS issues in planning● Setup milestones for releases
Best practices● Feedback● Expectations● Setup processes for new tech● Automate best practices● Open source libraries
Thank You!www.codingwithmohit.com@heyitsmohit