Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch...

47
Surviving A Successful App Launch

Transcript of Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch...

Page 1: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Surviving ASuccessfulApp Launch

Page 2: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

482.000 Downloads

iOS & Android 02.07.- 15.10.2013

Page 3: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Launching July 2013?!

• Using Java/JSP-centric platform

• Complex code base

• Lots of business logic in JSPs & taglibs

• No “out-of-the-box” REST API

Page 4: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

No REST APINo Mobile Apps

Page 5: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

The REST API

• Retro-fitted below the UI module

• Using Jersey REST Service stack

• Exposes simplified business logic

• Mixture of refactoring and rewriting

• Two months development time for v1

Page 6: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

REST API Guidelines

• Smart API and stupid apps

• Human-browsable HTML from REST API

• Mobile apps never builds a URL

• REST API versioning and bootstrapping

• Custom HTTP Headers

Page 7: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

REST API Bootstrapping

Page 8: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Custom HTTP Headers• Custom HTTP headers for each request

‣ X-WH-Application-Token - licensees

‣ X-WH-User-Token - credentials

‣ X-WH-Client - mobile app version

‣ X-WH-Security-Version - security

• Transport client-side state (e.g. credentials)

• Keep track of the mobile app usage on the server side

Page 9: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Now we have an API

but still no apps?!

Page 10: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Android & iOS Apps

• No know-how available at willhaben.at

• Building internal know-how takes time

• Teaming up with Tailored Apps

Page 11: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

One Day Workshop

• Teaming up in a meeting room

• Writing Android & iOS prototype

• Use the shiny new REST API v1

• Prototype can be installed on a real phone

• Lots of food, drinks and coffee

Page 12: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using
Page 13: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using
Page 14: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using
Page 15: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Android Prototype

Page 16: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Android Prototype

Page 17: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Mikeis speaking

Page 18: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

• Product Management and UX Designer -> Sketches, Mockups, Screens

• Product Development got order to create API to offer features of Willhaben website.

• App Developer between PM and PD working with Mockups/Screens and API.

• Weekly iterations to give and get feedback on UI and API.

Page 19: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using
Page 20: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Test Phase• Using Alpha channel of the Google Play Store to

distribute alpha versions internally.

• Friendly users got a link to a APK for beta testing. Easier than Beta channel.

• Barrier 1: Google+ account required.

• Barrier 2: Community not visible to public. User cannot opt-in. Invite to Community necessary.

• Barrier 3: Many steps required: Accept invitation. Follow link. Accept testing. Goto Play store. Download.

Page 21: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

The Search & Filter Case

Page 22: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

The Search & Filter Case

• Product management wanted a simple search and filter interface. "change a few filter values and start search"

• Product development assumed that the API should provide the same functionality as the existing web platform

Page 23: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using
Page 24: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Technical Components• ActionbarSherlock (who doesn't use it?)

• Android Annotations

• Robospice (SpringAndroid/Gson)

• Universal Image Loader

• EndlessAdapter

• GooglePlayServices for location

• Ant, later Gradle

Page 25: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

The Power of Open Source

• Memory Leak found before final release

• Eclipse Memory Analyzer points to RoboSpice listener

• No solution on the mailing list

• Forked Robospice and removed listener

• Tests showed the memory leak was gone

• Ship it

Page 26: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

The Power of Open Source

Page 27: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Device Fragmentation

• 3625 supported devices

• Supported API levels

‣ 8 to 18

‣ 11 Levels ~ 2.2-4.3

• Real problems cause : ~ 4

Page 28: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Sony Xperia 2.x

Which button to press?!

Page 29: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Sony Xperia 2.x

• TextViews displayed as buttons on start screen

• The styles of the TextView was set to a Holo-based style.

• No Click listener for TextView only on Layout.

• The users were confused - and it looked very ugly.

Page 30: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Simple Date Format?!• "yyyy-MM-dd'T'HH:mm:ssZZ"

• 2013-07-01T0018:24+0300 (GT-N7100 Build/JZO54K)

• 2013-08-29T08:25:0026+0200 (LT30p Build/9.1.A.1.141)

• 2013-08-08T09:0047:33+0200 (ZTE BLADE III Build/IMM76D)

• ????-??-??T??:??+???? (RC0709B Build/IMM76D) Q-Pad

Page 31: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Caching

• Caching of network request

• HttpCache might be faulty on some devices.

• A HTTP status code of 304 caused Robospice to return null objects

Page 32: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Screen Size

Page 33: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Screen Size• The only problem is the support of 240dp

devices - still 10%.

• You can only display a very limited amount of information.

• Designers never think about them. "All devices are 320dp". Maybe they think about "landscape".

• Developer easily forgets them, too. Rarely has a developer a device this small.

Page 34: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using
Page 35: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using
Page 36: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

How (Not) To Soft Launch

• Development opts for Soft Launch

‣ Enough time to fix critical problems

• Product Management opts for Hard Launch

‣ Becoming a Top App is mandatory

• Product Management won :-)

Page 37: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

How (Not) To Soft Launch

• Allocated additional time for DEV & OPS

‣ 12 hour performance tests with maximum load

‣ Re-tested system failure and recovery scenarios

‣ Reviewed system monitoring

Page 38: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Hard Launch - First Week

• Hundreds of exceptions in the server log file each and every day

‣ Tons of user will find any dormant bug

‣ First aid patches to work around bugs in the mobile apps

• Releasing twice a day

• No server crashes - no downtime

Page 39: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

The FirstLaunchParty

Page 40: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

12 Weeks Later

Page 41: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Installation History

Page 42: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Android Versions

Page 43: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Device Distribution

Page 44: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Tablet Distribution

Page 45: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Still Awake?!

Page 46: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

Questions & Answers

Page 47: Surviving A Successful App Launchpeople.apache.org/.../surving-a-successful-app-launch.pdfApp Launch 482.000 Downloads iOS & Android 02.07.- 15.10.2013 Launching July 2013?! • Using

willhaben.at

• Leading Austrian classified ads provider

• 2,0 million ads online

• 3,5 million unique clients

• 15,0 million visits/month

• We are looking for smart developers