Le hors-ligne est un état, pas une erreur. Ce qu’il a fallu pour que l’appli s’ouvre instantanément, sans aller-retour avec le réseau.

L’hypothèse que nous avons refusé de faire

La plupart des applis reposent sur une hypothèse silencieuse : le réseau est là. Quand il ne l’est pas, vous obtenez un rond qui tourne, un bouton « Réessayer » ou un écran qui vous dit que quelque chose s’est mal passé. Pour un organiseur familial, cette hypothèse lâche précisément aux moments où l’appli serait la plus utile. Au sous-sol d’un supermarché. Dans le bus. Dans un village où le réseau va et vient au gré de la météo.

Nous avons donc posé une règle très tôt : l’appli doit s’ouvrir sur quelque chose d’utile sans le moindre aller-retour avec le réseau. Pas une page d’erreur en cache, mais les vraies listes, tâches et budgets du foyer, avec une indication claire de leur dernière synchronisation.

Ce que « s’ouvrir hors ligne » veut vraiment dire

Cela ressemble à de la mise en cache. C’est plus que cela. Trois conditions doivent être réunies.

  • Le dernier état connu est sur le téléphone, et on lui fait confiance. Chaque liste, tâche et budget qu’un membre peut voir est enregistré localement dès son arrivée. À l’ouverture, l’appli lit d’abord ce stockage et s’affiche à partir de lui. Le réseau n’est consulté qu’ensuite, s’il est là.
  • Les modifications faites hors ligne sont de vraies modifications. Cocher un article au magasin sans réseau n’est pas une requête qui pourrait échouer plus tard. C’est enregistré localement, affiché comme fait et mis en file d’attente. La file se rejoue dans l’ordre au retour de la connexion.
  • Quand deux personnes modifient la même chose, tout doit bien se terminer. Si l’une coche un article au magasin pendant que l’autre le renomme à la maison, les deux modifications doivent survivre. Nous avons retenu une fusion déterministe : champ par champ, la dernière écriture l’emporte, et la règle est partagée entre l’appli et le serveur pour qu’ils ne puissent jamais diverger sur le résultat. Les vrais conflits, ces rares cas où la règle ne peut pas trancher, sont présentés à une personne au lieu d’être résolus en silence.

Pourquoi nous interrogeons le serveur au lieu d’attendre qu’il nous prévienne

Le temps réel passe en général par une connexion maintenue ouverte avec le serveur. Sur une connexion facturée au volume, et à travers les proxys par lesquels de nombreux réseaux mobiles font transiter le trafic, une connexion ouverte est fragile et coûteuse. Nous avons choisi quelque chose de plus ancien et de plus modeste : l’appli demande au serveur « du nouveau depuis la version 412 ? » tant qu’un écran est ouvert et que l’appli est au premier plan. Quand rien n’a changé, la réponse tient en deux champs. Quand quelque chose a changé, seules les modifications reviennent.

Ce n’est pas spectaculaire, mais cela fonctionne sur tous les réseaux que nous avons testés, cela ne coûte presque rien quand le foyer est calme, et cela s’arrête complètement quand l’appli est en arrière-plan.

Se connecter sans bonne connexion

Le même raisonnement s’applique avant même d’entrer. Un membre qui s’est connecté une fois peut rouvrir l’appli sans le serveur, car la session est conservée et vérifiée localement jusqu’à ce qu’elle puisse être renouvelée. L’inscription par numéro de téléphone envoie un code à six chiffres par SMS, parce que cela fonctionne sur des téléphones qui n’ont jamais vu une boutique d’applications, et le code est vérifié entièrement sur le serveur comme sur le téléphone.

Ce que cela nous a coûté

Penser hors ligne d’abord n’est pas gratuit. Chaque écran doit être conçu avec un état périmé, un état vide et un état « en file d’attente, pas encore envoyé ». Chaque écriture doit pouvoir être rejouée sans effet de bord, pour qu’une file relancée ne puisse pas enregistrer deux fois la même dépense. Les tests prennent plus de temps, parce que les bugs intéressants se cachent entre deux connexions.

Nous pensons que c’est la décision qui façonne le plus l’impression que laisse KinHolo. L’appli est calme parce qu’elle ne vous fait jamais attendre.

Envie du prochain ?

Une courte lettre par mois. Rien d’autre.

Rejoindre la liste