Léonard Noth
ENFRDE
← Projekte

Dutine

Eine gemeinsame Ökonomie für Aufgaben, die niemand machen will

Eine plattformübergreifende App zum Verteilen von Aufgaben, und dazu, sie über Belohnungen und Strafen tatsächlich erledigt zu bekommen.

Rolle
Bachelorarbeit, alleiniger Autor
Umfang
Anforderungen · Nutzerforschung · Mobile App · Backend · Store-Veröffentlichung
Gebaut mit
Flutter, Dart, Firebase, Firestore, Cloud Functions, Node.js
Team
Allein
Zeitraum
Mai bis Juli 2021 · Note 5,8
Ergebnis
Im App Store und bei Google Play veröffentlicht, mit einem Höchststand von rund 150 Nutzenden pro Monat, und eingestellt, als ich mich mit einer anderen App zusammentat, statt sie allein weiter zu pflegen.

Das Problem

Jede Aufgaben-App unterstellt, das Schwierige sei die Nachverfolgung. Ist es nicht. Wer die Aufgabe verteilt, weiss bereits, was zu tun ist, und wer sie bekommt, weiss bereits, dass er sie nicht gemacht hat. Was fehlt, ist ein Grund, sich bis Donnerstag darum zu kümmern. Genau da setzte meine Bachelorarbeit an: das interessante Problem bei delegierten Aufgaben ist die dauerhafte Motivation, und Motivation ist der Teil, den niemand einplant.

Meine Rolle

Bachelorarbeit im Alleingang an der HEIA-FR, betreut von Pascal Bruegger. Anforderungen, Umfrage, Technologieentscheide, beide Apps, das Backend und die Einreichungen in den Stores.

Lesen als
Das Wesentliche in zwei Minuten

Wirkung

5,8 / 6
Note
App Store + Google Play
Veröffentlicht in
~150 Nutzende pro Monat
Höchststand
102 Seiten
Bericht
Mai bis Juli 2021, allein
Entstanden

Der Systementwurf

  1. Den Vertrag aushandeln

    Zwei Personen, oder eine allein, einigen sich auf eine gemeinsame Ökonomie: was die Aufgaben wert sind, was es kostet, sie zu verpassen, und was die Punkte kaufen können.

    • Die gebende Person legt die Belohnungen und ihre Punktepreise fest, dazu die Strafen für verpasste Aufgaben
    • Die Anmeldung erzeugt eine Beziehung mit sich selbst, damit die App auch allein funktioniert, ohne eigenen Modus
  2. Durch den Tag verfolgen

    Jeder Bildschirm liest live aus der Datenbank, begrenzt auf die eine aktive Beziehung, sodass beide Seiten immer denselben Stand sehen.

  3. Abrechnen um zehn nach Mitternacht

    Ein geplanter Job schliesst den Tag ab: unerledigte Aufgaben lösen ihre Strafe aus, erledigte zahlen ihre Punkte aus.

    • 00:10 Ortszeit, nicht Mitternacht. Die Umfrage fragte nach der Strenge, und die Antwort war: streng, mit kleiner Toleranz
    • Ein geplanter Endpunkt pro Zeitzone, weil die Plattform einen Zeitplan an eine deployte Funktion bindet
  4. Ausgeben, was man verdient hat

    Punkte kaufen die Belohnungen, die die andere Person festgelegt hat, und darum geht es: der Anreiz wird ausgehandelt, nicht von der App verordnet.

  5. Zurückschauen

    Ein Monatsraster pro Aufgabe, jeder Tag grün, orange oder rot, damit ein Muster sichtbar wird und nicht das Scheitern eines einzelnen Tages.

Plattformdienste
  • Flutter

    Eine Codebasis für beide Stores, gewählt über einen gewichteten Vergleich mit React Native und Xamarin, nicht nach Geschmack

  • Firebase Auth

    Die Identität, und der Stream, an dem der gesamte Zustand der App hängt

  • Firestore

    Acht Collections, mit Security Rules als eigentlicher Zugriffskontrolle: ein Dokument erreichen nur die beiden Personen an seinen Enden

  • Cloud Functions

    Die nächtliche Abrechnung, als ein Endpunkt pro Zeitzone

  • Cloud Scheduler

    Die eigentliche Uhr, die jeden Endpunkt zehn Minuten nach der jeweiligen lokalen Mitternacht auslöst

Zentrale Entscheidungen

