SlideShare uma empresa Scribd logo
1 de 41
Baixar para ler offline
DroidCon Berlin June 5 2015Raymond Chenon
App Fails and
Retrospectives
1
DroidCon Berlin June 5 2015Raymond Chenon
Intro
This talk is about fuckups
We acknowledge our mistakes
Maybe you’ve made the same
mistakes?
2
DroidCon Berlin June 5 2015Raymond Chenon
About Me
Raymond Chenon
● Software Engineer
● Joined in Nov. 2013
Team
● Six devs on an agile team, five nationalities
3
DroidCon Berlin June 5 2015Raymond Chenon
The Fuckups I’ll Be Talking About:
1. Our Google Play Release Panic
2. An Internationalization Problem
3. A User Country Problem
4. Refactoring:
- selecting your libraries
- a BIG refactoring
4
DroidCon Berlin June 5 2015Raymond Chenon
Fuckup Number One:
Our Google Play Store Release
Panic
5
DroidCon Berlin June 5 2015Raymond Chenon
Play Store Release: The Context
After a week of testing and bugfixing:
- 100% Tests OK. QA team gave the go
New app version becomes available to 50% of
our users right before a long weekend
6
✔
DroidCon Berlin June 5 2015Raymond Chenon
Play Store Release: The Fuckup
We updated the database …
One user complained that our app was
crashing ...
and then all app upgrades crashed :(
7
DroidCon Berlin June 5 2015Raymond Chenon
Play Store Release: A HARD Lesson
In the Play Store, it is NOT possible to rollback
to a previous version of an app
The newer version must have a higher
versionCode
8
DroidCon Berlin June 5 2015Raymond Chenon
Play Store Release: How It
Happened
9
stress level
17:00
app published
19:00
first complaint.
Phone call.
19:30
bug found.
We must rollback
19:40
the build script
failed everytime
19:45
team lead arrived
timeline
21:00
apk. released
DroidCon Berlin June 5 2015Raymond Chenon 10
DroidCon Berlin June 5 2015Raymond Chenon
Play Store Release: Solution
11
Prepare an .
apk Backup
vc : versionCode
vn : versionName
vn = 2.3,
vc = 100
vn = 2.4,
vc = 101
vn = 2.3.1
vc = 102
Current version Rollback
previous version
Use the rollback only when
something goes wrong with the
new version
DroidCon Berlin June 5 2015Raymond Chenon
Play Store Release: Lessons
- Always test an app upgrade
- Have a backup .apk ready
- Make sure your build script is simple
- Never publish before weekends or public holidays
- Avoid overconfidence in your staged rollout—start at
10%
- Celebrate a release one week after
AND … TRUST your team
12
DroidCon Berlin June 5 2015Raymond Chenon
Fuckup Number Two:
Our Internationalization Problem
13
DroidCon Berlin June 5 2015Raymond Chenon
Internationalization: The Context
We’re in 15 countries—but not Russia
● If your device is in Russian, Zalando’s app
title is “Barcode scanner”
WHAT?
14
DroidCon Berlin June 5 2015Raymond Chenon
Internationalization: The Fuckup
Why “Barcode
Scanner?”
● We use libraries with
resources: apklib, aar
● The apklib, aar library
overrides our strings
15
app_name library’s app_name
en zalando barcode scanner
de zalando barcode scanner
ru barcode scanner
DroidCon Berlin June 5 2015Raymond Chenon
Internationalization: Solutions
● app_name is the default key for the name
Rename app_name to
company_app_name
● Make sure there is no key name collision
16
DroidCon Berlin June 5 2015Raymond Chenon
Internationalization: Lessons
You don’t have to cover all languages (there
are 6,500 languages in the world, BTW)
17
DroidCon Berlin June 5 2015Raymond Chenon
Fuckup Number Three:
A User Country Problem
18
DroidCon Berlin June 5 2015Raymond Chenon
User Country: The Context
At Zalando, the user’s country of product
delivery matters a lot
BUT: device locale is NOT the same as country
of delivery
● Example: My phone is in English, but I live in Germany
19
DroidCon Berlin June 5 2015Raymond Chenon
User Country: Solution 1
Web: .fr domain name implies a French user
Mobile: you infer the user’s country by using
the TelephonyManager
20
DroidCon Berlin June 5 2015Raymond Chenon
User Country: Solution 2
Or: let the user select
his/her country
21
DroidCon Berlin June 5 2015Raymond Chenon
Fuckup Number Four:
Refactoring
22
DroidCon Berlin June 5 2015Raymond Chenon
Refactoring: Some Perspectives
A change made to the internal structure of software to
make it easier to understand and cheaper to modify without
changing its observable behavior.
—Martin Fowler
Architectural refactoring itself is a fuckup :)
—S.B.
23
DroidCon Berlin June 5 2015Raymond Chenon
Refactoring: Some Best Practices
DO
1. no behavior change (100% unit tests success)
2. measurable improvement—strengthen the argument for
refactoring
3. the development cycle will be faster
DON’T
1. refactor without a set of tests in place
24
DroidCon Berlin June 5 2015Raymond Chenon
Common Excuses for Not Testing
- “We don’t have time”
- “I trust my coding abilities. Others make
mistakes.”
- “There is a Quality team for that. Not my
role.”
25
DroidCon Berlin June 5 2015Raymond Chenon
Refactoring: Two Fuckup Scenarios
- comparing libraries
- image downloading caching
- “Big” refactoring/one big rewrite
- dependency injection (Roboguice to Dagger 2)
26
DroidCon Berlin June 5 2015Raymond Chenon
Selecting a Library
Where to start?
- so many good open source libraries out
there
- sometimes we are not objective—we tend to
follow certain authors, blogs => self-fulfilling
prophecy
- libraries evolve
27
DroidCon Berlin June 5 2015Raymond Chenon
The Fuckup: Select the Wrong
Library
“I want to replace interfaces used for callback
by Otto Event bus”
“I am a fan of Square and Jack Wharton”
Otto cannot post on a background thread
28
X
DroidCon Berlin June 5 2015Raymond Chenon
Solution: Select Your Library
Carefully
Have your metrics:
- number of crash reports (OutOfMemory
exceptions)
- time to load
Use these metrics for benchmarking
29
DroidCon Berlin June 5 2015Raymond Chenon
Select Your Library: Lessons
What is best for X may not
be for you. Do you own
research.
- Always compare the
available libraries
- Don’t let fanboy/girlism
cloud your judgment 30
✔
X
Libraries memory
use
loading
time ...
Picasso
Glide
Ion
Universal
Image
Loader
Volley
DroidCon Berlin June 5 2015Raymond Chenon
Incremental Refactoring
31
DroidCon Berlin June 5 2015Raymond Chenon
Incremental Refactoring Lessons
Do:
● Narrow the scope of your changes
● Apply the changes only if there are
significant improvements
Don’t:
“Let’s apply everywhere” — does more harm
than good
32
1
2
✔
X
DroidCon Berlin June 5 2015Raymond Chenon
Big Refactoring
when you can’t apply an incremental
refactoring
33
DroidCon Berlin June 5 2015Raymond Chenon
BIG Refactoring: The Fuckup
We accumulated lots of technical debt with
Roboguice
This happened before Dagger was released
34
DroidCon Berlin June 5 2015Raymond Chenon
Convince to Refactor: Geek Talk
- RoboGuice is a runtime DI that uses reflection
- Dagger 2 performs its magic during compile time
- Performance-wise, Dagger 2 is faster
35
DroidCon Berlin June 5 2015Raymond Chenon
Convince to Refactor: Human Talk
- The app start time will be 80% faster
- Improvements => we can release faster
36
DroidCon Berlin June 5 2015Raymond Chenon
Prepare for Refactoring (1)
Dependency injection itself:
● Rethink the graph model
● Roboguice forces to extend from
RoboActivity, RoboFragment
37
DroidCon Berlin June 5 2015Raymond Chenon
Prepare for Refactoring (2)
38
View Injection
Roboguice
@roboguice.inject.InjectView(R.id.add_wishlist_button)
private Button addToWishlistButton;
Butterknife
@butterknife.InjectView(R.id.add_wishlist_button)
Button addToWishlistButton;
DroidCon Berlin June 5 2015Raymond Chenon
Big Refactoring: Lessons
● The better you prepare for changes, the
fewer problems afterward
● Make sure everything compiles—don’t go in
a dark area
39
DroidCon Berlin June 5 2015Raymond Chenon
Final Thoughts
Any man can make mistakes, but only an idiot
persists in his error.
—Cicero
40
DroidCon Berlin June 5 2015Raymond Chenon
Questions ?
41

