Состою в команде разработки сервиса совместного редактирования текста, который мы назвали Дельта. Расскажу, какие требования мы к нему предьявили перед разработкой и как их удовлетворили, как у нас реализован алгоритм и почему именно так. А также о том, как сервис работает на клиенте, как мы снимаем с него статистику и за какими числами следим в продакшене. Коснусь того, каких ошибок не следует допускать, разрабатывая ещё один свой совместный редактор текста.
У нас есть много контент-сервисов для разных нужд: записи логов встреч, проведения собеседований и другие. Требовалось сделать один встраиваемый редактор текста для всех этих сервисов. При постановке требований обсуждали много параметров, выбирая между plain text и wysiwyg. Обсуждали будущие характеристики масштабируемости, отказоустойчивости, встраиваемости, языки для реализации, сетевой транспорт (от webrtc до лонгполлинга на сервис-воркерах), окно ввода и, конечно, алгоритм. Мы рассмотрели несколько реализаций Conflict free Replicated Data Types и Operational transformation, сделали два прототипа и реализовали один из них.