KoderKoder.ai
TarifsEntrepriseÉducationPour les investisseurs
Se connecterCommencer

Produit

TarifsEntreprisePour les investisseurs

Ressources

Contactez-nousSupportÉducationBlog

Légal

Politique de confidentialitéConditions d’utilisationSécuritéPolitique d’utilisation acceptableSignaler un abus

Réseaux sociaux

LinkedInTwitter
Koder.ai
Langue

© 2026 Koder.ai. Tous droits réservés.

Accueil›Blog›Règles de synchronisation pour applications mobiles offline-first que les utilisateurs comprennent
10 oct. 2025·8 min

Règles de synchronisation pour applications mobiles offline-first que les utilisateurs comprennent

Règles de synchronisation pour applications mobiles offline-first que les utilisateurs comprennent : modèles de conflits clairs, messages d'état simples et textes qui réduisent la confusion hors ligne.

Règles de synchronisation pour applications mobiles offline-first que les utilisateurs comprennent

Ce que les utilisateurs pensent qu'il devrait se passer quand ils sont hors ligne

La plupart des gens ne pensent pas aux réseaux. Ils pensent à la tâche qu'ils ont devant eux. S'ils peuvent encore taper, appuyer sur Enregistrer ou voir la modification à l'écran, ils supposent que ça a fonctionné.

Leurs attentes se résument généralement à quelques règles :

  • « Si je vois ma modification, elle est sauvegardée. »
  • « Quand j'aurai du signal, ça se téléversera tout seul. »
  • « Rien de ce que j'ai fait ne devrait disparaître. »
  • « Ma modification ne devrait pas être remplacée en silence par celle de quelqu'un d'autre. »

Derrière cela se cachent deux craintes : le travail perdu et les changements surprenants.

Le travail perdu ressemble à une trahison parce que l'app leur a permis de continuer. Les changements surprenants peuvent être encore pires parce que l'app paraît « changer d'avis » plus tard.

C'est pourquoi vous devez définir « synchronisé » en termes simples. Synchronisé ne veut pas dire « je le vois sur mon téléphone ». Ça veut dire « ce changement a été téléversé et accepté par le serveur, et les autres appareils le recevront aussi ». Votre interface doit aider les gens à comprendre dans lequel de ces états ils se trouvent.

Un mode d'échec courant : quelqu'un modifie son adresse de livraison dans le métro, la voit mise à jour, puis ferme l'app. Plus tard il l'ouvre chez lui et l'ancienne adresse est de retour. Même si le système a fait quelque chose de logique, l'utilisateur vit ça comme une perte de données.

Des règles prévisibles et des messages clairs évitent la plupart de ces problèmes. De courtes lignes de statut comme « Enregistré sur cet appareil » vs « Synchronisé avec votre compte » font beaucoup.

Le modèle de base : sauvegardé localement, puis synchronisé plus tard

Une bonne approche offline-first commence par une promesse simple : quand vous appuyez sur Enregistrer, votre travail est en sécurité maintenant, même sans internet.

Ce qui est sauvegardé où

Quand un utilisateur modifie quelque chose, l'app doit d'abord l'enregistrer sur l'appareil. C'est la version qu'il doit s'attendre à voir immédiatement.

Parallèlement, l'app essaie d'envoyer ce changement au serveur dès que possible. Si le téléphone est hors ligne, ces modifications ne sont pas « perdues » ou « à moitié sauvegardées ». Elles attendent simplement d'être envoyées.

Dans l'interface, évitez les mots techniques comme « en file » ou « écrit en attente ». Préférez un langage simple : « Nous enverrons vos modifications quand vous serez de nouveau en ligne. »

États que les utilisateurs comprennent

Les gens se sentent plus calmes quand l'app montre clairement dans quel état elle se trouve. Vous pouvez couvrir la plupart des situations avec un petit ensemble d'états :

  • Online (peut synchroniser immédiatement)
  • Offline (enregistré sur cet appareil)
  • Reconnecting (essaie de se reconnecter)
  • Syncing (envoie vos changements récents)
  • Synced (tout est à jour)

Ajoutez ensuite un état spécial quand l'app ne peut vraiment pas finir sans l'utilisateur : Needs attention.

