Eine Browser-Demo für jedes Produkt — und eine vierstufige Leiter, die sie ehrlich hält
Elf Produkte, elf Demos, und der unbequeme Teil: zwei davon führen den eigenen Quellcode des Produkts aus, und zu sagen welche zwei, ist der ganze Punkt.
Technische Notiz · · 7 Min. Lesezeit
Zu jedem Produkt in diesem Katalog gibt es etwas, das Sie in diesem Browser ausführen können — ohne Installation, ohne Konto. Das ist der stärkste Satz auf dieser Website und derjenige, der am ehesten unbemerkt aufhört zu stimmen: ein Produkt hinzuzufügen dauert einen Nachmittag, seine Demo zu bauen nicht. Also pflegt diesen Satz niemand von Hand. Ein Test zählt die Produkte, zählt die gebauten Demos und lässt den Build scheitern, wenn ein Produkt ohne Demo ankommt. In der Woche, in der die letzten drei Produkte landeten, ist er dreimal gescheitert, bevor er bestanden hat.
Der schwierige Teil war nie, sie zu bauen. Er war, sie zu beschriften.
Das Wort „spielbar“ trug zwei verschiedene Behauptungen
Die erste Beschriftung lautete Spielbar, Interaktiver Prototyp und Geführte Demo. Das sieht aus wie eine Skala der Interaktivität — und genau das ist es, weshalb sie falsch war. Die Frage, die ein Besucher tatsächlich stellt, ist nicht „kann ich hier klicken“. Sie lautet: „ist irgendetwas davon das echte Produkt“. Spielbar stand über den Demos, die den eigenen Quellcode des Produkts ausführen, und über derjenigen, die seine ausgelieferten Tonaufnahmen abspielt — und das sind keineswegs dieselben Behauptungen.
Es gibt jetzt vier Stufen, und jede Demo nennt die, auf der sie steht:
- Echter Produktcode — der eigene Quellcode des Produkts, unverändert übernommen, mit dem SHA-256 der Kopie daneben festgehalten.
- Echte Produktmaterialien — das ausgelieferte Material des Produkts selbst: Aufnahmen, Sprites, Inhaltsdateien, die eine hier geschriebene Spielschleife antreiben.
- Interaktive Nachbildung — eine hier neu gebaute Mechanik, die überall den echten Inhalt des Produkts verwendet, wo es welchen hat.
- Geführte Demo — ein Durchgang. Es wird nichts berechnet, und das steht da.
„Echter Produktcode“ bedeutet gerade deshalb etwas, weil „Geführte Demo“ ein Produkt weiter ehrlich verwendet wird. Heute stehen zwei Demos auf der obersten Stufe. Diese Zahl wird aus dem Demo-Katalog abgeleitet statt in einen Satz geschrieben, aus demselben Grund wie jede andere Zahl hier.
Was ein Hash tatsächlich beweist
Eine Demo auf der obersten Stufe übernimmt den Quellcode des Produkts unverändert in dieses Repository und hält seinen Hash fest. Ein Test berechnet den Hash bei jedem Build neu. Bearbeitet jemand die übernommene Kopie, damit eine Demo auf dem Telefon besser läuft, scheitert der Build — genau der Schutz, für den sie gebaut wurde.
Am 30. September hat ZUPI ein neues Spiel in den App Store gebracht. Ein anderes Spiel: ein Pulse Shield über einem Pulse Core, panzerplattierte Bedrohungen, alle fünf Level ein Warden. Das Spiel, dessen Engine hier übernommen war, war das vorherige — ein roter Luftballon unter einem Regenschirm — und die Hash-Prüfung hat die ganze Zeit bei jedem einzelnen Build gehalten, weil die Kopie weiterhin eine treue Kopie des Repositorys war, aus dem sie kam.
Ein Hash beweist, dass eine Kopie dem Repository treu ist, aus dem sie kommt. Er kann nicht beweisen, dass dieses Repository noch das Produkt ist.
Drei Tage lang hat diese Website das falsche Spiel ausgeführt, unter einem Satz, der lautete: „dieselbe Engine, die die iOS- und Android-Builds verwenden“. Nichts war kaputt. Jede Prüfung war grün. Die übernommene Engine ist gelöscht, und ZUPIs Demo ist eine Interaktive Nachbildung, aus dem Store-Eintrag geschrieben und als solche beschriftet — eine schwächere Behauptung, und eine wahre.
Die Stufe, die interessanter ist als die oberste
Forgotten Town ist ein Flutter-und-Flame-Spiel. Ein Build davon passt nicht in ein Gewicht, das diese Website für eine Webseite akzeptieren würde, also ist seine Merge-Schleife für den Browser geschrieben. Alles, worauf diese Schleife arbeitet, gehört dem Spiel: das Brett, die Kette, die Sprites, und der erste Auftrag mit dem Gegenstand, den er verlangt, und den Münzen, die er zahlt — gelesen aus der Inhaltsdatei, die der ausgelieferte Build lädt, statt abgetippt.
Pivumos Demo spielt die eigenen Sprachdateien der App, die ausgelieferten. Die Demo von Swarm Kingdoms spricht die eigenen Textzeilen des Spiels, in welcher seiner zehn Sprachen Sie auch wählen, und fällt genau so auf Englisch zurück, wie es die Lokalisierungsfunktion des Spiels selbst tut — denn eine Demo, die einen rohen Schlüssel anzeigt, wo das Spiel Englisch anzeigt, würde einen Fehler zeigen, den das Produkt nicht hat. Eine für diese Website geschriebene Übersetzung wäre eine schlechtere Aussage über das Produkt als die eigenen Worte des Produkts.
Ein Bot spielt vor jedem Deploy alle durch
Eine Demo, die unbemerkt aufhört, zu Ende zu laufen, ist schlimmer als keine Demo. Also wird jede einzelne vor einem Deployment in einem echten Browser gefahren: starten, interagieren, zu einem Ergebnis kommen, berichten. Das läuft in mehreren Sprachen, weil eine Demo in einer kaputtgehen kann und in den anderen nicht.
Er hat sich zweimal über sich selbst geirrt, und beide Male saß die Korrektur im Prüfgerüst. Einmal hat er die Seite gescrollt statt zu spielen, weil die Taste, die er drückte, nie das fokussierte Canvas erreichte. Einmal hat er jede Runde eines Spiels verloren, das er hätte gewinnen müssen, und die kopflose Fassung derselben Regeln zeigte, warum: er schaute nicht auf den Bildschirm. Eine Niederlage als flackernden Test abzuschreiben, wäre der billige Weg gewesen und hätte einen Bot, der nicht spielen kann, als Stellvertreter für einen Besucher stehen lassen, der es kann.
Was das kostet
Elf Demos sind eine echte Steuer darauf, ein Produkt hinzuzufügen, und sie wird bewusst gezahlt. Die Alternative ist eine Seite voller Screenshots und eine Behauptung — und ein Studio, das von einem Fremden verlangt, elf Behauptungen über Software zu glauben, die er nicht öffnen kann, muss jeder einzelnen geglaubt werden. Eine Demo ist das einzige Argument, dem man nicht glauben muss.