Scaling Mobile Engineering

28
Scaling Mobile Engineering Deniz Veli [email protected] @denizmveli

Transcript of Scaling Mobile Engineering

Scaling Mobile EngineeringDeniz Veli

[email protected]@denizmveli

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

Etsy

iflix (we’re hiring)

Growth.People. Teams. Development.Testing.Delivery.

Growth.People. Teams. Development.Testing.Delivery.

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

Growth.People. Teams. Development.Testing.Delivery.

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

Web iOS Android Backend

Shared feature / project knowledge

Platform Teams

Teams

Feature A Feature B Feature C

Feature Teams / Cross-functional

Feature D

Cross team platform groups

Growth.People. Teams. Development.Testing.Delivery.

DevelopmentApp development platform - which will scale?

● Webviews?● Hybrid?● Native?

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

Growth.People. Teams. Development.Testing.Delivery.

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

Growth.People. Teams Development.Testing.Delivery.

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

Easy enough?

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

Questions?

Deniz [email protected]

@denizmveli