Un système visuel simple fonctionne bien : une petite icône plus une courte ligne de texte près de l'action qui comptait (par exemple en bas d'un écran d'édition).

Exemples de texte :

  • « Enregistré sur votre téléphone. Sera synchronisé quand vous serez en ligne. »
  • « Synchronisation des modifications… »
  • « Toutes les modifications synchronisées. »
  • « Impossible de synchroniser. Appuyez pour revoir. »

D'où viennent les conflits (et pourquoi ils surprennent)

Un conflit de synchronisation arrive quand deux modifications sont faites sur la même chose avant que l'app puisse se mettre d'accord avec le serveur.

Les conflits viennent généralement d'un comportement normal :

  • Vous modifiez sur deux appareils (téléphone et tablette).
  • Deux personnes changent le même enregistrement partagé.
  • Un appareil reste hors ligne longtemps et « rattrape » ensuite.

Ce qui surprend les utilisateurs, c'est qu'ils n'ont rien fait de mal. Ils ont vu leur modification réussir localement, donc ils la considèrent comme définitive. Quand l'app synchronise plus tard, le serveur peut la rejeter, la combiner de façon inattendue, ou la remplacer par la version de quelqu'un d'autre.

Toutes les données n'ont pas le même risque. Certaines modifications sont faciles à réconcilier sans drame (likes, lu/non lu, filtres mis en cache). D'autres sont à enjeux élevés (adresses de livraison, prix, stocks, paiements).

Le plus grand briseur de confiance est l'écrasement silencieux : l'app échange discrètement la modification hors ligne d'un utilisateur contre une valeur serveur plus récente (ou vice versa) sans message. Les gens s'en aperçoivent plus tard, généralement quand ça compte, et les tickets support suivent.

Vos règles doivent rendre une chose prévisible : est-ce que leur modification l'emporte, est-elle combinée, ou nécessite-t-elle un choix ?

Trois patrons de conflit : last-write-wins, merge ou demander

Quand une app enregistre des modifications hors ligne, elle doit finalement décider quoi faire si le même élément a été modifié ailleurs. L'objectif n'est pas la perfection mais un comportement que les utilisateurs peuvent prévoir.

1) Last-write-wins (LWW)

Last-write-wins signifie que la dernière modification devient la version finale. C'est rapide et simple, mais ça peut écraser le travail de quelqu'un d'autre.

Utilisez-le quand se tromper est peu coûteux et facile à corriger, comme l'état lu/non lu, l'ordre de tri, ou les horodatages « dernier vu ». Si vous utilisez LWW, ne cachez pas le compromis. Un texte clair aide : « Mis à jour sur cet appareil. Si une mise à jour plus récente existe, elle peut remplacer celle-ci. »

2) Merge (combiner les changements)

Merge signifie que l'app essaie de conserver les deux ensembles de modifications en les combinant. C'est adapté quand les gens s'attendent à ce que les modifications s'empilent, comme l'ajout d'éléments à une liste, l'ajout de messages, ou la modification de champs différents d'un profil.

Gardez le message calme et précis :

  • « Synchronisé. Vos modifications ont été combinées avec des mises à jour depuis un autre appareil. »

Si quelque chose n'a pas pu être fusionné, dites clairement ce qui s'est passé en termes simples :

  • « Nous avons gardé votre numéro de téléphone et l'adresse de l'autre appareil. »

3) Demander à l'utilisateur (seulement quand c'est important)

Demander est la solution de repli quand les données sont importantes et qu'une décision automatique pourrait causer un vrai dommage, comme les paiements, permissions, informations médicales ou textes légaux.

Règle pratique :

  • Si le coût d'une erreur est élevé, préférez Demander.
  • Si les conflits sont fréquents mais peu risqués, préférez LWW.
  • Si les utilisateurs s'attendent à ce que les deux changements survivent, préférez Merge.
  • Si vous n'arrivez pas à expliquer le résultat en une phrase, vous avez probablement besoin de Demander.
  • Si les tickets support seraient coûteux, évitez les écrasements silencieux.

Last-write-wins : simple, rapide, et facilement mal compris

Last-write-wins (LWW) paraît simple : quand le même champ est modifié à deux endroits, la modification la plus récente devient la vérité sauvegardée. La confusion vient de ce que « le plus récent » signifie réellement.

