Léonard Noth
ENFRDE
← projets

Dutine

Une économie partagée pour les corvées dont personne ne veut

Une app multiplateforme pour attribuer des tâches, et pour les faire réellement aboutir, par récompenses et pénalités.

Rôle
Travail de bachelor, auteur unique
Périmètre
Cahier des charges · Recherche utilisateur · Application mobile · Backend · Publication sur les stores
Construit avec
Flutter, Dart, Firebase, Firestore, Cloud Functions, Node.js
Équipe
Seul
Calendrier
Mai à juillet 2021 · noté 5,8
Résultat
Publiée sur l'App Store et Google Play, avec un pic à environ 150 utilisateurs par mois, puis retirée quand je me suis associé à une autre application plutôt que de continuer à la maintenir seul.

Le problème

Toutes les applications de tâches ménagères supposent que le difficile, c'est le suivi. C'est faux. Celui qui distribue la tâche sait déjà ce qu'il y a à faire, et celui qui la reçoit sait déjà qu'il ne l'a pas faite. Ce qui manque, c'est une raison pour que ça compte encore jeudi. Mon travail de bachelor est parti de là : dans les tâches déléguées, le problème intéressant est la motivation dans la durée, et c'est la partie que personne ne budgète.

Mon rôle

Travail de bachelor en solo à la HEIA-FR, supervisé par Pascal Bruegger. Le cahier des charges, l'enquête, les choix technologiques, les deux applications, le backend et les dépôts sur les stores.

Lire en
L'essentiel en deux minutes

Impact

5,8 / 6
Note
App Store + Google Play
Publiée sur
~150 utilisateurs par mois
Pic d'utilisation
102 pages
Rapport
mai à juillet 2021, en solo
Réalisée en

L'architecture du système

  1. Se mettre d'accord sur le contrat

    Deux personnes, ou une seule, conviennent d'une économie commune : ce que valent les tâches, ce que coûte de les manquer, et ce que les points permettent d'acheter.

    • Le donneur définit les récompenses et leur prix en points, ainsi que les sanctions liées aux tâches manquées
    • L'inscription crée une relation avec soi-même : l'application fonctionne en solo sans mode particulier
  2. Suivre au fil de la journée

    Chaque écran lit la base en direct, restreint à la relation active, si bien que les deux côtés voient toujours le même état.

  3. Faire les comptes à minuit dix

    Une tâche planifiée clôt la journée : les tâches non terminées déclenchent leur sanction, les tâches terminées versent leurs points.

    • 00h10 heure locale, pas minuit. L'enquête demandait quel degré de sévérité appliquer, et la réponse était : sévère, avec une petite marge
    • Un point de terminaison planifié par fuseau horaire, parce que la plateforme lie une planification à une fonction déployée
  4. Dépenser ce qu'on a gagné

    Les points achètent les récompenses définies par l'autre personne, et c'est tout l'intérêt : l'incitation se négocie, elle n'est pas imposée par l'application.

  5. Regarder en arrière

    Une grille mensuelle par tâche, chaque jour en vert, orange ou rouge, pour qu'apparaisse une tendance plutôt que l'échec d'une seule journée.

Services de la plateforme
  • Flutter

    Une seule base de code pour les deux stores, choisie sur une comparaison pondérée face à React Native et Xamarin, pas par goût

  • Firebase Auth

    L'identité, et le flux auquel tout l'état de l'application est accroché

  • Firestore

    Huit collections, avec les règles de sécurité comme véritable contrôle d'accès : un document n'est atteignable que par les deux personnes qui sont à ses extrémités

  • Cloud Functions

    Les comptes de la nuit, sous forme d'un point de terminaison par fuseau horaire

  • Cloud Scheduler

    L'horloge réelle, qui déclenche chaque point de terminaison dix minutes après son propre minuit local

Décisions clés

Les deux rôles, pour tout le monde, par défaut

plutôt que · Uniquement en binôme, comme les deux applications que j'avais comparées

57% des répondants s'attendaient à tenir les deux rôles, et la plupart voulaient s'attribuer des tâches à eux-mêmes, un usage que je n'avais pas prévu. Plutôt que de greffer un mode solo, l'inscription crée une relation avec soi-même. Sept personnes et huit questions ont davantage changé le produit qu'un mois de réflexion.

Minuit dix, pas minuit

plutôt que · Minuit pile, ou une fenêtre indulgente jusqu'au matin

L'enquête demandait quel degré de sévérité l'application devait avoir, et la réponse était nette : sévère, avec une petite marge pour l'oubli de cocher. Minuit punit celui qui a fait le travail mais a oublié de le noter. Six heures du matin laisse pourrir l'échéance. Dix minutes, c'est la plus petite marge qui respecte les deux.

Vingt-sept copies d'une même fonction

plutôt que · Une seule fonction prenant le fuseau horaire en paramètre

La plateforme lie une planification à une fonction déployée : faire se déclencher le traitement à minuit local en vingt-sept endroits imposait vingt-sept points de terminaison. C'est indéfendable au regard de n'importe quel critère de qualité de code, et c'était le bon choix face à l'échéance. Je l'ai écrit dans le rapport plutôt que de le cacher. C'est l'exemple le plus net que j'aie d'une décision mauvaise selon une mesure et juste selon une autre.

Les récompenses tirées de la littérature, les sanctions de l'instinct

plutôt que · Présenter les deux moitiés comme également fondées

Je pouvais citer des travaux de recherche pour le mécanisme de récompense. Je ne le pouvais pas pour la moitié sanction, alors j'ai écrit « à notre avis » plutôt que de déguiser une intuition en résultat. Cette asymétrie reste le paragraphe le plus honnête du rapport.

En pratique

l'application
l'application
tâches et récompenses
tâches et récompenses

Dutine suit et gère les tâches attribuées à des personnes, et les motive à finir dans les temps par un système de récompenses et de sanctions plutôt que par des rappels.

Publiée sur les deux stores depuis une seule base Flutter, avec un backend Node sur Firebase et Google Cloud.

Ce que j'en retiens

  • Dans une application de corvées, le problème intéressant est la motivation, pas le suivi, et la motivation est la partie que personne ne budgète.
  • Une bonne question d'enquête est une question dont la réponse change un détail d'implémentation. « Quel degré de sévérité ? » n'est pas un sondage de préférence : c'est comme ça que j'ai choisi l'heure du cron.
  • Les utilisateurs inventent votre produit à votre place. L'auto-attribution a fait passer Dutine d'un outil pour parents à quelque chose que n'importe qui pouvait utiliser, et je n'y avais pas pensé.
  • Défendez la décision moche à voix haute. Dupliquer vingt-sept fois un même algorithme a l'air catastrophique en revue de code et c'était le bon choix face à l'échéance. Écrire pourquoi, c'est ce qui en fait une décision plutôt qu'un bazar.

Ce que ça ne fait pas

  • Les tests automatisés n'ont jamais dépassé le gabarit. Publier sur les deux stores a pris le temps qu'une suite de tests aurait demandé, et les 102 pages du rapport sont allées là où le format récompensait la profondeur : dans l'analyse. Sur un projet solo de deux mois, je referais le même choix aujourd'hui.
  • Les deux formulaires de tâche sont en grande partie des copies parallèles l'un de l'autre. C'est le point que je traiterais autrement aujourd'hui : factoriser le formulaire commun très tôt, avant que l'échéance ne fige la duplication.
  • Elle ne tourne plus : je l'ai arrêtée et j'ai transféré les utilisateurs vers une autre application plutôt que de la maintenir seul.