iPhones unterstützen, die wir nicht besitzen
Unser Team verfügt über neue iPhones. Unsere Nutzer hingegen nicht. Viele der Menschen, die an einem beliebigen Tag eine unserer Apps öffnen, nutzen ein Gerät, das drei, vier oder manchmal sogar fünf Jahre alt ist. Würden wir nur mit den Geräten testen, die wir selbst in der Tasche haben, würden wir unsere Produkte für die falsche Zielgruppe veröffentlichen.
In einem kleinen Studio vergisst man das leicht. Wenn man den ganzen Tag auf schneller Hardware entwickelt, wird „schnell“ zur Normalität, und alles, was auf einem älteren Smartphone gerade noch in Ordnung ist, wird gar nicht mehr als Problem wahrgenommen. Die einzige zuverlässige Lösung, die wir gefunden haben, besteht darin, das ältere Smartphone jedes Mal physisch vor uns zu legen.
Unsere Referenzflotte
Wir unterhalten einen kleinen Bestand an physischen Geräten – jeweils ein iPhone aus jedem der letzten fünf Jahre sowie das derzeit günstigste iPad-Modell. Jede Version durchläuft diesen Gerätebestand, bevor sie die Qualitätssicherung verlässt, und nicht nur die neueste Hardware, die auf den Schreibtischen der Entwickler steht. Das fünf Jahre alte Smartphone deckt Probleme auf, die kein Simulator erkennen kann.
Die Prozedur ist alles andere als glamourös. Den Build installieren, einen Kaltstart durchführen, durch die längste Liste in der App scrollen, den ressourcenintensivsten Bildschirm öffnen, das Gerät drehen, die App in den Hintergrund verschieben und wieder zurückkehren. Auf dem iPad testen wir außerdem den Split-View-Modus, denn ein billiges iPad, auf dem zwei Apps nebeneinander laufen, ist ein ganz anderes Gerät als ein neues, auf dem nur eine App läuft. Das alles dauert nicht lange, und es ist der Teil der Release-Woche, den wir am wenigsten auslassen möchten.
Dieser Ansatz gilt auch über das iPhone hinaus. Unsere Android-Apps werden auf bescheidener Hardware getestet, nicht nur auf Flaggschiff-Smartphones, und unsere iPhone- und iPad-Apps laufen auch auf Mac-Geräten mit Apple-Silicon, wo ein Layout, das auf einem Smartphone gut aussah, plötzlich in einem in der Größe anpassbaren Fenster angezeigt werden kann.
Was wir gelernt haben
Animationen, die auf dem neuesten Chip flüssig wirken, erscheinen zwei Generationen später ruckelig. Einstellungen zur Bilddekodierung, die auf einem Pro Max nicht wahrnehmbar sind, können den Hauptthread auf einem Basis-SE zum Stillstand bringen. Speicherressourcen, die auf Geräten mit 8 GB großzügig bemessen sind, sind auf Geräten mit 4 GB knapp bemessen. Nichts davon tritt als Fehler zutage – es zeigt sich vielmehr in einem subtilen Eindruck, dass sich die App auf günstigeren Smartphones schlechter anfühlt, und genau diesen Eindruck wollen wir nicht hinterlassen.
Was wir anfangs falsch gemacht haben, war, das alte Smartphone als abschließende Überprüfung zu betrachten, anstatt es als Input für das Design zu nutzen. Wir haben einen Bildschirm entwickelt, ihn auf neuer Hardware optimiert und erst dann festgestellt, dass er auf dem älteren Gerät ruckelte – woraufhin die Korrektur bedeutete, dass wir etwas überarbeiten mussten, das wir bereits als fertiggestellt betrachtet hatten. Jetzt wird das ältere Smartphone bereits ab dem ersten Prototyp mit einbezogen. Wenn eine Animation oder eine Liste dort nicht einwandfrei läuft, ändern wir das Design und nicht nur den Code.
Es gibt Kompromisse. Manche Effekte lohnen sich einfach nicht, wenn sie nur auf der neuesten Hardware gut aussehen, daher verzichten wir darauf. Das führt gelegentlich dazu, dass eine App auf einem Screenshot etwas schlichter wirkt als die eines Mitbewerbers. Damit können wir gut leben.
Unser Mindestbetrag
Zwei Hauptversionen iOS zurück – und zwar für jede Zydeno-App. Apples Tempo bei der Ausmusterung von Funktionen ist so hoch, dass eine noch größere Rückwärtskompatibilität die Pflege des Codes erschweren würde; zwei Versionen zurück zu gehen bedeutet jedoch den Unterschied zwischen einer guten Versorgung der meisten unserer Nutzer und einer Versorgung, die sich nur auf diejenigen beschränkt, die die neueste Software nutzen.
An dieser Linie festzuhalten bedeutet, dass wir gelegentlich warten müssen, bevor wir eine neue Systemfunktion übernehmen, oder dass wir sie so entwickeln, dass die App auch ohne sie weiterhin funktioniert. Das ist ein echter Aufwand an Entwicklungszeit. Wir nehmen diesen Aufwand lieber in Kauf, als jemandem zu sagen, dass sein Smartphone, das einwandfrei funktioniert, für uns nicht mehr gut genug ist.
Das billige Handy ist der ehrliche Kritiker. Wir haben es nicht ohne Grund auf dem Schreibtisch stehen.