← Zurück zur App

Technik

Sechsundzwanzig Verfahren, eine App

Ein staatsbürgerliches Lernwerkzeug bauen, wenn der Inhalt sechsundzwanzig Verwaltungen gehört

0. Woher dieser Text kommt

Ich bin kein Schweizer. Ich bin 2014 nach Morges gezogen, und 2026 habe ich das ordentliche Einbürgerungsverfahren begonnen, das im Kanton Waadt mit einem schriftlichen Wissenstest endet, den die Wohngemeinde organisiert. Ich habe diese App gebaut, weil ich sie brauchte, und ich habe weitergebaut, weil die schwierigsten Teile nicht die waren, die ich erwartet hatte. Im August 2026 habe ich diese Prüfung selbst abgelegt und mit der vollen Punktzahl bestanden: 48 von 48. An jenem Morgen sassen im Raum mehrere andere Kandidatinnen und Kandidaten, die die App benutzten.

Dies ist ein technischer Text, keine Produktpräsentation. Er handelt davon, was passiert, wenn das, was man ausliefert, gar keine Software ist: es ist eine Behauptung über Tatsachen, die jemand anderem gehören und sich ändern, ohne dass es einem jemand sagt.

1. Das Problem, in einer Zeile

Die Schweiz hat keinen nationalen Einbürgerungstest. Das Bundesrecht schreibt keinen vor, und jeder der sechsundzwanzig Kantone bestimmt sein eigenes Format. Manche veröffentlichen einen vollständigen Fragenkatalog. Manche veröffentlichen Lernmaterial und keine Fragen. Manche prüfen mündlich und veröffentlichen gar nichts. Und in einem Kanton ist die Prüfung nicht kantonal, sondern kommunal: welche Fragen jemand erhält, hängt davon ab, in welcher von dreihundert Gemeinden er wohnt.

Das naive Modell, eine Fragenbank und eine Prüfung und eine App, fällt also in den ersten fünf Minuten auseinander. Die tatsächliche Form sind sechsundzwanzig verschiedene Verfahren, und innerhalb eines davon noch einmal dreihundert.

Heute trägt die App 13'497 Prüfungsfragen für alle sechsundzwanzig Kantone, davon 9'565 kommunale: Fragen, die nur für eine einzige Gemeinde existieren und für alle anderen nutzlos sind. Die Gemeinde zu wählen ist deshalb keine Einstellung. Es ist die Abfrage.

2. Warum das Schwierige nicht die App ist

Eine App mit Multiple-Choice-Fragen ist ein Wochenende. Die Arbeit liegt überall sonst: Material zu beschaffen, das sechsundzwanzig Verwaltungen in unterschiedlichen Formaten, in drei Sprachen und in ihrem eigenen Rhythmus veröffentlichen; zu entscheiden, was jedes einzelne Stück tatsächlich ist; und das Ganze monatelang ehrlich zu halten, während niemand einem sagt, dass sich etwas bewegt hat.

Vierzehn Kantone haben heute ihren eigenen Katalog in der App. Die übrigen zwölf erhalten die eidgenössische Ebene, zur Laufzeit von einem Kanton geliehen, der eine veröffentlicht, und die App sagt das an der Frage selbst. Dieser Unterschied, dies ist das Material Ihres Kantons gegenüber dies ist eidgenössisches Material, das wir Ihnen zeigen, weil Ihr Kanton keines veröffentlicht, ist keine Fussnote. Er ist der Unterschied zwischen einem Lernwerkzeug und einem irreführenden Werkzeug.

3. Die Inhaltskette, und was eine Frage mit sich trägt

Jede Frage in der App trägt ihre eigene Herkunft: woher sie stammt, wie sie gewonnen wurde, an welchem Datum, und gegen welchen Fingerabdruck der Quelle. Die Aufteilung sagt ehrlich, wie ungleich die Landschaft ist:

MethodeFragen
Live-Schnittstelle des Kantons9'693
Textextraktion aus veröffentlichten PDF1'525
Maschinelle Übersetzung, als inoffiziell markiert522
Von Hand verfasst aus offiziellem veröffentlichtem Material890
Manuell kuratiert28
Geprüfte manuelle Transkription290
Offizielles E-Learning-Material126
Andere deklarierte Formen423

Keine Frage in der App ist ohne Herkunftsblock. Das war von Anfang an eine Entwurfsbedingung, und es ist der Grund, weshalb der Rest dieses Dokuments überhaupt möglich ist.

