Офлайн-режим: как мы синхронизируем 40 000 задач без конфликтов
Настольное приложение работает без сети, а правки двух людей в одной задаче сходятся сами. Рассказываем, как это устроено и где пришлось пойти на компромисс.
Офлайн-режим просили с первого года: в поезде, в самолёте, на объекте без связи. Сложность не в том, чтобы сохранить правки локально, а в том, чтобы потом свести их с правками других людей.
Правка - это операция, а не снимок
Приложение хранит не состояние задачи, а журнал операций: «название стало таким», «исполнитель сменился», «добавлен комментарий». При восстановлении связи журнал отправляется на сервер и применяется по порядку.
Конфликты по полям
Если два человека поменяли одно и то же поле, побеждает более поздняя правка, а проигравшая остаётся в истории задачи с отметкой. Конфликты в разных полях не конфликтуют вовсе: название от одного и срок от другого сходятся без вопросов.
{ "op": "set", "task": "WEB-142", "field": "due",
"value": "2026-08-30", "at": "2026-07-15T10:31:08+03:00", "by": "u_418" }Где компромисс
Текст описания сводится по абзацам, а не по символам: если двое правили один абзац, сохранятся обе версии подряд, и человек выберет сам. Это проще и честнее автоматического слияния, которое иногда выдаёт бессмыслицу.
Лучший конфликт - тот, который пользователь не заметил. Второй по качеству - тот, который он может разрешить за пять секунд.
Офлайн-режим вышел в версии 4.9 и доступен на всех тарифах.
Следующая статья: Почему мы перешли на двухнедельные циклы и не вернёмся