Mais conteúdo relacionado

Mais procurados

Tales from the Workshops
Tales from the WorkshopsTales from the Workshops
Tales from the WorkshopsRussel Winder
 
Ready, set, go! An introduction to the Go programming language
Ready, set, go! An introduction to the Go programming languageReady, set, go! An introduction to the Go programming language
Ready, set, go! An introduction to the Go programming languageRTigger
 
A brief history of automation in Software Engineering
A brief history of automation in Software EngineeringA brief history of automation in Software Engineering
A brief history of automation in Software EngineeringGeorg Buske
 
Test-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJSTest-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJSSmartOrg
 
Bar campsaigon2012 j-unitfitness
Bar campsaigon2012 j-unitfitnessBar campsaigon2012 j-unitfitness
Bar campsaigon2012 j-unitfitnessKhoa Tran
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesLars Rosenquist
 
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforeJAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforejazoon13
 

Mais procurados (9)

Tales from the Workshops
Tales from the WorkshopsTales from the Workshops
Tales from the Workshops
 
Ready, set, go! An introduction to the Go programming language
Ready, set, go! An introduction to the Go programming languageReady, set, go! An introduction to the Go programming language
Ready, set, go! An introduction to the Go programming language
 
Gamedev-grade debugging
Gamedev-grade debuggingGamedev-grade debugging
Gamedev-grade debugging
 
