Slide 1

Slide 1 text

Let your design evolve adopt a Design System Jean-Baptiste VINCEY @jbvincey

Slide 2

Slide 2 text

No content

Slide 3

Slide 3 text

Deezer ecosystem Mobile Desktop TV Car Wearables Speakers

Slide 4

Slide 4 text

Deezer ecosystem deezer 360 by deezer Radio by deezer

Slide 5

Slide 5 text

Design consistency, evolution, reuse?

Slide 6

Slide 6 text

Implementing a new feature

Slide 7

Slide 7 text

Where to look for existing components?

Slide 8

Slide 8 text

Where to look for existing components?

Slide 9

Slide 9 text

What if existing components are different?

Slide 10

Slide 10 text

Let’s build a Design System!

Slide 11

Slide 11 text

Style Guide

Slide 12

Slide 12 text

Component library Style Guide

Slide 13

Slide 13 text

Component library Style Guide Guidelines

Slide 14

Slide 14 text

Atomic Design a methodology 
 by Brad Frost 
 to build robust 
 Design Systems “Atomic Design is out now!” by Brad Frost used under CC BY

Slide 15

Slide 15 text

The 5 stages of atomic design - Atomic Design, chapter 2, Brad Frost

Slide 16

Slide 16 text

No content

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

No content

Slide 21

Slide 21 text

Design System in practice

Slide 22

Slide 22 text

Choose our own vocabulary: Lego!

Slide 23

Slide 23 text

Setup a component library: the UIKit Design library Android library

Slide 24

Slide 24 text

Setup a Style Guide

Slide 25

Slide 25 text

UIKit implementation • Every page has a RecyclerView • Every UI component is a brick • The LegoAdapter is a RecyclerView.Adapter handling: - bricks display (any combination) - views update - recycling - animation

Slide 26

Slide 26 text

styles.xml <item name="android:textSize">20sp</item> <item name="android:textStyle">bold</item> brick__card.xml … … Atom style

Slide 27

Slide 27 text

Molecule brick CardBrick.kt class CardBrick( val id: String, val title: String, val pictureUrl: String ) : BaseBrick() { override fun getLayout() = R.layout.brick_card override fun bind(binding: BrickCardBinding) { binding.brick = this } }

Slide 28

Slide 28 text

brick_card.xml Molecule layout

Slide 29

Slide 29 text

Organism brick CarouselBrick.kt class CarouselBrick( @StringRes val titleRes: Int, val contentBricks: List ) : BaseBrick() { override fun getLayout() = R.layout.brick_carousel override fun bind(binding: BrickCarouselBinding) { binding.brick = this } }

Slide 30

Slide 30 text

MVVM Lego architecture

Slide 31

Slide 31 text

Page transformer ArtistPageBrickTransformer.kt class ArtistPageBrickTransformer( private val albumTransformer: AlbumBrickTransformer, private val artistTransformer: ArtistBrickTransformer ) { fun toPageBrick(artist: Artist): List = albumTransformer.toCarousel( R.string.discography, artist.discography ) + artistTransformer.toCarousel( R.string.similar_artists, artist.similarArtists ) }

Slide 32

Slide 32 text

Brick transformer ArtistBrickTransformer.kt class ArtistBrickTransformer() { fun toCarousel(@StringRes titleRes: Int, artists: List) = CarouselBrick( title, artists.map { toBrick(it) } ) fun toBrick(artist: Artist) = CardBrick( artist.id, artist.title, artist.pictureUrl ) }

Slide 33

Slide 33 text

Remaining challenges • Setup the Design System everywhere in the app • Keep design and implementation on every platform aligned • Decide when we should put UI components in the Design System • Onboard everyone in the team (new comers)

Slide 34

Slide 34 text

Many benefits • Ensure consistency • Ready to use in new apps • Easy to maintain and extend • Support design evolution • Strengthen collaboration with designers

Slide 35

Slide 35 text

UI projects Design Update Right-to-Left Dark mode

Slide 36

Slide 36 text

To sum up

Slide 37

Slide 37 text

Component library Style Guide Guidelines What is a Design System:

Slide 38

Slide 38 text

Atomic Design methodology:

Slide 39

Slide 39 text

• A vocabulary • A style guide • A component library (design and Android) • An implementation based on RecyclerView and lego bricks How to setup a Design System:

Slide 40

Slide 40 text

Atomic Design (Brad Frost): http://atomicdesign.bradfrost.com/ A journey towards Atomic Design at Deezer (Jean-Baptiste Vincey): https://deezer.io/a-journey-towards-atomic-design-on-android-at-deezer- f384928bb04e Everything you need to know about Design Systems (Audrey Hacq): https://uxdesign.cc/atomic-design-how-to-design-systems-of-components- ab41f24f260e Stop designing interfaces, Start designing experiences (Nicolas Duval): https://medium.com/blablacar-design/stop-designing-interfaces-start- designing-experiences-d82def0b802c To go further:

Slide 41

Slide 41 text

Questions ? Jean-Baptiste VINCEY @jbvincey

Slide 42

Slide 42 text

This presentation will soon be available on the droidcon London website at the following link: https://skillsmatter.com/conferences/11785- droidcon-london-2019#skillscasts Jean-Baptiste VINCEY @jbvincey