SlideShare a Scribd company logo
1 of 49
Download to read offline
10-12 September 2015
droidcon Greece
Thessaloniki
App Fails and Retrospectives
App Fails and Retrospectives
#Session SDK
Raymond Chenon
google.com/+RaymondChenon
Topics
1. Zalando
2. Our Google Play Release Panic
3. An Internationalization Problem
4. User Country Problem
5. App Deep Link
6. Choosing a library
One of Europe's largest online fashion retailers
15 countries
3 fulfillment centers
16+ million active customers
2.2+ billion € revenue 2014
9.000+ employees
About Zalando Tech
● Tech HQ in Berlin
● Four other tech offices, including Helsinki and Dublin
● +800 technologists
● Nearly everything produced in-house
● 135+ million visits per month (57% come from mobile
devices)
Environment
Special Thanks to “#guild-fuckup”
Valentine Gogichashvili
● Head of Data Engineering
● Creator of “#guild-fuckup”
on HipChat
Our Google Play Store Release Panic
Play Store Release: The Context
After one week of testing and bugfixing:
100% Tests OK. QA team gave the go
The new app version was staged rollout at 50% of
our users right before a long weekend.
Chronology
● 19h We noticed all app start will crash after an
update.
● Issue escalated. Boss arrived .
● Call to Google. Sorry Google cannot revert for
you.
○ hotfix ( identify the cause first )
○ create a new .apk
What Google says
Note that rollbacks aren’t supported due to the app versioning
requirements of the Android platform.If you need to rollback,
consider launching a previous APK with a new version number.
Understand App Versioning
Make sure that each successive release of your application
uses a greater versionCode value.
NewVersion.versionCode < Rollback.versionCode
versionCode
201 202 203
Rollback Strategy
versionCode
(internal)
2.3 (Old version) 2.4 (New version)
versionName
( String visible to user)
101 102100
Rollback Strategy
versionCode
(internal)
2.3 (Old version) 2.4 (New version) 2.3.1 (Rollback)
versionName
( String visible to user)
101 102100
Rollback is built
from the code base
of the Old Version
Play Store Release: Lessons
- Cause of the crash : One column was renamed in the app’s
SQLite database
- Always test an app upgrade
- Have a rollback .apk ready
- Never publish before weekends or public holidays
- Limit the potential damage by starting the staged rollout
Think Google Play is Hard !!
Think Google Play is Hard !!
How this would work on iOS
- No staged rollout
- No app rollback strategy
- Expedited App Review ( Urgent Bug Fix ) takes
minimum 19 h ( without rejection)
When to celebrate a Release
Celebrate on the release day ….
When to celebrate a Release
Celebrate on the release day OR
after user reviews
Celebrate a release one week after .
It depends on the length of release cycle ( 6 week
cycle )
The Internationalization Problem
Internationalization: The Context
We’re in 15 countries—but not Russia
● If the device is in Russian, Zalando’s app title
was “Barcode scanner”
Internationalization
Why “Barcode
Scanner?”
● We use libraries with
resources: apklib, aar
● The apklib, aar library
overrides our strings
app_name library’s app_name
en zalando barcode scanner
de zalando barcode scanner
ru barcode scanner
Internationalization: Lang
The locales (res/values-xx/strings.xml) are two-
letter ISO 639-1 language
26^2 = 676 possibilities
You don’t have to cover all languages
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
Solution Res Configs
http://tools.android.com/tech-docs/new-build-
system/resource-shrinking
android {
defaultConfig {
resConfigs "en", "fr", "de", "gr" // languages targeted
}
}
A User Country Problem
Source
User Country: The Context
Device locale is NOT the same as the country
where the user lives ( country of delivery )
● Example: My phone is in English, but I live in Greece
Solution IP geolocation
You can resolve with IP geolocation.
Solution IP geolocation
You can resolve with IP geolocation.
But there are some edge cases ,
the user :
- is roaming
- lives in a country border
Solution IP geolocation
You can resolve with IP geolocation.
But there are some edge cases ,
the user :
- is roaming
- lives in a country border
- uses a VPN
User Country: Solution 1
Mobile: you infer the user’s country by using the
TelephonyManager
import android.telephony.TelephonyManager;
….
telephonyManager.getNetworkCountryIso();
User Country: Solution 2
Or: let the user select
his/her country
Deep Link
Source
App Deep Link
App deep linking refers to a URL that points to a
specific part of an app ( onboarding )
Use cases
1. Link Web to App
2. Link App to App
3. Push Notifications , Ad Campaigns , Referral Programs ...
Example Deep Link
zalando://SEARCH?query=short https://www.zalando.de/katalog/?q=short
Error with deep links from developers
The application syncs data at initial setup phase.
Loading with a Splash screen.
Splash is the entry point for all target Activities.
Don’t forget to load the Splash.
Error with deep links
Take care how the deep links are used (
onboarding , home )
Create a good documentation.
Deep Links are powerful API.
Check how a third party would use them.
Choosing a Library
Source
Open source libraries
Commercial products
not always your choice ( boss, budget … )
Open source
Developers choose the best tool
Criteria
1. Is the API to your liking?
2. Maturity level
3. How well documented is the project?
4. Is the project "famous"?
Select Your Library: Lessons
What is best for X may not be
for you. Do you own research.
- Always benchmark the
available libraries
- Don’t let fanboy/girlism
cloud your judgment
Libraries memory
use
loading
time ...
Picasso
Glide
Ion
Universal
Image
Loader
Volley
Refactoring: Some Best Practices
DO
1. no behavior change (100% unit tests success)
2. measurable improvement—strengthen the argument for
refactoring
DON’T
1. refactor without a set of tests in place
from Roboguice to Dagger 2
The library of Dependency Injection was good at
that time.
Now something new came out. It made its proof.
Cannot be incremental refactoring .
Must be done in one Go.
Arguments to switch from Roboguice to Dagger 2
Roboguice uses reflection ( runtime )
Dagger 2 is based annotation processing ( compile
time )
Performance-wise : Dagger 2 is much better than
Roboguice
Big Refactoring: Lessons
● The better you prepare for changes, the fewer
problems afterward
● Make sure everything compiles.
will take a
photo in
Greece
Raymond Chenon
google.com/+RaymondChenon
twitter.com/raychenon
raychenon.com
Thank you!
droidcon Greece Thessaloniki
About Zalando
Tech Blog: tech.zalando.com
GitHub: github.com/zalando
Twitter: @ZalandoTech
Instagram: zalandotech
Jobs: http://tech.zalando.com/jobs
Refer: raymond.chenon@zalando.de