Ce que « dernier » veut dire

Il vous faut une source unique de temps, sinon LWW devient vite confus.

L'option la plus sûre est l'heure serveur : le serveur assigne un « updated at » quand il reçoit chaque changement, puis le plus récent timestamp serveur l'emporte. Si vous vous fiez à l'heure de l'appareil, un téléphone avec l'horloge incorrecte peut écraser des bonnes données.

Même avec l'heure serveur, LWW peut surprendre parce que « la dernière modification à atteindre le serveur » peut ne pas sembler être « la dernière modification que j'ai faite ». Une connexion lente peut changer l'ordre d'arrivée.

Quand LWW convient (et quand il fait du mal)

LWW fonctionne mieux pour des valeurs où écraser est acceptable, ou où seule la valeur la plus récente compte : drapeaux de présence, paramètres de session (silence, ordre de tri), et champs à faible enjeu.

LWW fait du tort sur des contenus significatifs et soigneusement édités : infos de profil, adresses, prix, texte long, ou tout ce qu'un utilisateur détesterait voir « disparaître ». Un seul écrasement silencieux peut être perçu comme une perte de données.

Pour réduire la confusion, rendez le résultat visible et sans blâme :

  • « Mis à jour avec la dernière version de votre compte. »
  • « Votre modification hors ligne a été remplacée par une mise à jour plus récente effectuée sur un autre appareil. »
  • « Enregistré hors ligne. Nous synchroniserons quand vous serez en ligne. »
  • « Synchronisé. Cet élément correspond maintenant à la mise à jour la plus récente. »
  • « Problème de synchronisation. Vos modifications sont toujours sur cet appareil. »

Stratégies de merge que les utilisateurs peuvent accepter

Écrire le texte UX, puis construire
Rédigez des états hors ligne et des messages de conflit clairs, puis générez le flux de l'app en quelques minutes.
Try Free

Le merge fonctionne mieux quand les gens peuvent deviner le résultat sans consulter une page d'aide. L'approche la plus simple : combinez ce qui est sûr, n'interrompez que quand vous ne pouvez pas.

