Staged Rollout bei Mobile Apps – Warum man es machen sollte.

picco/ August 5, 2014/ Allgemein, Development/ 0Kommentare

Warum man vor großen Releases einen “Stage Rollout” forcieren sollte.
Ein Erfahrungsbericht aus meinem Arbeits-Alltag als Android Developer bei AutoScout24.

Staged Rollout, was ist das?

Mit einem Staged Rollout ist gemeint, dass man seine neue Version nur in kleineren Häppchen verteilt um dem Schlimmsten was bei einem Release passieren kann, erst gar keine Chance gibt vor zu kommen… nämlich Crashes!

Ein Staged Rollout passiert, wie der Name schon vermuten lässt, in verschiedenen Stages.
Zu Beginn erhält nur ein sehr niedriger einstelliger %-Anteil der User die neue Version der Applikation.
Mit den Crash-Berichten die daraufhin in die entsprechenden Logs hinein flattern, kann man dann arbeiten und die schwerwiegensten Bugs und Abstürze fixen.

Natürlich hat man mit 2-3% der User, nicht alle möglichen Probleme und Fälle abgefangen, aber man legt schon mal ein gesundes und starkes Fundament,
wenn man sieht, dass die Applikation keine größeren Issues erzeugt. Und falls doch, hat man das Übel doch noch minimal gehalten, da es “nur” 2-3% der User betrifft und nicht 100%.

Sobald man dann aussagekräftige Werte vorliegen hat mit denen man arbeiten kann, macht man mit Schritt 2 weiter: Die Userbase erhöhen und die Crashlogs, Bewertungen im Play Store und Feedback-Emails beobachten und re- und agieren.

Randinfos zu unserem Projekt: Anroid-Applikation von AutoScout24.

Je größer eine Applikation ist, umso größer ist auch die Zahl der Menschen, die man mit einer “kaputten” Version verärgert und sie damit vielleicht der Konkurenz in die Arme leitet. Im Falle von AutoScout24 wären das eine große Menge Nutzer, die wir im Monat mit unserer Android-Applikation beglücken. Ein paar Millionen Detail-Seiten-Aufrufe im Schnitt an einem Sonntag.

Natürlich testen wir unsere App durchgehend. Primär automatisiert aber auch manuell. Dennoch ist eine Test-Umgebung nicht das selbe, wie die freie Wildbahn.

Die Nutzer, vor allem bei Android, haben die Wahl zwischen 6000+ VERSCHIEDENEN Smartphone-Modellen auf denen unsere Applikation laufen soll, muss und es auch tut. Jedes dieser 6000+ Geräte, hat seine speziellen Probleme und für viele Themen auch durchaus Eigenlösungen, die von den Firmen die das Handy produziert haben eingepflegt wurden.

Da ist es nur logisch, dass wir nicht alle Geräte durchtesten und auch nicht alle Corner-Cases abfangen können. Genau dafür haben wir uns entschieden, das Major-Update von Version 2.7.7 auf 3.0.0 mit dieser hier erklärten Methode zu releasen.

Da die Version 3.0.0 auf einer komplett neuen Codebasis aufgebaut wurde, sind die potentiellen Fehlerquellen reichlich vorhanden. Alle Kinderkrankheiten die in der vorherigen Version in vielen Update-Iterarionen gefixt wurden, können unter Umständen wieder auftreten.

Learnings aus der ersten Phase:

Während der Entwicklung haben wir sehr viel Wert auf Testing gelegt. Manuell, automatisiert und auch in einer Firmen-internen Beta haben wir die App auf Herz und Nieren getestet (Dazu später mehr, in einem weiteren Beitrag). Dennoch denkt man damit einfach nicht alle Fälle ab.

So auch geschehen mit unserer 3.0.0 Version die wir zu Beginn erst 1% zur Verfügung gestellt haben. Kaum war die App für die entsprechenden Android-User freigeschaltet, schon erschienen die ersten Exceptions und Benachrichtigungen in unser HockeyApp (Crash-Plattform mit entsprechendem Framework für Android).

Wie schon geahnt, waren es Kleinigkeiten die wir dann auch ziemlich zügig gefixt haben. Auf Grund der geringen Problembehaftung der Bugs haben wir den Wert der Userbase erhöht (im Google Play Store) auf 5%um aussagekräftigere Werte zu bekommen. 5% sind immer noch eine kleine Userbase.

Intern im Team haben wir beschlossen, dass dies auch der letzte Schritt sein wird, bevor wir mit 100% Live gehen.
5 Tage blieben wir auf 5% und obwohl wir uns sehr sicher waren, dass keine weiteren Entwickler-Bugs (Out of Memory Errors mal ausgenommen) auftauchen werden, erblickten dennoch zwei oder drei NullPointerExceptions (Abstürze) das Tageslicht 🙂

Diese Fehler haben wir behoben. Kleine visuelle Anpassungen wurden getätigt. Versionscode wurde angehoben auf 3.0.1 und der finale Schritt wurde eingeleitet…

Und jetzt gehts Live…

Und schon waren wir Live! Auch wenn alle Vorbereitungen super verliefen und sich keiner unserer Albträume bewahrheitet hat, waren wir doch sehr angespannt zu sehen was passiert, wenn 100% der User diese Version bekommen.
Am Ende des ersten Tages, hatten wir circa 200 Crashes!

Erst am nächsten Tag zeigte sich dass von den 200 Crashes circa 60 durch Mitarbeiter entstanden sind, die ihre alte Beta nicht gelöscht hatten 😉 Puh, Glück gehabt! Herzschlag normalisierte sich nach dieser Erkenntnis wieder.

Die restlichen 140 Crashes waren Out-Of-Memory-Errors, die leider daher kommen dass es durchaus auch schwachbrüstige Smartphones in den Händen unserer User gibt und nicht nur Galaxy S4’s und HTC One’s. Dank eines schnellen Fixes, konnten wir diese Anzahl an Abstürzen auch aus der Welt schaffen und haben unser angestrebtes Ziel von unter 100 Crashes / Tag erreicht und erfüllt!

2 Monate später…

Inzwischen sind schon circa 2 Monate vorbei und wir haben im Schnitt circa 80 Crashes pro Tag, bei einer Adoption-Rate von 90% (heißt: 90% unserer Nutzer haben geupdatet). Ein sehr guter Wert dafür, dass diese Version komplett von Scratch an neu geschrieben worden ist. Jede einzelne Zeile Code dieser APK wurde neu erzeugt. Jede einzelne Klasse dieses Projektes wurde neu erstellt und mit Leben befüllt.

Der Staged Rollout hat sich vollkommen gelohnt. Der erwartete Gewinn aus dieser Aktion ist eingetroffen und wir konnten den Nutzern gleich zu Anbeginn der neuen Version, eine sehr stabile Basis bieten und vor allem haben wir uns selbst damit was gutes getan. Beim ausrollen auf 100%, waren wir beruhigt und wussten dass die Arbeit von 9 Monaten keine schwerwiegende Probleme verursacht.

“Jeder Zeit wieder…” ist unser Fazit zu diesem Release-Vorgang. Und dies werden wir auch weiterhin so beibehalten, sobald wir größere Versionen releasen.

Habt ihr auch Erfahrungen mit Staged Rollouts sammeln können oder habt ihr so etwas schonmal gemacht?
Über Comments und Shares freue ich mich natürlich sehr!
Stay tuned, Ilias

Hinterlasse eine Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Sie sollten das verwenden HTML Schlagworte und Attribute: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>
*
*