Wo kein Katalog existiert und die Fragen geschrieben werden müssen, ist das keine freie Komposition. Jede verfasste Frage trägt einen Anker: eine wörtlich übernommene Zeichenfolge aus einem offiziellen veröffentlichten Dokument. Beim Erzeugen sucht der Generator diese Zeichenfolge im Quellkorpus, und bei drei Kantonen bricht er hart ab, wenn der Anker nicht gefunden wird. Keine Ausgabe, keine Veröffentlichung. Eine Frage, die nicht auf einen Satz in einem offiziellen Dokument zeigen kann, geht nicht raus.

Dieselbe Disziplin gilt für Gewissheit. Die Prüfungsparameter, wie viele Fragen und welche Bestehensgrenze und welche Dauer, werden nicht behauptet. Jeder trägt eine Sicherheitsstufe: offiziell, geschätzt, vom Anbieter angegeben, nicht veröffentlicht, nicht anwendbar. Über alle kantonalen Modelle hinweg sind neunundvierzig dieser Parameter als nicht veröffentlicht markiert, weil der Kanton sie tatsächlich nicht veröffentlicht. Das ehrlich zu zeigen hat sich bei institutionellen Lesern als überzeugender erwiesen als eine sauber aussehende Zahl.

4. Die nächtliche Überwachung, und die Prüfung, die niemand schreibt

Quellen bewegen sich. Ein Kanton veröffentlicht ein PDF neu, nummeriert eine Serie um, korrigiert eine Antwort. Niemand schickt eine Benachrichtigung.

Bei dreizehn Kantonen wird die veröffentlichte Quelle deshalb jede Nacht von einem geplanten Auftrag geprüft, zu versetzten Zeiten. Jeder Lauf holt die Quelle, nimmt ihren Fingerabdruck, vergleicht ihn mit der gespeicherten Referenz und endet in einem von fünf Ergebnissen: unverändert, verändert, Quelle nicht erreichbar, Neuerzeugung fehlgeschlagen, oder Datenbankschreibung fehlgeschlagen. Eine vorübergehende Netzstörung wird bewusst von einem echten Fehler unterschieden, denn eine wacklige Verbindung wie eine kaputte Quelle zu behandeln erzeugt Alarme, die niemand liest.

Jeder Lauf hängt eine signierte Zeile an ein Journal auf einem separaten Zweig an, das nur ergänzt wird: Zeitstempel, Fingerabdruck der Quelle, HTTP-Status, Dauer des Abrufs und die Revision des ausgeführten Codes. Reproduzierbarkeit ist keine Behauptung, sondern ein Register.

Aber die Prüfung, auf die ich eine Gutachterin hinweisen würde, ist eine andere, und sie existiert wegen eines Versagens. Der Detektor vergleicht vorgelagerte Quellen mit einer gespeicherten Referenz. Er stellt nie die eine Frage, die nach der Veröffentlichung zählt: entspricht das, was wir ausliefern, noch dem, was wir freigegeben haben? Es entsprach nicht, und ein Kanton lieferte zweiundsechzig Fragen aus, deren Korrektur sechs Wochen zuvor freigegeben und nie veröffentlicht worden war. Lautlos. Nichts in der Kette war dafür gebaut, das zu bemerken.

Deshalb läuft nun bei jedem Zyklus ein zweiter Vergleich, auch und gerade in den Zyklen, in denen sich nichts geändert hat. Er berechnet den Inhaltsfingerabdruck aus Fragetext, Antworten und richtiger Antwort neu, statt dem gespeicherten Stempel zu vertrauen, sodass ein veralteter Stempel als Abweichung erscheint, statt eine zu verdecken. Ein Kanton, den niemand anfasst, ist genau dort, wo eine Abweichung unbemerkt liegen bleibt.

5. Aktualisieren ohne die Stores

Eine Prüfung hat ein Datum. Wenn der Kanton drei Wochen vor dem Test eine Antwort korrigiert, ist eine App, die nur über eine Store-Prüfung ausliefern kann, kein Lernwerkzeug, sondern ein Risiko.

Inhalt reist deshalb nicht mit dem Programm. Freigegebene Korrekturen erreichen die Geräte über einen differenziellen Kanal: beim Start und bei der Rückkehr in den Vordergrund fragt der Client alles ab, was oberhalb seines eigenen Standes liegt, und legt es über den mitgelieferten Katalog. Keine Einreichung, keine Warteschlange, kein Warten darauf, dass Nutzer aktualisieren.

Die Zahl, diese Woche in der Produktion gemessen: von 12'744 veröffentlichten Fragen wurden 541, also 4,2 Prozent, seit der Erstveröffentlichung mindestens einmal überarbeitet und auf diesem Weg ausgeliefert. Die Verteilung ist ungleich und erzählt ihre eigene Geschichte. Die grössten Anteile: 148 im Wallis, 140 in der Waadt, 112 in Luzern, 43 in Basel-Stadt, 36 in Neuenburg, 27 in Zürich, 24 in St. Gallen. Die Fragen eines Kantons stehen bei ihrer fünften Version.

