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

Post on 13-Jul-2020

1 views 0 download

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

Surviving ASuccessfulApp Launch

482.000 Downloads

iOS & Android 02.07.- 15.10.2013

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

No REST APINo Mobile Apps

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

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

REST API Bootstrapping

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

Now we have an API

but still no apps?!

Android & iOS Apps

• No know-how available at willhaben.at

• Building internal know-how takes time

• Teaming up with Tailored Apps

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

Android Prototype

Android Prototype

Mikeis speaking

• 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.

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.

The Search & Filter Case

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

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

• Android Annotations

• Robospice (SpringAndroid/Gson)

• Universal Image Loader

• EndlessAdapter

• GooglePlayServices for location

• Ant, later Gradle

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

The Power of Open Source

Device Fragmentation

• 3625 supported devices

• Supported API levels

‣ 8 to 18

‣ 11 Levels ~ 2.2-4.3

• Real problems cause : ~ 4

Sony Xperia 2.x

Which button to press?!

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.

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

Caching

• Caching of network request

• HttpCache might be faulty on some devices.

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

Screen Size

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.

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 :-)

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

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

The FirstLaunchParty

12 Weeks Later

Installation History

Android Versions

Device Distribution

Tablet Distribution

Still Awake?!

Questions & Answers

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