A brief history of automation in Software Engineering
A brief history of automation in Software EngineeringA brief history of automation in Software Engineering
A brief history of automation in Software Engineering
 
WGDC QA Kapitanenko-Rebrov
WGDC QA Kapitanenko-RebrovWGDC QA Kapitanenko-Rebrov
WGDC QA Kapitanenko-Rebrov
 
Test-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJSTest-Driven Development with TypeScript+Jasmine+AngularJS
Test-Driven Development with TypeScript+Jasmine+AngularJS
 
Bar campsaigon2012 j-unitfitness
Bar campsaigon2012 j-unitfitnessBar campsaigon2012 j-unitfitness
Bar campsaigon2012 j-unitfitness
 
Cloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud PipelinesCloud Native CI/CD with Spring Cloud Pipelines
Cloud Native CI/CD with Spring Cloud Pipelines
 
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone beforeJAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
JAZOON'13 - Andres Almiray - Spock: boldly go where no test has gone before
 

Destaque

Novas tendências em turismo e hotelaria adeliaçor th2 2016
Novas tendências em turismo e hotelaria   adeliaçor th2 2016Novas tendências em turismo e hotelaria   adeliaçor th2 2016
Novas tendências em turismo e hotelaria adeliaçor th2 2016th2
 
Droidcon London2012 Speaker Experience
Droidcon London2012 Speaker ExperienceDroidcon London2012 Speaker Experience
Droidcon London2012 Speaker ExperienceKenichi Kambara
 
Portafolio de reflexion
Portafolio de reflexionPortafolio de reflexion
Portafolio de reflexionpeirce123
 
Educational Technology in the NJ Classroom
Educational Technology in the NJ ClassroomEducational Technology in the NJ Classroom
Educational Technology in the NJ ClassroomLisa Thumann
 