Zwei Schutzvorrichtungen machen das vertretbar statt leichtsinnig.

Nichts veröffentlicht sich selbst. Wird eine Abweichung erkannt, erzeugt die Kette neu, schreibt in die Datenbank und markiert den Kanton als in Prüfung. In diesem Zustand verweigert der Client die Synchronisation: die Nutzer sehen weiterhin den zuvor freigegebenen Inhalt. Die Freigabe auf live ist immer manuell, und es ist der Kette strukturell verboten, sie selbst vorzunehmen. Derzeit stehen alle dreizehn veröffentlichten Kantone auf live.

Nichts wird still überschrieben. Jede Änderung archiviert die vollständige vorherige Fassung der Frage, Text und Antworten und richtige Antwort und Format, bevor die neue ankommt.

Der schnellste Zyklus bisher: eine Integrationsdelegierte einer deutschsprachigen Region meldete, dass lange Antworten abgeschnitten wurden. Die Ursache lag bei uns und war schlimmer als kosmetisch: die Kürzung traf die richtige Antwort, nicht aber die Ablenker, sodass die richtige Antwort systematisch die kurze mit den Auslassungspunkten war. Ein verräterisches Zeichen, in einem Prüfungstrainer. Die Reparatur berührte 147 der 280 Zeilen dieses Kantons in beiden Sprachen, und die Produktion verzeichnete die Inhaltsänderung zwei Minuten nach der Freigabe der Korrektur, am selben Abend wie die Meldung.

6. Transparenz als Funktion, nicht als Seite

Die meisten Apps behandeln Transparenz als Dokument. Hier ist sie eine Eigenschaft zur Laufzeit, und sie zeigt sich an drei Stellen.

An der Frage. Unter jeder Frage, im Üben wie in der Probeprüfung, sieht die Kandidatin, woher sie stammt, ob ihr Format vom Original abgewandelt wurde, ob sie aus dem offiziellen Bestand eines anderen Kantons geliehen ist, ob sie übersetzt wurde, und ein Prüfzeichen mit dem Datum der letzten Quellenkontrolle.

Vor der Prüfung. Die Probeprüfung erklärt kantonsweise, welche ihrer Parameter offiziell und welche geschätzt sind, und unterscheidet den schriftlichen vom mündlichen Weg, denn in mehreren Kantonen ist die eigentliche Prüfung ein Gespräch, und eine Multiple-Choice-Simulation als « die Prüfung » auszugeben wäre falsch.

Öffentlich. Eine Transparenzseite in vier Sprachen nennt die Serviceversprechen: Quellen alle vierundzwanzig Stunden geprüft, gewöhnliche Aktualisierung innert sieben Tagen, inhaltliche Korrekturen innert zweiundsiebzig Stunden. Sie bietet zudem kantonalen Einbürgerungsbehörden, dem Staatssekretariat für Migration und akkreditierten Forschenden auf schriftliche Anfrage Einsicht in das Prüfregister, beantwortet innert fünf Arbeitstagen.

Ein Serviceversprechen zu veröffentlichen, an dem man gemessen werden kann, ist unbequem. Es ist auch die einzige Fassung von Transparenz, die etwas bedeutet.

7. Ein Entwickler, dreizehn Versionen in achtzehn Wochen

Der erste Commit datiert vom 12. April 2026. Am 2. Mai war die App in Produktion. Seither: dreizehn veröffentlichte Nebenversionen bis 3.12, 243 Builds, und an 89 von 142 Tagen mindestens ein Build.

Dieses Tempo ist nur tragbar wegen dessen, was darunter liegt: 186 automatisierte Testdateien, 320 versionierte Datenbankmigrationen, und eine Inhaltskette, die ihre eigene Ausgabe prüft, statt ihr zu vertrauen. Die Oberfläche wird von einem Test auf vier Sprachen festgehalten, der die Erzeugung verweigert, wenn eine Sprache einen Schlüssel hat, den die anderen nicht haben. Derzeit 3'426 Schlüssel, in allen vieren identisch.

Nichts davon ist heldenhaft. Es ist die gewöhnliche Folge davon, dass ein einzelner Mensch den Zustand von sechsundzwanzig Kantonen nicht im Kopf behalten kann und es auch nicht versuchen sollte.

8. Die Agenten als Nutzer des Systems

Das ist das Kapitel, das zu schreiben ich nicht erwartet hatte.