Fusion par champ (mieux que « tout l'enregistrement gagne »)

Au lieu de choisir une version entière d'un profil, fusionnez champ par champ. Si un appareil change le numéro de téléphone et qu'un autre change l'adresse, conservez les deux. Cela paraît juste parce que l'utilisateur ne perd pas des modifications non liées.

Texte utile quand ça réussit :

  • « Nous avons enregistré les deux mises à jour. Votre numéro et votre adresse ont été mis à jour. »

Si un champ est en conflit, dites-le clairement :

  • « Nous n'avons pas pu combiner deux numéros de téléphone différents. Nous avons gardé le plus récent. Vous pouvez le modifier à tout moment. »

Merge append-only (le plus facile à expliquer)

Certaines données sont naturellement additives : commentaires, messages, journaux d'activité, reçus. Si deux appareils ajoutent des éléments hors ligne, vous pouvez généralement tout conserver. C'est l'un des motifs les moins source de confusion parce que rien n'est écrasé.

Message d'état clair :

  • « Vous êtes hors ligne. Les nouveaux messages seront envoyés quand vous serez de nouveau en ligne. »

Listes : règles prévisibles pour ajouts et suppressions

Les listes deviennent délicates quand un appareil supprime un élément et qu'un autre le modifie. Choisissez une règle simple et dites-la clairement.

Une approche courante : les ajouts se synchronisent toujours, les modifications se synchronisent sauf si l'élément a été supprimé, et les suppressions l'emportent sur les modifications (parce que l'élément n'existe plus).

Texte de conflit qui empêche la panique :

  • « Nous avons conservé les deux ensembles de modifications quand c'était possible. Un élément a été supprimé sur un autre appareil, donc votre modification sur cet élément n'a pas été appliquée. »

Quand vous documentez ces choix en langage courant, les gens arrêtent de deviner. Les tickets support diminuent parce que le comportement de l'app correspond au message affiché.

Quand demander à l'utilisateur : un dialogue de conflit qui n'effraie pas

La plupart des conflits n'ont pas besoin d'une boîte de dialogue. Ne demandez que quand l'app ne peut pas choisir une solution sans risquer une surprise, comme deux personnes modifiant le même champ de manières différentes.

Interrompez à un seul moment clair : juste après la fin de la synchronisation quand un conflit est détecté. Si un dialogue s'affiche pendant que l'utilisateur tape, on a l'impression que l'app casse son travail.

Gardez les choix à deux boutons quand c'est possible. « Conserver le mien » vs « Utiliser l'autre » suffit généralement.

Ce que le dialogue doit montrer (sans données brutes)

Utilisez un langage simple qui correspond à ce dont les utilisateurs se souviennent :

  • Quel élément a été en conflit (profil, note, adresse)
  • Ce qui a changé de chaque côté (en mots simples)
  • Un timing approximatif (« il y a quelques minutes »), pas d'horodatages
  • Ce qui se passe ensuite après leur choix

Au lieu d'un diff technique, décrivez la différence comme une petite histoire : « Vous avez changé le numéro pour 555-0142. Quelqu'un d'autre l'a changé pour 555-0199. »

Texte UX réutilisable

Titre du dialogue :

Nous avons trouvé deux versions

Exemple de corps du dialogue :

Votre profil a été modifié sur ce téléphone alors que vous étiez hors ligne, et il a aussi été mis à jour sur un autre appareil.

Ce téléphone : numéro de téléphone défini sur (555) 0142 Autre mise à jour : numéro de téléphone défini sur (555) 0199

Boutons :

Conserver le mien

Utiliser l'autre

Confirmation après le choix :

Enregistré. Nous synchronisons votre choix maintenant.

Si vous voulez un peu plus d'assurance, ajoutez une ligne calme sous les boutons :

Vous pouvez modifier ça à nouveau plus tard dans Profil.

Étapes : définir les règles, puis concevoir les écrans et le texte

Prototyper la synchronisation hors ligne rapidement
Transformez vos règles de synchronisation hors ligne en un prototype Flutter fonctionnel depuis une simple conversation.
Start Building

Commencez par décider ce que les gens peuvent faire sans connexion. Si vous laissez tout modifier hors ligne, vous acceptez aussi plus de conflits par la suite.

Un point de départ simple : brouillons et notes éditables ; paramètres de compte éditables avec des limites ; actions sensibles (paiements, changement de mot de passe) en lecture seule jusqu'à être en ligne.

Ensuite, choisissez une règle de conflit par type de donnée, pas une règle pour toute l'app. Les notes peuvent souvent être fusionnées. Un champ de profil généralement non. Les paiements ne doivent pas entrer en conflit du tout. C'est là que vous définissez les règles en termes simples.

Puis cartographiez les états visibles que les utilisateurs rencontreront. Gardez-les cohérents entre les écrans pour que les gens n'aient pas à réapprendre leur signification. Pour le texte visible, privilégiez des phrases comme « Enregistré sur cet appareil » et « En attente de synchronisation » plutôt que des termes internes.

Écrivez le texte comme si vous l'expliquiez à un ami. Si vous utilisez le mot « conflit », expliquez-le immédiatement : « deux modifications différentes ont eu lieu avant que votre téléphone puisse se synchroniser. »

Testez les mots avec des utilisateurs non techniques. Après chaque écran, posez une question : « Que pensez-vous qu'il va se passer ensuite ? » Si leur réponse est fausse, le texte ne fait pas son travail.

Enfin, ajoutez un filet de sécurité pour que les erreurs ne soient pas permanentes : annuler pour les modifications récentes, historique des versions pour les enregistrements importants, ou points de restauration. Des plateformes comme Koder.ai utilisent des snapshots et des rollback pour la même raison : quand les cas limites arrivent, la récupération crée la confiance.

Erreurs courantes qui génèrent des tickets support

La plupart des tickets de synchronisation viennent d'un problème racine : l'app sait ce qui se passe, mais l'utilisateur ne le sait pas. R rendez l'état visible et la prochaine étape évidente.

Erreur 1 : erreurs vagues sans action

« Synchronisation échouée » est une impasse. Dites ce qui s'est passé et ce que l'utilisateur peut faire.

Mieux : « Impossible de synchroniser pour le moment. Vos modifications sont sauvegardées sur cet appareil. Nous réessaierons quand vous serez en ligne. » S'il y a un choix, proposez-le : « Réessayer » et « Revoir les modifications en attente de synchronisation ».

Erreur 2 : modifications en attente cachées

Si les gens ne peuvent pas voir leurs mises à jour non envoyées, ils supposent que le travail est perdu. Donnez-leur un endroit pour confirmer ce qui est stocké localement.

Une approche simple : une petite ligne de statut « 3 modifications en attente de synchronisation » qui ouvre une courte liste avec les noms des éléments et des heures approximatives.

Erreur 3 : résolutions automatiques silencieuses sur des données importantes

La résolution automatique peut aller pour des champs à faible enjeu, mais crée de la colère quand elle écrase quelque chose de significatif (adresses, prix, validations) sans laisser de trace.

Au minimum, laissez une note dans l'historique d'activité : « Nous avons gardé la version la plus récente de cet appareil » ou « Nous avons combiné des modifications. » Mieux : affichez une bannière unique après la reconnexion : « Nous avons mis à jour 1 élément lors de la synchronisation. Revoir. »

Erreur 4 : heure et date qui semblent fausses

Les utilisateurs jugent l'équité par le temps. Si votre « Dernière mise à jour » utilise l'heure serveur ou un fuseau différent, ça peut donner l'impression que l'app a changé des choses dans leur dos.

Affichez les heures dans le fuseau local de l'utilisateur et envisagez des formulations plus conviviales comme « Mis à jour il y a 5 minutes. »

Erreur 5 : considérer l'état hors ligne comme une erreur

L'offline est normal. Évitez les états rouges effrayants pour des déconnexions quotidiennes. Utilisez un langage calme : « Fonctionne hors ligne » et « Enregistré sur cet appareil. »

Si quelqu'un modifie un profil dans le train et voit ensuite des données plus anciennes en Wi‑Fi, il contacte rarement le support quand l'app montre clairement « Enregistré localement, sera synchronisé quand vous serez en ligne » puis « Synchronisé » ou « Needs attention ». Si elle n'affiche que « Synchronisation échouée », il le fera.

Checklist rapide : l'utilisateur peut-il prédire ce qui va se passer ?

Si les gens ne peuvent pas prédire le comportement de synchronisation, ils cessent de faire confiance à l'app.

Rendez l'état hors ligne difficile à manquer. Un petit badge dans l'en-tête suffit souvent, mais il doit apparaître quand ça compte (mode avion, pas de signal, serveur inaccessible) et disparaître rapidement quand l'app revient en ligne.

Vérifiez ensuite le moment juste après qu'un utilisateur ait appuyé sur Enregistrer. Il doit voir une confirmation instantanée que la modification est en sécurité localement, même si la synchronisation ne peut pas avoir lieu pour l'instant. « Enregistré sur cet appareil » réduit la panique et les tapotements répétés.

Une courte checklist pour valider votre flux :

  • L'état hors ligne est clairement indiqué et pas caché dans un menu.
  • Chaque modification confirme une sauvegarde locale immédiatement.
  • Les utilisateurs peuvent revoir les modifications en attente de synchronisation.
  • Les résultats de synchronisation sont explicites (« Toutes les modifications synchronisées » vs « Needs attention »).
  • Si un conflit arrive, le message dit ce qui a changé et quelle règle a été utilisée.

Faites aussi en sorte que la récupération paraisse normale. Si last-write-wins écrase quelque chose, proposez « Annuler » ou « Restaurer la version précédente ». Si vous ne pouvez pas offrir cela, donnez une prochaine étape claire : « Réessayez quand vous serez en ligne », et un moyen simple de contacter le support.

Un test simple : demandez à un ami de passer hors ligne, de modifier un champ, puis de le modifier à nouveau sur un autre appareil. S'il peut expliquer ce qui va se passer sans deviner, vos règles fonctionnent.

Scénario exemple : deux modifications du même profil hors ligne

Rendre la statuts de synchronisation visible
Transformez votre checklist en écrans, états et messages que les utilisateurs comprennent.
Start Project

Maya est dans un train sans signal. Elle ouvre son profil et met à jour l'adresse de livraison de :

« 12 Oak St, Apt 4B » à « 12 Oak St, Apt 4C ».

En haut de l'écran elle voit : « Vous êtes hors ligne. Les modifications seront synchronisées quand vous serez de nouveau en ligne. » Elle appuie sur Enregistrer et continue.

En même temps, son partenaire Alex est chez lui, en ligne, et modifie la même adresse sur leur compte partagé en : « 14 Pine St ». Alex enregistre et ça se synchronise immédiatement.

Quand Maya retrouve du signal, elle voit : « De nouveau en ligne. Synchronisation de vos modifications… » Puis un toast : « Synchronisé. » Ce qui se passe ensuite dépend de votre règle de conflit.

Comment ça joue selon les règles

  • Last-write-wins : L'édition de Maya étant faite plus tard, l'adresse devient « 12 Oak St, Apt 4C ». Alex est surpris car sa modification « a disparu ». Un meilleur message de suivi : « Synchronisé. Votre version a remplacé une mise à jour plus récente d'un autre appareil. »

  • Fusion par champ : Si Alex a seulement changé la rue et que Maya a changé le numéro d'appartement, vous pouvez les combiner : « 14 Pine St, Apt 4C ». Le toast peut dire : « Synchronisé. Nous avons combiné des modifications d'un autre appareil. »

  • Demander à l'utilisateur : Si les deux ont changé la même ligne d'adresse, affichez une invite calme :

    « Deux mises à jour de l'adresse de livraison »

    « Nous avons trouvé des changements depuis un autre appareil. Rien n'a été perdu. Choisissez la version à garder. »

    Boutons : « Conserver le mien » et « Utiliser l'autre mise à jour ».

Ce que l'utilisateur apprend est simple : la synchronisation est prévisible, et s'il y a un conflit, rien n'a été perdu — il peut choisir.

Prochaines étapes : écrivez vos règles et prototypez le flux

Si vous voulez un comportement hors ligne prévisible, rédigez d'abord vos règles en phrases simples. Un défaut utile : fusion pour les champs à faible enjeu (notes, tags, descriptions), mais demander pour les données à risque élevé (paiements, comptes de stock, textes légaux, tout ce qui pourrait coûter de l'argent ou briser la confiance).

