Slide 1

Slide 1 text

What's behind BMW Connected?

Slide 2

Slide 2 text

Agenda What is Connected? Project structure Technology stack Patterns Team practices

Slide 3

Slide 3 text

What is Connected? Personal mobility companion app Journey management Time-to-leave noti cations Personal-assistant features

Slide 4

Slide 4 text

What is Connected? Direct access to vehicle features Vehicle location Remote services Vehicle status

Slide 5

Slide 5 text

Let's talk about Android

Slide 6

Slide 6 text

Project Structure How do we support BMW, MINI, Rolls Royce, BMW Motorrad... only maintaining one code base?

Slide 7

Slide 7 text

Library project

Slide 8

Slide 8 text

Library Contains almost all JAVA code Unit tests 3rd party libraries Dependency Injection

Slide 9

Slide 9 text

App UI Theming Spece c con gurations Product avors + build types Espresso tests

Slide 10

Slide 10 text

Bene ts Write once, use everywhere Bug xes are solved in all brands at the same time Focus on features, not on maintenance

Slide 11

Slide 11 text

Technology Stack JAVA (sorry Kotlin, you're not fully supported by Google 😞) RxJava + RxAndroid Dagger 2 Retro t + OkHttp DBFlow Calligraphy Mockito

Slide 12

Slide 12 text

Patterns Pragmatic MVVM (Model View ViewModel) Dependency Injection Unit tests (100% coverage in POJO les)

Slide 13

Slide 13 text

Pragmatic MVVM?

Slide 14

Slide 14 text

Pragmatic MVVM Not using Android's Data Binding Not ready for prime time yet Try to use RxJava as much as we can, but... Sometimes declarative programming is easier to understand and, therfore, maintain Sometimes it feels like MVP (Model View Presenter)

Slide 15

Slide 15 text

Dependency Injection In Android classes -> eld injection In POJO classes -> constructor injection Easier to test and setup Mock dependencies Heavy use of interfaces Provide different implementations based on context/brand/settings...

Slide 16

Slide 16 text

Unit tests ~2500 tests in less than a minute We love Mockito We love less PowerMockito Helpful for mocking 3rd party dependencies Jenkins builds every opened pull requests and runs all the tests Lint checks for missing translations, styling...

Slide 17

Slide 17 text

Team Practices

Slide 18

Slide 18 text

Team Practices 1-week sprints Freedom to grab anything from the board 90% of the time working on Android 10% working on backend Weekly worldwide demos

Slide 19

Slide 19 text

Team practices Weekly technology reviews http://androidweekly.net/ Team culture is really important to us Collaboration with teams in Chicago, Munich and Shanghai

Slide 20

Slide 20 text

... and also

Slide 21

Slide 21 text

No content

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

No content

Slide 24

Slide 24 text

No content

Slide 25

Slide 25 text

BMW Connected v1.0 for Android

Slide 26

Slide 26 text

Keep in touch @jcocaramos

Slide 27

Slide 27 text

Thanks