Ein grosser Teil dieses Projekts wurde mit KI-Programmieragenten gebaut. Das Interessante ist nicht, dass sie Code geschrieben haben. Es ist, dass sie sich als Nutzer des Produktivsystems herausstellten, und als teure.

An einem Tag im August verteilte sich der Datenausgang der Projektdatenbank so: das Werkzeug, also Skripte und interne Hilfsmittel und Agenten, die etwas massen, erzeugte rund das Fünffache des Verkehrs aller echten Nutzer der App zusammen. Die App war nie das Problem. Die App zu messen war es. Und es drückte das Projekt gegen eine harte Abrechnungsschwelle mit Frist.

Das Fehlermuster war genau und im Nachhinein offensichtlich. Ein Agent, der prüfen sollte, ob eine Einspielung funktioniert hatte, las die Tabelle zurück. Ein Agent, gefragt wie viele Zeilen es gibt, holte die Zeilen und zählte sie. Ein Agent, der wissen sollte, ob sich etwas geändert hat, lud es herunter und verglich. Jeder dieser Reflexe ist für einen Menschen am Terminal vernünftig und bei Maschinenfrequenz katastrophal.

Daraus entstand eine Verfassung des Repositoriums, zu Beginn jeder Agentensitzung automatisch gelesen, deren erstes Kapitel nicht von Codestil handelt. Es lautet: jede Abfrage, die du gegen diese Datenbank startest, wird verrechnet. Dann die Regeln, die daraus folgen. Niemals Zeilen lesen, um sie zu zählen, denn eine Anzahl und ein Gewicht und ein Fingerabdruck sind je eine Zeile. Niemals alle Spalten der schweren Tabellen auswählen. Serverseitig aggregieren und zehn Zeilen erhalten statt zehntausend. Eine Sitzung pro Aufgabe, nicht eine pro Befehl, denn jede neue Verbindung zahlt feste Protokollkosten, bevor die Abfrage überhaupt läuft. Und eine Schreiboperation mit Zahlen prüfen, nie mit einem Abzug.

Daneben steht ein bleibendes Projektgedächtnis, eine Tatsache pro Datei, indexiert, das die Entscheidungen trägt, die ein Agent nicht aus dem Code herleiten kann: welche Umgebungen unter welchen Bedingungen beschrieben werden dürfen, welche Korrekturen schon versucht wurden und scheiterten, welche Teile der Kette eine frische Sitzung nicht allein anfassen darf.

Die Lehre reicht über dieses Projekt hinaus. Wir sind es gewohnt, die Kosten eines Agenten in Token zu denken. In einem System mit einem echten Backend sind die Kosten eines Agenten auch die Last, die er auf Ihre Infrastruktur legt, und diese Zahl kann die erste in den Schatten stellen. Niemand hatte mir gesagt, das zu messen. Die Rechnung schon.

9. Was es wirklich kostet

Die Infrastruktur selbst, Backend und Vertrieb und Entwicklerkonten, läuft in der Grössenordnung von einigen hundert Franken im Jahr. Der dominierende Posten ist gar nicht die Infrastruktur: es ist das KI-Werkzeug, das den Grossteil der Arbeit macht, ein Abonnement, das ich ohnehin hätte und das ich für alles nutze, woran ich arbeite. Vollständig zugerechnet liegt der ganze Betrieb bei rund dreitausend Franken im Jahr. Streng diesem Projekt zugerechnet ist es ein Bruchteil davon.

Dafür, zum Zeitpunkt des Schreibens: 10'010 registrierte Profile, davon 7'317, die tatsächlich gelernt oder gespielt haben, in fünfundzwanzig der sechsundzwanzig Kantone.

Ich nenne die Zahlen, weil sie der Teil sind, den man am schwersten glaubt, und weil sie die eigentliche Frage stellen. Dies ist keine Geschichte darüber, viel aus wenig zu machen, als Tugend. Es ist, dass ein staatsbürgerliches Werkzeug in nationalem Massstab heute von einer einzigen Person gebaut und unterhalten werden kann, und dass sich die bindende Beschränkung verschoben hat. Sie ist nicht mehr die technische Kapazität. Sie ist die Frage, ob die Institutionen, denen der Inhalt gehört, einen Weg haben, an dessen Richtigkeit mitzuwirken, und diese Frage beantwortet kein Code von allein.

Zahlen am 9. September 2026 am Produktivsystem und am Repositorium dieses Datums gemessen. Die von der App erfasste Bestehensquote ist die ihrer eigenen Simulation, nicht die einer kantonalen Prüfung. Kantonales Material stammt ausschliesslich aus Quellen, die diese Kantone veröffentlichen.

Beginnen Sie noch heute

App StoreGoogle Play