[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android TipsKenichi Kambara
 
O que são documentos históricos
O que são documentos históricosO que são documentos históricos
O que são documentos históricosAndréia Rodrigues
 
Marketing e Gestão Hoteleira
Marketing e Gestão HoteleiraMarketing e Gestão Hoteleira
Marketing e Gestão Hoteleirath2
 
El Concepto Lean Aplicado a La Logistica
El Concepto Lean Aplicado a La LogisticaEl Concepto Lean Aplicado a La Logistica
El Concepto Lean Aplicado a La LogisticaExpoLosAndesLogistica
 
Cómo sacar el máximo provecho de tu proveedor de hosting
 Cómo sacar el máximo provecho de tu proveedor de hosting Cómo sacar el máximo provecho de tu proveedor de hosting
Cómo sacar el máximo provecho de tu proveedor de hostingJose Ramón Padrón García
 
Podcast Presentation for WordCamp.
Podcast Presentation for WordCamp.Podcast Presentation for WordCamp.
Podcast Presentation for WordCamp.Gary Leland
 
The Woo Whisperer - Eternal Sunshine of the Spotless E-commerce Store
The Woo Whisperer - Eternal Sunshine of the Spotless E-commerce StoreThe Woo Whisperer - Eternal Sunshine of the Spotless E-commerce Store
The Woo Whisperer - Eternal Sunshine of the Spotless E-commerce StoreNiklas Högefjord
 
Working with WordPress as a Team
Working with WordPress as a TeamWorking with WordPress as a Team
Working with WordPress as a TeamNatanael Sinisalo
 
BEGIS präsentiert EDIB®
BEGIS präsentiert EDIB®BEGIS präsentiert EDIB®
BEGIS präsentiert EDIB®Thomas Eggert
 

Destaque (15)

Novas tendências em turismo e hotelaria adeliaçor th2 2016
Novas tendências em turismo e hotelaria   adeliaçor th2 2016Novas tendências em turismo e hotelaria   adeliaçor th2 2016
Novas tendências em turismo e hotelaria adeliaçor th2 2016
 
Droidcon London2012 Speaker Experience
Droidcon London2012 Speaker ExperienceDroidcon London2012 Speaker Experience
Droidcon London2012 Speaker Experience
 
Portafolio de reflexion
Portafolio de reflexionPortafolio de reflexion
Portafolio de reflexion
 
Educational Technology in the NJ Classroom
Educational Technology in the NJ ClassroomEducational Technology in the NJ Classroom
Educational Technology in the NJ Classroom
 
[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips[Droidcon Paris 2013]Multi-Versioning Android Tips
[Droidcon Paris 2013]Multi-Versioning Android Tips
 
Analisis de un spot publicitario
Analisis de un spot publicitarioAnalisis de un spot publicitario
Analisis de un spot publicitario
 
Leyes aplicadas al turismo
Leyes aplicadas al turismoLeyes aplicadas al turismo
Leyes aplicadas al turismo
 
O que são documentos históricos
O que são documentos históricosO que são documentos históricos
O que são documentos históricos
 
Marketing e Gestão Hoteleira
Marketing e Gestão HoteleiraMarketing e Gestão Hoteleira
Marketing e Gestão Hoteleira
 
El Concepto Lean Aplicado a La Logistica
El Concepto Lean Aplicado a La LogisticaEl Concepto Lean Aplicado a La Logistica
El Concepto Lean Aplicado a La Logistica
 
Cómo sacar el máximo provecho de tu proveedor de hosting
 Cómo sacar el máximo provecho de tu proveedor de hosting Cómo sacar el máximo provecho de tu proveedor de hosting
Cómo sacar el máximo provecho de tu proveedor de hosting
 
Podcast Presentation for WordCamp.
Podcast Presentation for WordCamp.Podcast Presentation for WordCamp.
Podcast Presentation for WordCamp.
 
The Woo Whisperer - Eternal Sunshine of the Spotless E-commerce Store
The Woo Whisperer - Eternal Sunshine of the Spotless E-commerce StoreThe Woo Whisperer - Eternal Sunshine of the Spotless E-commerce Store
The Woo Whisperer - Eternal Sunshine of the Spotless E-commerce Store
 
Working with WordPress as a Team
Working with WordPress as a TeamWorking with WordPress as a Team
Working with WordPress as a Team
 
BEGIS präsentiert EDIB®
BEGIS präsentiert EDIB®BEGIS präsentiert EDIB®
BEGIS präsentiert EDIB®
 

Semelhante a Droidcon Berlin 2015

Droidcon thessaloniki 2015
Droidcon thessaloniki 2015Droidcon thessaloniki 2015
Droidcon thessaloniki 2015Raymond Chenon
 
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping MistakesStop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping MistakesHannah Flynn
 
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping MistakesStop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping MistakesAggregage
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCupbryanbibat
 
Droidcon Italy 2015: can you work without open source libraries?
Droidcon Italy 2015: can you work without open source libraries?Droidcon Italy 2015: can you work without open source libraries?
Droidcon Italy 2015: can you work without open source libraries?gabrielemariotti
 
5 reasons you'll love to hate Agile Development
5 reasons you'll love to hate Agile Development5 reasons you'll love to hate Agile Development
5 reasons you'll love to hate Agile DevelopmentArin Sime
 
En Route To Industry: Tips on Transferring from College into Industry
En Route To Industry: Tips on Transferring from College into IndustryEn Route To Industry: Tips on Transferring from College into Industry
En Route To Industry: Tips on Transferring from College into IndustryDoreen Hakimi
 
Behaviour Driven Development Hands-on
Behaviour Driven Development Hands-onBehaviour Driven Development Hands-on
Behaviour Driven Development Hands-onHemmerling
 
Clean application development (talk)
Clean application development (talk)Clean application development (talk)
Clean application development (talk)Adam Culp
 
Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Iosif Itkin
 
EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...
EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...
EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...European Innovation Academy
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure FirstKris Buytaert
 
Which android app development tools deserve your attention this year
Which android app development tools deserve your attention this year  Which android app development tools deserve your attention this year
Which android app development tools deserve your attention this year Moon Technolabs Pvt. Ltd.
 
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...
SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...Distilled
 
Continuous delivery for Android
Continuous delivery for AndroidContinuous delivery for Android
Continuous delivery for AndroidLeena N
 
Continuous inspection with Sonar
Continuous inspection with SonarContinuous inspection with Sonar
Continuous inspection with Sonargaudol
 
AI: Your Personal Intern
AI: Your Personal InternAI: Your Personal Intern
AI: Your Personal InternJoe Brinkman
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplateStanislav Petrov
 
Flink Forward San Francisco 2018: Andrew Gao & Jeff Sharpe - "Finding Bad Ac...
Flink Forward San Francisco 2018: Andrew Gao &  Jeff Sharpe - "Finding Bad Ac...Flink Forward San Francisco 2018: Andrew Gao &  Jeff Sharpe - "Finding Bad Ac...
Flink Forward San Francisco 2018: Andrew Gao & Jeff Sharpe - "Finding Bad Ac...Flink Forward
 
DeKnowledge - Try us
DeKnowledge - Try usDeKnowledge - Try us
DeKnowledge - Try usBob Pinto
 

Semelhante a Droidcon Berlin 2015 (20)

Droidcon thessaloniki 2015
Droidcon thessaloniki 2015Droidcon thessaloniki 2015
Droidcon thessaloniki 2015
 
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping MistakesStop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
 
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping MistakesStop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
Stop Guessing, Start Knowing: The Top 5 Most Common Rapid Prototyping Mistakes
 
Preparing for the WebGeek DevCup
Preparing for the WebGeek DevCupPreparing for the WebGeek DevCup
Preparing for the WebGeek DevCup
 
Droidcon Italy 2015: can you work without open source libraries?
Droidcon Italy 2015: can you work without open source libraries?Droidcon Italy 2015: can you work without open source libraries?
Droidcon Italy 2015: can you work without open source libraries?
 
5 reasons you'll love to hate Agile Development
5 reasons you'll love to hate Agile Development5 reasons you'll love to hate Agile Development
5 reasons you'll love to hate Agile Development
 
En Route To Industry: Tips on Transferring from College into Industry
En Route To Industry: Tips on Transferring from College into IndustryEn Route To Industry: Tips on Transferring from College into Industry
En Route To Industry: Tips on Transferring from College into Industry
 
Behaviour Driven Development Hands-on
Behaviour Driven Development Hands-onBehaviour Driven Development Hands-on
Behaviour Driven Development Hands-on
 
Clean application development (talk)
Clean application development (talk)Clean application development (talk)
Clean application development (talk)
 
Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4Foundations of Software Testing Lecture 4
Foundations of Software Testing Lecture 4
 
EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...
EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...
EIA2019Italy - Digital Prototyping/Usability Testing - Mari-Liis Kärsten & Ka...
 
Continuous Infrastructure First
Continuous Infrastructure FirstContinuous Infrastructure First
Continuous Infrastructure First
 
Which android app development tools deserve your attention this year
Which android app development tools deserve your attention this year  Which android app development tools deserve your attention this year
Which android app development tools deserve your attention this year
 
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...
SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...SearchLove Boston 2018 -  Bartosz Goralewicz -  JavaScript: Looking Past the ...
SearchLove Boston 2018 - Bartosz Goralewicz - JavaScript: Looking Past the ...
 
Continuous delivery for Android
Continuous delivery for AndroidContinuous delivery for Android
Continuous delivery for Android
 
Continuous inspection with Sonar
Continuous inspection with SonarContinuous inspection with Sonar
Continuous inspection with Sonar
 
AI: Your Personal Intern
AI: Your Personal InternAI: Your Personal Intern
AI: Your Personal Intern
 
Creating a reasonable project boilerplate
Creating a reasonable project boilerplateCreating a reasonable project boilerplate
Creating a reasonable project boilerplate
 
Flink Forward San Francisco 2018: Andrew Gao & Jeff Sharpe - "Finding Bad Ac...
Flink Forward San Francisco 2018: Andrew Gao &  Jeff Sharpe - "Finding Bad Ac...Flink Forward San Francisco 2018: Andrew Gao &  Jeff Sharpe - "Finding Bad Ac...
Flink Forward San Francisco 2018: Andrew Gao & Jeff Sharpe - "Finding Bad Ac...
 
DeKnowledge - Try us
DeKnowledge - Try usDeKnowledge - Try us
DeKnowledge - Try us
 

Último

CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceanilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceanilsa9823
 
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Niamh verma
 
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝soniya singh
 
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...wyqazy
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7Pooja Nehwal
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Pooja Nehwal
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPsychicRuben LoveSpells
 

Último (8)

CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
 
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
Chandigarh Call Girls Service ❤️🍑 9115573837 👄🫦Independent Escort Service Cha...
 
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
Model Call Girl in Shalimar Bagh Delhi reach out to us at 🔝8264348440🔝
 
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
哪里有卖的《俄亥俄大学学历证书+俄亥俄大学文凭证书+俄亥俄大学学位证书》Q微信741003700《俄亥俄大学学位证书复制》办理俄亥俄大学毕业证成绩单|购买...
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7
 
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
 

Droidcon Berlin 2015

  • 1. DroidCon Berlin June 5 2015Raymond Chenon App Fails and Retrospectives 1
  • 2. DroidCon Berlin June 5 2015Raymond Chenon Intro This talk is about fuckups We acknowledge our mistakes Maybe you’ve made the same mistakes? 2
  • 3. DroidCon Berlin June 5 2015Raymond Chenon About Me Raymond Chenon ● Software Engineer ● Joined in Nov. 2013 Team ● Six devs on an agile team, five nationalities 3
  • 4. DroidCon Berlin June 5 2015Raymond Chenon The Fuckups I’ll Be Talking About: 1. Our Google Play Release Panic 2. An Internationalization Problem 3. A User Country Problem 4. Refactoring: - selecting your libraries - a BIG refactoring 4
  • 5. DroidCon Berlin June 5 2015Raymond Chenon Fuckup Number One: Our Google Play Store Release Panic 5
  • 6. DroidCon Berlin June 5 2015Raymond Chenon Play Store Release: The Context After a week of testing and bugfixing: - 100% Tests OK. QA team gave the go New app version becomes available to 50% of our users right before a long weekend 6 ✔
  • 7. DroidCon Berlin June 5 2015Raymond Chenon Play Store Release: The Fuckup We updated the database … One user complained that our app was crashing ... and then all app upgrades crashed :( 7
  • 8. DroidCon Berlin June 5 2015Raymond Chenon Play Store Release: A HARD Lesson In the Play Store, it is NOT possible to rollback to a previous version of an app The newer version must have a higher versionCode 8
  • 9. DroidCon Berlin June 5 2015Raymond Chenon Play Store Release: How It Happened 9 stress level 17:00 app published 19:00 first complaint. Phone call. 19:30 bug found. We must rollback 19:40 the build script failed everytime 19:45 team lead arrived timeline 21:00 apk. released
  • 10. DroidCon Berlin June 5 2015Raymond Chenon 10
  • 11. DroidCon Berlin June 5 2015Raymond Chenon Play Store Release: Solution 11 Prepare an . apk Backup vc : versionCode vn : versionName vn = 2.3, vc = 100 vn = 2.4, vc = 101 vn = 2.3.1 vc = 102 Current version Rollback previous version Use the rollback only when something goes wrong with the new version
  • 12. DroidCon Berlin June 5 2015Raymond Chenon Play Store Release: Lessons - Always test an app upgrade - Have a backup .apk ready - Make sure your build script is simple - Never publish before weekends or public holidays - Avoid overconfidence in your staged rollout—start at 10% - Celebrate a release one week after AND … TRUST your team 12
  • 13. DroidCon Berlin June 5 2015Raymond Chenon Fuckup Number Two: Our Internationalization Problem 13
  • 14. DroidCon Berlin June 5 2015Raymond Chenon Internationalization: The Context We’re in 15 countries—but not Russia ● If your device is in Russian, Zalando’s app title is “Barcode scanner” WHAT? 14
  • 15. DroidCon Berlin June 5 2015Raymond Chenon Internationalization: The Fuckup Why “Barcode Scanner?” ● We use libraries with resources: apklib, aar ● The apklib, aar library overrides our strings 15 app_name library’s app_name en zalando barcode scanner de zalando barcode scanner ru barcode scanner
  • 16. DroidCon Berlin June 5 2015Raymond Chenon Internationalization: Solutions ● app_name is the default key for the name Rename app_name to company_app_name ● Make sure there is no key name collision 16
  • 17. DroidCon Berlin June 5 2015Raymond Chenon Internationalization: Lessons You don’t have to cover all languages (there are 6,500 languages in the world, BTW) 17
  • 18. DroidCon Berlin June 5 2015Raymond Chenon Fuckup Number Three: A User Country Problem 18
  • 19. DroidCon Berlin June 5 2015Raymond Chenon User Country: The Context At Zalando, the user’s country of product delivery matters a lot BUT: device locale is NOT the same as country of delivery ● Example: My phone is in English, but I live in Germany 19
  • 20. DroidCon Berlin June 5 2015Raymond Chenon User Country: Solution 1 Web: .fr domain name implies a French user Mobile: you infer the user’s country by using the TelephonyManager 20
  • 21. DroidCon Berlin June 5 2015Raymond Chenon User Country: Solution 2 Or: let the user select his/her country 21
  • 22. DroidCon Berlin June 5 2015Raymond Chenon Fuckup Number Four: Refactoring 22
  • 23. DroidCon Berlin June 5 2015Raymond Chenon Refactoring: Some Perspectives A change made to the internal structure of software to make it easier to understand and cheaper to modify without changing its observable behavior. —Martin Fowler Architectural refactoring itself is a fuckup :) —S.B. 23
  • 24. DroidCon Berlin June 5 2015Raymond Chenon Refactoring: Some Best Practices DO 1. no behavior change (100% unit tests success) 2. measurable improvement—strengthen the argument for refactoring 3. the development cycle will be faster DON’T 1. refactor without a set of tests in place 24
  • 25. DroidCon Berlin June 5 2015Raymond Chenon Common Excuses for Not Testing - “We don’t have time” - “I trust my coding abilities. Others make mistakes.” - “There is a Quality team for that. Not my role.” 25
  • 26. DroidCon Berlin June 5 2015Raymond Chenon Refactoring: Two Fuckup Scenarios - comparing libraries - image downloading caching - “Big” refactoring/one big rewrite - dependency injection (Roboguice to Dagger 2) 26
  • 27. DroidCon Berlin June 5 2015Raymond Chenon Selecting a Library Where to start? - so many good open source libraries out there - sometimes we are not objective—we tend to follow certain authors, blogs => self-fulfilling prophecy - libraries evolve 27
  • 28. DroidCon Berlin June 5 2015Raymond Chenon The Fuckup: Select the Wrong Library “I want to replace interfaces used for callback by Otto Event bus” “I am a fan of Square and Jack Wharton” Otto cannot post on a background thread 28 X
  • 29. DroidCon Berlin June 5 2015Raymond Chenon Solution: Select Your Library Carefully Have your metrics: - number of crash reports (OutOfMemory exceptions) - time to load Use these metrics for benchmarking 29
  • 30. DroidCon Berlin June 5 2015Raymond Chenon Select Your Library: Lessons What is best for X may not be for you. Do you own research. - Always compare the available libraries - Don’t let fanboy/girlism cloud your judgment 30 ✔ X Libraries memory use loading time ... Picasso Glide Ion Universal Image Loader Volley
  • 31. DroidCon Berlin June 5 2015Raymond Chenon Incremental Refactoring 31
  • 32. DroidCon Berlin June 5 2015Raymond Chenon Incremental Refactoring Lessons Do: ● Narrow the scope of your changes ● Apply the changes only if there are significant improvements Don’t: “Let’s apply everywhere” — does more harm than good 32 1 2 ✔ X
  • 33. DroidCon Berlin June 5 2015Raymond Chenon Big Refactoring when you can’t apply an incremental refactoring 33
  • 34. DroidCon Berlin June 5 2015Raymond Chenon BIG Refactoring: The Fuckup We accumulated lots of technical debt with Roboguice This happened before Dagger was released 34
  • 35. DroidCon Berlin June 5 2015Raymond Chenon Convince to Refactor: Geek Talk - RoboGuice is a runtime DI that uses reflection - Dagger 2 performs its magic during compile time - Performance-wise, Dagger 2 is faster 35
  • 36. DroidCon Berlin June 5 2015Raymond Chenon Convince to Refactor: Human Talk - The app start time will be 80% faster - Improvements => we can release faster 36
  • 37. DroidCon Berlin June 5 2015Raymond Chenon Prepare for Refactoring (1) Dependency injection itself: ● Rethink the graph model ● Roboguice forces to extend from RoboActivity, RoboFragment 37
  • 38. DroidCon Berlin June 5 2015Raymond Chenon Prepare for Refactoring (2) 38 View Injection Roboguice @roboguice.inject.InjectView(R.id.add_wishlist_button) private Button addToWishlistButton; Butterknife @butterknife.InjectView(R.id.add_wishlist_button) Button addToWishlistButton;
  • 39. DroidCon Berlin June 5 2015Raymond Chenon Big Refactoring: Lessons ● The better you prepare for changes, the fewer problems afterward ● Make sure everything compiles—don’t go in a dark area 39
  • 40. DroidCon Berlin June 5 2015Raymond Chenon Final Thoughts Any man can make mistakes, but only an idiot persists in his error. —Cicero 40
  • 41. DroidCon Berlin June 5 2015Raymond Chenon Questions ? 41