Transformez ces règles en un petit kit de textes que vous réutilisez partout. Gardez la formulation cohérente pour que les utilisateurs l'assimilent une fois pour toutes.

  • « Enregistré sur cet appareil. Nous synchroniserons quand vous serez en ligne. »
  • « Fonctionne hors ligne. Les modifications seront envoyées quand vous serez de nouveau en ligne. »
  • « Synchronisation en cours… »
  • « À jour. »
  • « Impossible de synchroniser. Nous réessaierons automatiquement. »
  • « Synchronisation en pause. En attente d'une connexion. »
  • « Nous avons trouvé deux modifications différentes. Choisissez la version à garder. »
  • « Votre choix est enregistré. Nous le synchronisons maintenant. »

Avant de développer la fonctionnalité complète, prototypez les écrans et le texte. Vous voulez voir toute l'histoire : modifier hors ligne, se reconnecter, synchroniser, et ce qui se passe en cas de conflit.

Un plan de test léger qui attrape la plupart des confusions :

  • Parcours en mode avion, de la connexion à la modification jusqu'à la reconnexion.
  • Modifier le même élément sur un second appareil pendant que le premier est hors ligne.
  • Reconnecter et observer ce qui change, ce qui reste, et ce que l'utilisateur est informé.
  • Tester un champ à haut risque qui déclenche un « demander ».

