Wahltool

Webapp für anonyme Wahlen

Entwicklungsgeschichte und Grundfunktionen

Das Wahltool wurde innerhalb von wenigen Wochen entwickelt, um die digitale, DSGVO-konforme Wahl von Vorstandsmitglieder*innen in einem Verein zu ermöglichen. Dabei sollte besonders darauf geachtet werden, dass der Wahlvorgang für den/die Wähler*in besonders unkompliziert und interaktiv abläuft. Die Leitung der Wahl soll autorisierte Wähler*innen, sowie Umfragen (“Wahlen”) in einem Admin-Dashboard anlegen können und deren Ergebnisse einsehen können. Dabei ist es wichtig, dass für jede Antwort nur die Anzahl der abgegebenen Stimmen ersichtlich ist – jedoch nicht, wer für sie abgestimmt hat. Dennoch muss ein Mechanismus existieren, der die Abgagbe von mehreren Stimmen pro Person pro Wahl unterbinden soll. Die folgenden (wenigen) Informationen werden folglich pro Person erhoben:

  • Wählerkennung (z.B. Email-Adresse)
  • Status, ob der/die Wähler*in bereits an der aktuellen Wahl teilgenommen hat

Nach einer Wahl können die Ergebnisse als JSON-Dokument exportiert werden.

Wahlablauf

Der Wähler*in gibt eine zur Wahl zugelassene Wählerkennung ein:

Eintragung der Wählerkennung
Eintragung der Wählerkennung

Im Anschluss wird entweder direkt die Wahl angezeigt (siehe unten) oder – falls gerade keine Wahl läuft – eine Wartelobby angezeigt:

Warten auf Wahl
Warten auf Wahl

Sobald eine Wahl läuft und der/die Wähler*in noch nicht abgestimmmt hat, werden die Antwortmöglichkeiten angezeigt:

Abstimmung
Abstimmung

Nach dem Abstimmen wird der/die Wähler*in wieder zur Wartelobby weitergeleitet um bei der nächsten Wahl ein weiteres Mal abstimmten zu können, ohne sich neu einloggen zu müssen.

Admin-Dashboard

Auf dem Admin-Dashboard können Wähler*innen angelegt oder gelöscht werden, sowie Polls erstellt oder gestoppt werden. Beim Stoppen einer Wahl wird zudem ein JSON-Dokument erzeugt, mit dem die Wahlergebnisse maschinell verarbeitet werden können.

{
    "question": "Was ist der Sinn des Lebens?",
    "choices": [
        "Ja",
        "Nein",
        "Vielleicht",
        "42"
    ],
    "users_voted": {
        "user1@<redacted>": true,
        "user2@<redacted>": true,
        "user5@<redacted>": true,
        "user8@<redacted>": true
    },
    "choices_count": {
        "Vielleicht": 1,
        "42": 3
    }
}

In diesem Dokument ist die Stimmverteilung in "choices_count" ersichtlich, sowie welche Wähler*innen abgestimmt haben. Es ist jedoch nicht ersichtlich, wer für welche Option gestimmt hat.

Nach dem Stoppen einer Wahl werden serverseitig alle Datensätze gelöscht – es gibt keine persistente Datenbank. Die Ergebnisse sind dann lediglich im erzeugten JSON-Dokument enthalten.

Zukünftige Entwicklung

Für kommende Wahlen soll das händische Anlegen von Wähler*innen optional werden. Es soll zusätzlich Microsoft OAuth für die Wählerkennungen implementiert werden.