More Related Content

What's hot

FAKE (F# Make) & Automation
FAKE (F# Make) & AutomationFAKE (F# Make) & Automation
FAKE (F# Make) & Automation
Sergey Tihon
 
Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGap
degarden
 

What's hot (20)

MonkeyTalk Documentation
MonkeyTalk DocumentationMonkeyTalk Documentation
MonkeyTalk Documentation
 
Better Governance Banking on Continuous Delivery
Better Governance Banking on Continuous DeliveryBetter Governance Banking on Continuous Delivery
Better Governance Banking on Continuous Delivery
 
Mobile Application Test automation using MonkeyTalk Tool
Mobile Application Test automation using MonkeyTalk ToolMobile Application Test automation using MonkeyTalk Tool
Mobile Application Test automation using MonkeyTalk Tool
 
Cross-platform mobile that Works - Coobers
Cross-platform mobile that Works - CoobersCross-platform mobile that Works - Coobers
Cross-platform mobile that Works - Coobers
 
How to pass a coding interview as an automation developer talk - Oct 17 2016
How to pass a coding interview as an automation developer talk - Oct 17 2016How to pass a coding interview as an automation developer talk - Oct 17 2016
How to pass a coding interview as an automation developer talk - Oct 17 2016
 
TMF2014 Mobile Testing Workshop Michael Palotas
TMF2014 Mobile Testing Workshop Michael PalotasTMF2014 Mobile Testing Workshop Michael Palotas
TMF2014 Mobile Testing Workshop Michael Palotas
 
Phonegap presentation
Phonegap presentationPhonegap presentation
Phonegap presentation
 
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
[Srijan Wednesday Webinar] Mastering Mobile Test Automation with Appium
 
3x3: Speeding Up Mobile Releases
3x3: Speeding Up Mobile Releases3x3: Speeding Up Mobile Releases
3x3: Speeding Up Mobile Releases
 
7 Keys for Unattended Test AUtomation webinar deck
7 Keys for Unattended Test AUtomation webinar deck7 Keys for Unattended Test AUtomation webinar deck
7 Keys for Unattended Test AUtomation webinar deck
 
When Android Apps Go Evil
When Android Apps Go EvilWhen Android Apps Go Evil
When Android Apps Go Evil
 
Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...Who let the robot out? - Building high quality software with Continuous Integ...
Who let the robot out? - Building high quality software with Continuous Integ...
 
Cloud Testing Has Never Been Easier or More Accessible
Cloud Testing Has Never Been Easier or More AccessibleCloud Testing Has Never Been Easier or More Accessible
Cloud Testing Has Never Been Easier or More Accessible
 
FAKE (F# Make) & Automation
FAKE (F# Make) & AutomationFAKE (F# Make) & Automation
FAKE (F# Make) & Automation
 
Scaling Mobile Development
Scaling Mobile DevelopmentScaling Mobile Development
Scaling Mobile Development
 
Enterprise E-Commerce Webinar #3: Bringing Your API to Market
Enterprise E-Commerce Webinar #3: Bringing Your API to MarketEnterprise E-Commerce Webinar #3: Bringing Your API to Market
Enterprise E-Commerce Webinar #3: Bringing Your API to Market
 
Phonegap - An Overview
Phonegap - An OverviewPhonegap - An Overview
Phonegap - An Overview
 
Introduction to PhoneGap
Introduction to PhoneGapIntroduction to PhoneGap
Introduction to PhoneGap
 
Selenium Automation Like You’ve Never Seen!
Selenium Automation Like You’ve Never Seen!Selenium Automation Like You’ve Never Seen!
Selenium Automation Like You’ve Never Seen!
 
CI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift DeploymentCI CD Jenkins for Swift Deployment
CI CD Jenkins for Swift Deployment
 

Viewers also liked

Teerisuontie 7 ilmastostrategia 2010
Teerisuontie 7 ilmastostrategia 2010Teerisuontie 7 ilmastostrategia 2010
Teerisuontie 7 ilmastostrategia 2010
Sonja Vartiala
 

Viewers also liked (17)

Trabajo camstudio mamani2
Trabajo camstudio mamani2Trabajo camstudio mamani2
Trabajo camstudio mamani2
 
Analisis de una revista
Analisis de una revista Analisis de una revista
Analisis de una revista
 
Ciências 1
Ciências 1Ciências 1
Ciências 1
 
A princesa e a ervilha
A princesa e a ervilhaA princesa e a ervilha
A princesa e a ervilha
 
Teerisuontie 7 ilmastostrategia 2010
Teerisuontie 7 ilmastostrategia 2010Teerisuontie 7 ilmastostrategia 2010
Teerisuontie 7 ilmastostrategia 2010
 
Produtos
ProdutosProdutos
Produtos
 
Assembling Our Students' Kit and Caboodle
Assembling Our Students' Kit and CaboodleAssembling Our Students' Kit and Caboodle
Assembling Our Students' Kit and Caboodle
 
Las brujas de trasmoz
Las brujas de trasmozLas brujas de trasmoz
Las brujas de trasmoz
 
Spontaneous Professional Development
Spontaneous Professional DevelopmentSpontaneous Professional Development
Spontaneous Professional Development
 
Pp tema 3
Pp tema 3Pp tema 3
Pp tema 3
 
Origen de negocio
Origen de negocioOrigen de negocio
Origen de negocio
 
Conferencia marketing
Conferencia marketingConferencia marketing
Conferencia marketing
 
lectoescritura
lectoescrituralectoescritura
lectoescritura
 
#TweetNLearn: Creating your Digital Persona on Twitter
#TweetNLearn: Creating your Digital Persona on Twitter#TweetNLearn: Creating your Digital Persona on Twitter
#TweetNLearn: Creating your Digital Persona on Twitter
 
Madurez e inmadurez
Madurez e inmadurezMadurez e inmadurez
Madurez e inmadurez
 
006
006006
006
 
Projekt histori
Projekt historiProjekt histori
Projekt histori
 

Similar to Droidcon thessaloniki 2015

Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momenta
apps4allru
 
EclipseCon Europe 2012 Tabris Workshop
EclipseCon Europe 2012 Tabris WorkshopEclipseCon Europe 2012 Tabris Workshop
EclipseCon Europe 2012 Tabris Workshop
Holger Staudacher
 
summer file - Copy
summer file - Copysummer file - Copy
summer file - Copy
Rakesh Kumar
 

Similar to Droidcon thessaloniki 2015 (20)

Top Cordova Challenges and How to Tackle Them
Top Cordova Challenges and How to Tackle ThemTop Cordova Challenges and How to Tackle Them
Top Cordova Challenges and How to Tackle Them
 
10 Code Anti-Patterns to Avoid in Software Development.pdf
10 Code Anti-Patterns to Avoid in Software Development.pdf10 Code Anti-Patterns to Avoid in Software Development.pdf
10 Code Anti-Patterns to Avoid in Software Development.pdf
 
Build your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App EngineBuild your cross-platform service in a week with App Engine
Build your cross-platform service in a week with App Engine
 
State ofappdevelopment
State ofappdevelopmentState ofappdevelopment
State ofappdevelopment
 
Jose l ugia 6 wunderkinder, momenta
Jose l ugia  6 wunderkinder, momentaJose l ugia  6 wunderkinder, momenta
Jose l ugia 6 wunderkinder, momenta
 
Android development at mercari 2015
Android development at mercari 2015Android development at mercari 2015
Android development at mercari 2015
 
The Best Alternatives To The Ionic Framework.pdf
The Best Alternatives To The Ionic Framework.pdfThe Best Alternatives To The Ionic Framework.pdf
The Best Alternatives To The Ionic Framework.pdf
 
Seminar on android app development
Seminar on android app developmentSeminar on android app development
Seminar on android app development
 
Webinar on How to use MyAppConverter
Webinar on How to use  MyAppConverterWebinar on How to use  MyAppConverter
Webinar on How to use MyAppConverter
 
EclipseCon Europe 2012 Tabris Workshop
EclipseCon Europe 2012 Tabris WorkshopEclipseCon Europe 2012 Tabris Workshop
EclipseCon Europe 2012 Tabris Workshop
 
AliExpress’ Way to Microservices - microXchg 2017
AliExpress’ Way to Microservices  - microXchg 2017AliExpress’ Way to Microservices  - microXchg 2017
AliExpress’ Way to Microservices - microXchg 2017
 
Android programming-basics
Android programming-basicsAndroid programming-basics
Android programming-basics
 
The Experience To Build A Single App
The Experience To Build A Single AppThe Experience To Build A Single App
The Experience To Build A Single App
 
Six Strategies for Protecting Mobile Games Against Hackers, Crackers, and Cop...
Six Strategies for Protecting Mobile Games Against Hackers, Crackers, and Cop...Six Strategies for Protecting Mobile Games Against Hackers, Crackers, and Cop...
Six Strategies for Protecting Mobile Games Against Hackers, Crackers, and Cop...
 
iPhone App from concept to product
iPhone App from concept to productiPhone App from concept to product
iPhone App from concept to product
 
Android Application Development Using Java
Android Application Development Using JavaAndroid Application Development Using Java
Android Application Development Using Java
 
How open source is driving DevOps innovation: CloudOpen NA 2015
How open source is driving DevOps innovation: CloudOpen NA 2015How open source is driving DevOps innovation: CloudOpen NA 2015
How open source is driving DevOps innovation: CloudOpen NA 2015
 
Phonegap Development & Debugging
Phonegap Development & DebuggingPhonegap Development & Debugging
Phonegap Development & Debugging
 
summer file - Copy
summer file - Copysummer file - Copy
summer file - Copy
 
From hello world to goodbye code
From hello world to goodbye codeFrom hello world to goodbye code
From hello world to goodbye code
 

Recently uploaded

If this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New NigeriaIf this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New Nigeria
Kayode Fayemi
 
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptxChiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
raffaeleoman
 
Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac Folorunso
Kayode Fayemi
 

Recently uploaded (20)

ICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdfICT role in 21st century education and it's challenges.pdf
ICT role in 21st century education and it's challenges.pdf
 
lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.lONG QUESTION ANSWER PAKISTAN STUDIES10.
lONG QUESTION ANSWER PAKISTAN STUDIES10.
 
My Presentation "In Your Hands" by Halle Bailey
My Presentation "In Your Hands" by Halle BaileyMy Presentation "In Your Hands" by Halle Bailey
My Presentation "In Your Hands" by Halle Bailey
 
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 93 Noida Escorts >༒8448380779 Escort Service
 
ANCHORING SCRIPT FOR A CULTURAL EVENT.docx
ANCHORING SCRIPT FOR A CULTURAL EVENT.docxANCHORING SCRIPT FOR A CULTURAL EVENT.docx
ANCHORING SCRIPT FOR A CULTURAL EVENT.docx
 
Introduction to Prompt Engineering (Focusing on ChatGPT)
Introduction to Prompt Engineering (Focusing on ChatGPT)Introduction to Prompt Engineering (Focusing on ChatGPT)
Introduction to Prompt Engineering (Focusing on ChatGPT)
 
Causes of poverty in France presentation.pptx
Causes of poverty in France presentation.pptxCauses of poverty in France presentation.pptx
Causes of poverty in France presentation.pptx
 
Thirunelveli call girls Tamil escorts 7877702510
Thirunelveli call girls Tamil escorts 7877702510Thirunelveli call girls Tamil escorts 7877702510
Thirunelveli call girls Tamil escorts 7877702510
 
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptx
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptxMohammad_Alnahdi_Oral_Presentation_Assignment.pptx
Mohammad_Alnahdi_Oral_Presentation_Assignment.pptx
 
If this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New NigeriaIf this Giant Must Walk: A Manifesto for a New Nigeria
If this Giant Must Walk: A Manifesto for a New Nigeria
 
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 97 Noida Escorts >༒8448380779 Escort Service
 
SaaStr Workshop Wednesday w/ Lucas Price, Yardstick
SaaStr Workshop Wednesday w/ Lucas Price, YardstickSaaStr Workshop Wednesday w/ Lucas Price, Yardstick
SaaStr Workshop Wednesday w/ Lucas Price, Yardstick
 
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptxChiulli_Aurora_Oman_Raffaele_Beowulf.pptx
Chiulli_Aurora_Oman_Raffaele_Beowulf.pptx
 
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
Re-membering the Bard: Revisiting The Compleat Wrks of Wllm Shkspr (Abridged)...
 
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdfAWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
AWS Data Engineer Associate (DEA-C01) Exam Dumps 2024.pdf
 
VVIP Call Girls Nalasopara : 9892124323, Call Girls in Nalasopara Services
VVIP Call Girls Nalasopara : 9892124323, Call Girls in Nalasopara ServicesVVIP Call Girls Nalasopara : 9892124323, Call Girls in Nalasopara Services
VVIP Call Girls Nalasopara : 9892124323, Call Girls in Nalasopara Services
 
Uncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac FolorunsoUncommon Grace The Autobiography of Isaac Folorunso
Uncommon Grace The Autobiography of Isaac Folorunso
 
The workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdf
The workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdfThe workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdf
The workplace ecosystem of the future 24.4.2024 Fabritius_share ii.pdf
 
Air breathing and respiratory adaptations in diver animals
Air breathing and respiratory adaptations in diver animalsAir breathing and respiratory adaptations in diver animals
Air breathing and respiratory adaptations in diver animals
 
Report Writing Webinar Training
Report Writing Webinar TrainingReport Writing Webinar Training
Report Writing Webinar Training
 

Droidcon thessaloniki 2015

  • 1. 10-12 September 2015 droidcon Greece Thessaloniki App Fails and Retrospectives
  • 2. App Fails and Retrospectives #Session SDK Raymond Chenon google.com/+RaymondChenon
  • 3. Topics 1. Zalando 2. Our Google Play Release Panic 3. An Internationalization Problem 4. User Country Problem 5. App Deep Link 6. Choosing a library
  • 4. One of Europe's largest online fashion retailers 15 countries 3 fulfillment centers 16+ million active customers 2.2+ billion € revenue 2014 9.000+ employees
  • 5. About Zalando Tech ● Tech HQ in Berlin ● Four other tech offices, including Helsinki and Dublin ● +800 technologists ● Nearly everything produced in-house ● 135+ million visits per month (57% come from mobile devices)
  • 7. Special Thanks to “#guild-fuckup” Valentine Gogichashvili ● Head of Data Engineering ● Creator of “#guild-fuckup” on HipChat
  • 8. Our Google Play Store Release Panic
  • 9. Play Store Release: The Context After one week of testing and bugfixing: 100% Tests OK. QA team gave the go The new app version was staged rollout at 50% of our users right before a long weekend.
  • 10. Chronology ● 19h We noticed all app start will crash after an update. ● Issue escalated. Boss arrived . ● Call to Google. Sorry Google cannot revert for you. ○ hotfix ( identify the cause first ) ○ create a new .apk
  • 11.
  • 12. What Google says Note that rollbacks aren’t supported due to the app versioning requirements of the Android platform.If you need to rollback, consider launching a previous APK with a new version number.
  • 13. Understand App Versioning Make sure that each successive release of your application uses a greater versionCode value. NewVersion.versionCode < Rollback.versionCode versionCode 201 202 203
  • 14. Rollback Strategy versionCode (internal) 2.3 (Old version) 2.4 (New version) versionName ( String visible to user) 101 102100
  • 15. Rollback Strategy versionCode (internal) 2.3 (Old version) 2.4 (New version) 2.3.1 (Rollback) versionName ( String visible to user) 101 102100 Rollback is built from the code base of the Old Version
  • 16. Play Store Release: Lessons - Cause of the crash : One column was renamed in the app’s SQLite database - Always test an app upgrade - Have a rollback .apk ready - Never publish before weekends or public holidays - Limit the potential damage by starting the staged rollout
  • 17. Think Google Play is Hard !!
  • 18. Think Google Play is Hard !!
  • 19. How this would work on iOS - No staged rollout - No app rollback strategy - Expedited App Review ( Urgent Bug Fix ) takes minimum 19 h ( without rejection)
  • 20. When to celebrate a Release Celebrate on the release day ….
  • 21. When to celebrate a Release Celebrate on the release day OR after user reviews Celebrate a release one week after . It depends on the length of release cycle ( 6 week cycle )
  • 23. Internationalization: The Context We’re in 15 countries—but not Russia ● If the device is in Russian, Zalando’s app title was “Barcode scanner”
  • 24. Internationalization Why “Barcode Scanner?” ● We use libraries with resources: apklib, aar ● The apklib, aar library overrides our strings app_name library’s app_name en zalando barcode scanner de zalando barcode scanner ru barcode scanner
  • 25. Internationalization: Lang The locales (res/values-xx/strings.xml) are two- letter ISO 639-1 language 26^2 = 676 possibilities You don’t have to cover all languages
  • 26. 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
  • 27. Solution Res Configs http://tools.android.com/tech-docs/new-build- system/resource-shrinking android { defaultConfig { resConfigs "en", "fr", "de", "gr" // languages targeted } }
  • 28. A User Country Problem Source
  • 29. User Country: The Context Device locale is NOT the same as the country where the user lives ( country of delivery ) ● Example: My phone is in English, but I live in Greece
  • 30. Solution IP geolocation You can resolve with IP geolocation.
  • 31. Solution IP geolocation You can resolve with IP geolocation. But there are some edge cases , the user : - is roaming - lives in a country border
  • 32. Solution IP geolocation You can resolve with IP geolocation. But there are some edge cases , the user : - is roaming - lives in a country border - uses a VPN
  • 33. User Country: Solution 1 Mobile: you infer the user’s country by using the TelephonyManager import android.telephony.TelephonyManager; …. telephonyManager.getNetworkCountryIso();
  • 34. User Country: Solution 2 Or: let the user select his/her country
  • 36. App Deep Link App deep linking refers to a URL that points to a specific part of an app ( onboarding ) Use cases 1. Link Web to App 2. Link App to App 3. Push Notifications , Ad Campaigns , Referral Programs ...
  • 37. Example Deep Link zalando://SEARCH?query=short https://www.zalando.de/katalog/?q=short
  • 38. Error with deep links from developers The application syncs data at initial setup phase. Loading with a Splash screen. Splash is the entry point for all target Activities. Don’t forget to load the Splash.
  • 39. Error with deep links Take care how the deep links are used ( onboarding , home ) Create a good documentation. Deep Links are powerful API. Check how a third party would use them.
  • 41. Open source libraries Commercial products not always your choice ( boss, budget … ) Open source Developers choose the best tool
  • 42. Criteria 1. Is the API to your liking? 2. Maturity level 3. How well documented is the project? 4. Is the project "famous"?
  • 43. Select Your Library: Lessons What is best for X may not be for you. Do you own research. - Always benchmark the available libraries - Don’t let fanboy/girlism cloud your judgment Libraries memory use loading time ... Picasso Glide Ion Universal Image Loader Volley
  • 44. Refactoring: Some Best Practices DO 1. no behavior change (100% unit tests success) 2. measurable improvement—strengthen the argument for refactoring DON’T 1. refactor without a set of tests in place
  • 45. from Roboguice to Dagger 2 The library of Dependency Injection was good at that time. Now something new came out. It made its proof. Cannot be incremental refactoring . Must be done in one Go.
  • 46. Arguments to switch from Roboguice to Dagger 2 Roboguice uses reflection ( runtime ) Dagger 2 is based annotation processing ( compile time ) Performance-wise : Dagger 2 is much better than Roboguice
  • 47. Big Refactoring: Lessons ● The better you prepare for changes, the fewer problems afterward ● Make sure everything compiles.
  • 48. will take a photo in Greece Raymond Chenon google.com/+RaymondChenon twitter.com/raychenon raychenon.com Thank you! droidcon Greece Thessaloniki
  • 49. About Zalando Tech Blog: tech.zalando.com GitHub: github.com/zalando Twitter: @ZalandoTech Instagram: zalandotech Jobs: http://tech.zalando.com/jobs Refer: raymond.chenon@zalando.de