Slide 1

Slide 1 text

⬢ ⬢ ⬢ ⬢ ⬢ ⬢ Las gemas del infinito (del Universo Android) Nicolas Patarino 1

Slide 2

Slide 2 text

Nicolás Patarino @npatarino Staff Mobile Engineer at Podcast host at 2

Slide 3

Slide 3 text

3

Slide 4

Slide 4 text

4

Slide 5

Slide 5 text

⬢ Architecture ⬢ Build time ⬢ Modularization ⬢ Design System ⬢ Release Process ⬢ Metrics 5

Slide 6

Slide 6 text

⬢ Architecture ⬢ Design System ⬢ Release Process ⬢ Metrics ⬢ Build time ⬢ Modularization 6

Slide 7

Slide 7 text

Architecture “ La arquitectura debe ser la expresión de nuestro tiempo, y no un plagio de culturas pasadas. Le Corbusier 7

Slide 8

Slide 8 text

Architecture MVP MVVM MVI 8

Slide 9

Slide 9 text

Architecture View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP 9

Slide 10

Slide 10 text

Architecture View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP 10

Slide 11

Slide 11 text

Architecture View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP 11

Slide 12

Slide 12 text

Architecture View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP 12

Slide 13

Slide 13 text

Architecture View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP 13

Slide 14

Slide 14 text

Architecture 14 View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP Interface View

Slide 15

Slide 15 text

Architecture View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP View (Activities, Fragments...) ViewModel Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVVM 15

Slide 16

Slide 16 text

Architecture View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP 16 View (Activities, Fragments...) ViewModel Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVVM Observable (LiveData / DataBinding)

Slide 17

Slide 17 text

Architecture View (Activities, Fragments...) Presenter / VM Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVI View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP View (Activities, Fragments...) ViewModel Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVVM 17

Slide 18

Slide 18 text

Architecture View (Activities, Fragments...) Presenter / VM Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVI View (Activities, Fragments...) Presenter Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVP View (Activities, Fragments...) ViewModel Domain (Use cases.) Data (Repositories.) Data (Repositories.) Data (Repositories.) MVVM Reducer (View State) 18

Slide 19

Slide 19 text

Architecture Clean Testable Works for you 19

Slide 20

Slide 20 text

⬢ Architecture 20 ⬢ Build time

Slide 21

Slide 21 text

Build Time “ El problema es, que pensás que tenés tiempo. Jack Kornfield 21

Slide 22

Slide 22 text

Build Time 22 Modularization Remote compiling Build cache KSP vs APT Grade daemons

Slide 23

Slide 23 text

⬢ Architecture ⬢ Build time 23 ⬢ Modularization

Slide 24

Slide 24 text

Modularization “ Divide cada problema en tantas partes como sea posible para resolverlo. René Descartes 24

Slide 25

Slide 25 text

Modularization 25 Layers Features

Slide 26

Slide 26 text

Modularization 26 Module 1 Presentation Feature 1 Feature 2 Feature 3 By Layers Module 3 Data Feature 1 Feature 2 Feature 3 Module 2 Domain Feature 1 Feature 2 Feature 3

Slide 27

Slide 27 text

Modularization 27 Module 1 Feature 1 Presentation Domain Data By Features Module 3 Feature 3 Presentation Domain Data Module 2 Feature 2 Presentation Domain Data

Slide 28

Slide 28 text

Modularization 28 VS Scalability Speed Simplicity Separation of concerns Independency Less conflicts

Slide 29

Slide 29 text

⬢ Architecture ⬢ Build time ⬢ Modularization ⬢ Design System 29

Slide 30

Slide 30 text

Design System 30 “ Esto es un hecho: no se puede innovar en productos sin primero innovar en la forma en la que se los crea. Alex Schleifer

Slide 31

Slide 31 text

Design System 31 Atomic Design

Slide 32

Slide 32 text

⬢ Architecture ⬢ Build time ⬢ Modularization ⬢ Design System 32 ⬢ Release Process

Slide 33

Slide 33 text

Release Process 33

Slide 34

Slide 34 text

Release Process 34 “ A medida que las máquinas se vuelven cada vez más eficientes y perfectas, queda claro que la grandeza del ser humano es la imperfección. Ernst Fischer

Slide 35

Slide 35 text

Release Process 35 Bugs Reduce effort (Feature flags, tests A/B, Developer Settings) Automation (Compilation, run tests, artifacts generation, publishing, transitioning tickets..) Release frequently Time

Slide 36

Slide 36 text

⬢ Design System ⬢ Release Process ⬢ Metrics ⬢ Architecture ⬢ Build time ⬢ Modularization 36

Slide 37

Slide 37 text

Metrics 37 “ Si no podés medir algo, no podés entenderlo. Si no podés entenderlo, no podés controlarlo. Si no podés controlarlo, no podés mejorarlo. H. James Harrington

Slide 38

Slide 38 text

Metrics 38 Development (Errors, time-to-render, API-calls) Business (Not finish payment, not accept newsletter...) User Experience (Time-to-interact, Performance for A/B Testing)

Slide 39

Slide 39 text

Metrics 39 Detect fast Fail fast Alerts Think about business

Slide 40

Slide 40 text

⬢ Architecture ⬢ Build time ⬢ Modularization ⬢ Design System ⬢ Release Process ⬢ Metrics 40

Slide 41

Slide 41 text

41 "Los héroes están hechos por los caminos que eligen, no por los poderes con los que nacieron" #CodemotionConf21

Slide 42

Slide 42 text

Nicolás Patarino @npatarino #ChimichurriCode 42