Scaling Mobile Engineering
-
Upload
deniz-veli -
Category
Technology
-
view
25 -
download
0
Transcript of Scaling Mobile Engineering
What do I know?Worked on small and large apps teams
● Platforms Lead at iflix, Melbourne● Mobile Engineering Manager at Etsy, NY● Android Freelancer, Melbourne● Personal apps
GrowthWhy do teams grow?
● Build more features faster● Expand into new markets● Integrate/partner - Google, Apple, Facebook, Twitter etc● As a result you need more help with management,
tooling, testing, delivery and general process stuff● So you hire more...
People● Hiring - it’s hard
○ try to mix your skill levels○ junior, mid-level & senior ○ provide mentoring opportunities ○ consider diversity not just in experience○ gender, race, background, age○ diverse teams consider more perspectives○ your users aren’t all the same
● Can’t hire fast enough? Training can complement hiring
Teams
Feature A Feature B Feature C
Feature Teams / Cross-functional
Feature D
Cross team platform groups
Development
If you’re growing, aiming for millions of users and great ratings,go native.
Hybrid
Best of both worlds or best of neither?
Still not fast enough give a full native like experience.
Usable in parts but not core app flow
(want to get featured?)
Webviews
Fast to get started across platforms, slower for users.
Consistent for the product, inconsistent with the platform standards.
Not recommended by Google / Apple
(want to get featured?)
Native
Slower to build initially but optimum experience for
users in the end.
Consistent with platform expectations. Easy hardware
integration
Recommended by Google / Apple
DevelopmentInvest in your apps architecture
● Front end architecture (MVP, MVVM, VIPER, etc)● Define your app architecture● Build for testability
○ dependency injection○ separation of concerns
● Build components where you foresee re-use● Code reviews / pairing is essential
DevelopmentHow do you speed up development on multiple native platforms?
Make your apps dumb! Offload logic to the server in you API’s.
● Basic○ data storage○ business logic
● Advanced○ server driven layout○ configuration and feature toggles
DevelopmentMore on feature toggles…
● Switching functionality in your app based on a flag - ideally updated remotely if (featureIsEnabled("show-new-redesign")) { showNewRedesign(); } else { showOldDesign(); }
● Enable continuous delivery and A/B testing ● Services - Firebase Remote Config, LaunchDarkly + more● Cleanup overhead● Reading - https://martinfowler.com/articles/feature-toggles.html
Testing● Testing pyramid● Lots of unit tests● Some integration tests● Fewer manual and end-to-end tests● Private internal staff testing ● Public beta release groups
DeliveryFeature based delivery
● More people = more code. ● If you don’t release regularly = big releases
○ mammoth testing cycles and increased risk ○ developers are further from the changes made○ increased mean time to recovery on incidents○ users go without fixes and improvements
DeliveryContinuous Delivery - unused code doesn’t teach you a thing
● Release train = “bug fixes and performance improvements” ● Ship to the app store every 1 - 4 weeks ● Feature toggles = big goals, small steps
DeliveryMonitoring
● Crash reporting● Error logging● App analytics and tracking● Performance monitoring● Respond to customer feedback
Hard parts● Losing control & letting go● Perfectionists vs pragmatists● Big changes in the code & app take time● How big is too big? When does more = less?
Where do you start?You’re growing but don’t know where to start?
● Start thinking server driven and API first● Deliver your apps regularly to users● Setup basic feature toggles so you can keep shipping