Slide 1

Slide 1 text

No content

Slide 2

Slide 2 text

Android Engineering for Scale Jamie McDonald

Slide 3

Slide 3 text

What is scale? In the context of mobile development title, date, 01 of 10

Slide 4

Slide 4 text

Subtitle 4M Android downloads / month 175M monthly listeners title, date, 01 of 10

Slide 5

Slide 5 text

title, date, 01 of 10

Slide 6

Slide 6 text

title, date, 01 of 10 Codebase

Slide 7

Slide 7 text

Ball of Mud title, date, 01 of 10

Slide 8

Slide 8 text

Layered Architecture title, date, 01 of 10

Slide 9

Slide 9 text

Featurised Architecture title, date, 01 of 10

Slide 10

Slide 10 text

Layers

Slide 11

Slide 11 text

Feature Packages

Slide 12

Slide 12 text

Feature Packages STREAM StreamAdapter StreamFragment StreamModule StreamOperations StreamStorage StreamItemPresenter

Slide 13

Slide 13 text

Lava Layers title, date, 01 of 10 “Successive, well intentioned, changes to architecture throughout the lifetime of an project can lead to a fragmented and hard-to- maintain code base” The Lava Layer Anti-pattern

Slide 14

Slide 14 text

SPOCCER Screen Presenter Operations Controller Command EntityState Repository

Slide 15

Slide 15 text

Subtitle Reactive Programming title, date, 01 of 10 Rx

Slide 16

Slide 16 text

Branches title, date, 01 of 10 <> branch <> master <> origin/master

Slide 17

Slide 17 text

master Branch by Abstraction title, date, 01 of 10 abstraction layer <> <> Martin Fowler: Branch by Abstraction

Slide 18

Slide 18 text

master Branch by Abstraction title, date, 01 of 10 abstraction layer <> Martin Fowler: Branch by Abstraction

Slide 19

Slide 19 text

master Branch by Abstraction title, date, 01 of 10 <> Martin Fowler: Branch by Abstraction

Slide 20

Slide 20 text

master Trunk-based Development title, date, 01 of 10 feature-B .isEnabled() .isEnabled() feature-A .isEnabled() feature-C Trunk-based Development

Slide 21

Slide 21 text

if (flags.isEnabled(Feature.BRAND_NEW_FEATURE)) { return newThing; } else { return oldThing; } title, date, 01 of 10 Feature Flags

Slide 22

Slide 22 text

Modules title, date, 01 of 10 MAIN REPO SINGLE REPO ANDROID-KIT PROPELLER LIGHTCYCLE SKIPPY PLAYER

Slide 23

Slide 23 text

Users title, date, 01 of 10

Slide 24

Slide 24 text

Subtitle End-to-End Development title, date, 01 of 10

Slide 25

Slide 25 text

Android iOS SoundCloud API

Slide 26

Slide 26 text

API Mobile Mobile API Android iOS

Slide 27

Slide 27 text

Subtitle title, date, 01 of 10 { "id":612849, "kind":"user", "permalink":"bazan", "username":"David Bazan", "uri":"https://api.soundcloud.com/users/612849", "permalink_url":"http://soundcloud.com/bazan", "avatar_url":"https://i1.sndcdn.com/avatars-000030728315- oe5uld-large.jpg?e76cf77", "country":"United States", "first_name":"David", "last_name":"Bazan", "full_name":"David Bazan", "description":"Known for his work fronting the enigmatic rock band Pedro the Lion, David Bazan\u2019s emotionally charged narratives, eye for telling detail, and mournful voice have more in common with J.D. Salinger\u2019s \u201cNine Stories\u201d or Flannery O\u2019Connor\u2019s \u201cWise Blood\u201d than with the usual lyrical slant of popular music. Bazan is a gifted storyteller, weaving parables of spiritual conflict, suburban ennui, and personal surrender into magnetic, well-crafted songs.\r\n\r\nHis debut solo full-length album, Curse Your Branches (out now on Barsuk), is a masterwork by a modern American poet at the height of his powers. Paste Magazine called him one of the \u201c100 Best Living Songwriters\u201d. This record is the deepest and most explicit exploration of his struggles with faith and a meditation on all things passed between the generations.", "city":"Seattle", [...] } { "collection":[ "hip hop", "chill", "electronic", "deep house", "party", "love", "rap", "happy", "study", "techno", "indie rock", "dubstep", "r&b", "relax", "country", "pop", "edm", "reggae", "house", "workout", "soundtrack", "reggaeton", "piano", "dance", "remix", "alternative", "summer", "instrumental", "rock", "morning", "funk", "classical", [...] } SoundCloud API Mobile API

Slide 28

Slide 28 text

Staying Connected

Slide 29

Slide 29 text

Team title, date, 01 of 10

Slide 30

Slide 30 text

Mobile Team Other Engineering Android iOS Platform Teams

Slide 31

Slide 31 text

Feature Teams Core Engineering Android iOS

Slide 32

Slide 32 text

Core Engineering Android iOS Feature Teams

Slide 33

Slide 33 text

title, date, 01 of 10

Slide 34

Slide 34 text

title, date, 01 of 10

Slide 35

Slide 35 text

Enabling Involvement

Slide 36

Slide 36 text

Subtitle Collective Values title, date, 01 of 10

Slide 37

Slide 37 text

title, date, 01 of 10 Pairing & Pull Requests

Slide 38

Slide 38 text

title, date, 01 of 10 ACCEPTANCE TEST UNIT TEST CODE

Slide 39

Slide 39 text

Subtitle title, date, 01 of 10 @Inject @LightCycle ActionBarUtil actionBarUtil; @Inject @LightCycle PlayerController playerController; public MainActivity() { [...] } Unit Testing

Slide 40

Slide 40 text

title, date, 01 of 10 Acceptance Testing

Slide 41

Slide 41 text

Release Train title, date, 01 of 10 BETA 257 258 259 258-beta 259-beta RELEASE

Slide 42

Slide 42 text

title, date, 01 of 10 UNIT TESTS BUILD PROMOTE ACCEPTANCE TESTS Continuous Integration

Slide 43

Slide 43 text

title, date, 01 of 10 Featurised, layered architecture Shared practices: reactive programming Feature teams & end-to-end development Shared values: testing Trunk-based development Summary

Slide 44

Slide 44 text

soundcloud.com/jobs Thank you, NYC!