Beide Rollen, für alle, standardmässig

statt · Nur zu zweit, wie beide Apps, mit denen ich verglichen habe

57% der Befragten rechneten damit, beide Rollen zu haben, und die meisten wollten sich selbst Aufgaben zuweisen, ein Fall, den ich nicht vorhergesehen hatte. Statt einen Solo-Modus anzuschrauben, erzeugt die Anmeldung eine Beziehung mit sich selbst. Sieben Personen, die acht Fragen beantworteten, haben das Produkt stärker verändert als ein Monat Nachdenken.

Zehn nach Mitternacht, nicht Mitternacht

statt · Punkt Mitternacht, oder ein grosszügiges Fenster bis in den Morgen

Die Umfrage fragte, wie streng die App sein solle, und die Antwort war eindeutig: streng, mit einer kleinen Toleranz fürs Vergessen des Abhakens. Mitternacht bestraft die Person, die die Arbeit gemacht und nur das Eintragen vergessen hat; 6 Uhr morgens lässt die Frist verrotten. Zehn Minuten sind die kleinste Toleranz, die beidem gerecht wird.

Siebenundzwanzig Kopien einer Funktion

statt · Eine Funktion, die die Zeitzone als Parameter nimmt

Die Plattform bindet einen Zeitplan an eine deployte Funktion, also brauchte es siebenundzwanzig Endpunkte, damit der Job an siebenundzwanzig Orten um lokale Mitternacht läuft. Nach jedem Mass für Codequalität ist das unhaltbar, und gegen die Frist war es richtig. Ich habe das in den Bericht geschrieben, statt es zu verbergen. Es ist das klarste Beispiel, das ich habe, für eine Entscheidung, die nach einem Massstab schlecht und nach einem anderen korrekt ist.

Belohnungen aus der Literatur, Strafen aus dem Bauch

statt · Beide Hälften als gleich gut belegt darstellen

Für die Belohnungsmechanik konnte ich Forschung zitieren. Für die Straf-Hälfte nicht, also habe ich „unserer Meinung nach“ geschrieben, statt eine Intuition als Befund zu verkleiden. Diese Asymmetrie ist bis heute der ehrlichste Absatz im Bericht.

In der Praxis

die App
die App
Aufgaben und Belohnungen
Aufgaben und Belohnungen

Dutine verfolgt und verwaltet Aufgaben, die Personen zugewiesen sind, und motiviert zum pünktlichen Abschluss über ein System aus Belohnungen und Sanktionen statt über Erinnerungen.

Aus einer einzigen Flutter-Codebasis in beiden Stores veröffentlicht, mit einem Node-Backend auf Firebase und Google Cloud.

Was ich gelernt habe

  • Das interessante Problem in einer Aufgaben-App ist die Motivation, nicht die Nachverfolgung, und Motivation ist der Teil, den niemand einplant.
  • Eine gute Umfragefrage ist eine, deren Antwort ein Implementierungsdetail verändert. „Wie streng soll es sein?“ ist keine Geschmacksumfrage; so habe ich die Cron-Zeit gewählt.
  • Nutzende erfinden das Produkt für einen. Die Selbstzuweisung machte aus Dutine statt eines Werkzeugs für Eltern etwas, das alle nutzen konnten, und ich war nicht darauf gekommen.
  • Verteidigen Sie die hässliche Entscheidung laut. Einen Algorithmus siebenundzwanzigmal zu duplizieren, sieht im Code-Review furchtbar aus und war gegen die Frist richtig. Erst das Aufschreiben des Warum macht daraus eine Entscheidung statt eines Durcheinanders.

Was es nicht leistet

  • Die automatisierten Tests kamen nie über die Vorlage hinaus. Die Veröffentlichung in beiden Stores nahm die Zeit, die eine Testsuite gebraucht hätte, und die 102 Seiten des Berichts gingen dorthin, wo das Format Tiefe belohnte: in die Analyse. Bei einem zweimonatigen Alleinprojekt würde ich heute genauso entscheiden.
  • Die beiden Aufgabenformulare sind weitgehend parallele Kopien voneinander. Das ist der Punkt, den ich heute anders angehen würde: den gemeinsamen Kern früh herauslösen, bevor die Frist die Doppelung festschreibt.
  • Sie läuft nicht mehr: ich habe sie abgeschaltet und die Nutzenden auf eine andere App überführt, statt sie allein zu pflegen.