Si vous utilisez Koder.ai, le mode planification peut vous aider à cartographier les états hors ligne et rédiger les messages exacts, puis générer un prototype Flutter rapide pour valider le flux avant d'engager un développement complet.

FAQ

What should an offline-first app promise when I tap Save without internet?

Par défaut : enregistrer localement d'abord, puis synchroniser ensuite.

Quand l'utilisateur appuie sur Enregistrer, confirmez immédiatement avec un texte du type « Enregistré sur cet appareil. ». Ensuite, séparez l'envoi au serveur qui se fera quand une connexion sera disponible.

Why isn’t “I can see my edit” the same as “it’s synced”?

Parce que voir une modification à l'écran ne prouve que qu'elle est stockée sur cet appareil pour le moment.

« Synchronisé » doit signifier : la modification a été téléversée, acceptée par le serveur, et apparaîtra aussi sur les autres appareils.

What status states should the UI show for offline and syncing?

Gardez le nombre d'états petit et cohérent :

  • Online
  • Offline (enregistré sur cet appareil)
  • Reconnecting
  • Syncing
  • Synced
  • Needs attention (uniquement quand l'utilisateur doit décider)

Associez une icône à une courte ligne de statut près de l'action concernée.

What’s good UX copy for offline saves and sync progress?

Utilisez un langage simple et dites ce qui est sûr :

  • “Enregistré sur votre téléphone. Sera synchronisé quand vous serez en ligne.”
  • “Synchronisation des modifications…”
  • “Toutes les modifications synchronisées.”
  • “Impossible de synchroniser. Vos modifications sont toujours sur cet appareil.”

Évitez les termes techniques comme « queued writes » ou « pending mutations ».

What actually causes sync conflicts?

Un conflit se produit quand deux modifications différentes touchent le même élément avant que l'app ait pu synchroniser et comparer avec le serveur.

Causes courantes :

  • Modifier sur deux appareils
  • Deux personnes modifient un enregistrement partagé
  • Un appareil reste hors ligne longtemps
When is last-write-wins a good idea (and when is it risky)?

Utilisez last-write-wins seulement pour des valeurs à faible enjeu où écraser est peu coûteux, comme :

  • Lu/non lu
  • Ordre de tri
  • Présence ou « dernier vu ”

Évitez-le pour adresses, prix, textes longs, validations — tout ce que l'utilisateur percevrait comme une perte de travail.

How do you define “last” in last-write-wins without weird time bugs?

Préférez l'heure serveur.

Si les appareils décident du « plus récent » avec leur propre horloge, un appareil mal réglé peut écraser des données correctes. Avec l'heure serveur, « dernier » devient « dernier reçu et accepté par le serveur », ce qui est cohérent.

When should the app merge changes instead of picking a winner?

Utilisez la fusion quand les utilisateurs s'attendent à ce que les deux modifications survivent :

  • Données append-only (messages, commentaires, logs)
  • Champs différents d'un même enregistrement (fusion par champ)
  • Ajouts à des listes

Si un champ ne peut pas être fusionné, dites en une phrase ce que vous avez conservé et pourquoi.

When should you force a “Keep mine vs Use theirs” conflict dialog?

Demandez seulement quand se tromper coûte cher (argent, permissions, légal/médical).

Gardez le dialogue simple :

  • Deux boutons : “Conserver le mien” / “Utiliser l'autre”
  • Une courte description de ce qui a changé de chaque côté
  • Une rassurance : “Rien n'a été perdu. Choisissez ce que vous voulez garder.”
How do you prevent “my edit disappeared” support tickets after reconnecting?

Rendez visibles les modifications en attente.

Options pratiques :

  • Une ligne de statut « 3 modifications en attente de synchronisation »
  • Une petite liste avec les noms des éléments et des temps approximatifs
  • Un état “Needs attention” quand l'utilisateur doit résoudre quelque chose

Ajoutez aussi des mécanismes de récupération quand c'est possible (annuler, historique des versions, snapshots/rollback) — Koder.ai utilise des snapshots et rollback pour cette raison.

Sommaire
Ce que les utilisateurs pensent qu'il devrait se passer quand ils sont hors ligneLe modèle de base : sauvegardé localement, puis synchronisé plus tardD'où viennent les conflits (et pourquoi ils surprennent)Trois patrons de conflit : last-write-wins, merge ou demanderLast-write-wins : simple, rapide, et facilement mal comprisStratégies de merge que les utilisateurs peuvent accepterQuand demander à l'utilisateur : un dialogue de conflit qui n'effraie pasÉtapes : définir les règles, puis concevoir les écrans et le texteErreurs courantes qui génèrent des tickets supportChecklist rapide : l'utilisateur peut-il prédire ce qui va se passer ?Scénario exemple : deux modifications du même profil hors ligneProchaines étapes : écrivez vos règles et prototypez le fluxFAQ
Partager
Koder.ai
Créez votre propre app avec Koder aujourd'hui!

La meilleure façon de comprendre la puissance de Koder est de le voir par vous-même.

Commencer gratuitementRéserver une démo