Подобно безумному исследователю, я вот уже пятый год пытаюсь создать идеальную продуктовую документацию. Но, раз она всё еще не идеальна, значит я что-то делаю не так. Вот про это и будет статья.

Хочу очертить тот путь, который мы прошли, и рассказать о том, какие решения принимали, и что из этого вырастало.

Коротко о продукте

"Юнидата" занимает нишу в области управления ключевыми данными бизнеса. С помощью нашей системы вы можете объединить данные из всех источников, проверить и исправить их, а впоследствии и регулировать работу с данными. Всё это помогает бизнесу быть уверенными в важных данных, а значит, снизить потери от ошибок и нестыковок.

"Юнидата" - большой и сложный продукт, да и управление данными не из простых. Сама суть проекта рождает множество нюансов и вопросов, которые нужно отражать в тексте. Это одна из причин, почему наша документация усложняется с каждым релизом.

С чем мы работаем

Сегодня объем комплекта нашей документации перевалил за миллион символов – по объему это сопоставимо с первыми двумя томами «Войны и мир»:

Таких комплектов у нас много – по одному на каждый релиз:

А с недавнего времени мы ещё создаем английскую локализацию:

Первый этап - простой

В начале было слово Word. Задачи были простыми и классическими: описать все нововведения релиза, исправить возможные ошибки, и сделать из исходников набор PDF. Когда начинался новый релиз, то нужно было скопировать набор исходников, и уже в нём продолжать, а старые версии оставались как бэкап.

Тогда появились:

  • Метаданные. В инструкциях фиксировали дату изменения, номер релиза, задачу и комментарии. Метаданные оказались крайне полезными.

  • Двойная навигация (содержание + предметный указатель). Практика показала, что предметный указатель почти не используется.

Со временем релизов стало больше, а сам комплект стал расширяться. И пользователи столкнулись с проблемами навигации по огромным плоским документам:

  • Неудобно искать связанные статьи в нескольких документах.

  • Тяжело найти нужное примечание.

  • Скриншоты в PDF мелковаты.

  • Все вложения были в виде текста.

Второй этап - затейливый

Когда неудобства Word'a достигли критической массы, я начал искать альтернативные решения. Их оказалось довольно много, и делились они на разные категории:

  • Расширения для Word и другие текстовые редакторы.

  • Технологии единого источника.

  • Генераторы статичных сайтов.

  • Вики-движки.

После долгих размышлений и тестов я остановился на вики-движке под названием Dokuwiki, так как он отвечал многим критериям и хотелкам. Dokuwiki позволил:

  • Разворачивать вики локально. Это особенно полезно при размещении продукта и справки в закрытом контуре.

  • Расширить функциональность через плагины.

  • Создать собственный дизайн страниц. Я изменил почти всё, до чего дотянулся - включая шрифты, пропорции страниц и поддержку мобильных устройств.

  • Распределить доступ к контенту для разных ролей пользователей.

  • Разрешить конечным пользователям размещать собственную проектную документацию рядом с основной документацией.

  • Удобно работать с картинками и таблицами. Не идеально, но удобно.

  • Переехать на новый инструмент сравнительно быстро.

Мы потеряли только метаданные, но этот вопрос потенциально можно решить несколькими способами.

О выборе можно было бы говорить долго, посравнивать инструменты, но я не уверен, что это интересно. Если быть кратким, то на выбор повлияло: простота инструмента, развитое сообщество, широкие возможности и лёгкость установки проекта.

Казалось бы, должен наступить рай в царстве документации. Но нет. Мы ещё не отказались от вордовских документов, теперь релизы делались сразу в двух системах. Сначала классически, а потом переносилось в вики. В конце релиза нужно было создать набор PDF из ворда и сформировать архив с вики. Вроде как сами себя переиграли.

Почему так?

  1. Генерация PDF. Dokuwiki умеет в генерацию, особенно со специальным плагином, но структура страниц и обломанные перекрестные ссылки не подходят.

  2. ГОСТы. Мы должны быть удобными для тех, кто пишет гостовскую документацию на основе продуктовой. Бизнес ещё не готов отказываться от гостовской документации, как и от PDF.

Но есть и позитивный момент. Мы сделали в продукции контекстную справку вики. Теперь заказчик может установить у себя продукт, локально развернуть вики, указать хост, и перейти из определенного раздела продукта на страницу, в которой описывается именно этот раздел. После поисков в PDF или распечатке это кажется колдовством.

Такая схема работы могла бы жить долго, но продукт продолжает развиваться, и перед нами встают новые задачи.

Третий этап - современный и модный

Первой, и очень серьёзной задачей, стал перевод всего нашего наследия на английский язык. Если бы мы писали книгу, то мы бы просто перевели её и на этом выдохнули. Но документация это текст, который меняется постоянно. Нужно отслеживать правки в оригинале и тут же применять их в переводе, нужно обновлять скриншоты сразу в двух местах и т.д., и т.п.

Второй задачей стало изменение подхода к инструкциям. Признаться, мы хотим уйти от анатомического описания каждой кнопки, и от слабо связанных между собой инструкций. Хочется не только фиксировать ход разработки, но и улучшать качество текста.

Затем мы выпустили новое поколение продукта, и фокус документации на вордовских документах ослабел. Мы решили постепенно переходить к формату онлайн-справки, а, значит, справка должна быть не только на двух языках, но и позволять переключаться между релизами продукта. Это стало третьей задачей.

Мы пытались играться в Dokuwiki с пространствами имён и хостами. Как и ожидалось, это всё подходит только в качестве временного решения. Если работать с локализациями ещё можно, но вот управление версиями документации в Dokuwiki очень неудобно. Тем не менее, мы пока ещё работаем с Dokuwiki.

Новые задачи создают ряд проблем, ломают удобные схемы, вгоняют в фрустрацию - в общем, делают всё, чтобы мы переходили на более зрелый подход к документации. Таким подходом я считаю концепцию Docs as code.

Новый инструмент нашелся на удивление быстро. Альтернатив было не больше 5 штук, и я остановился на Sphinx-doc. Что уже получилось сделать:

  • Мы развернули собственный проект в Sphinx и разместили его в Gitlab.

  • Удалось сделать такой же дизайн страниц, как в нашей Dokuwiki.

  • Вернули метаданные в виде комментариев. reStructuredText это позволяет.

  • Организовали совместную работу. На этот раз не только с техписами, но и с разработчиками.

  • Организовали менеджмент контента на разных языках.

<Сейчас мы здесь>

Нам предстоит ещё несколько доработок проекта, прежде чем мы полностью мигрируем на Sphinx.

В планах:

  • Поддержка и переключение i18n.

  • Поддержка и переключение релизов документации.

  • Упрощение создания таблиц.

  • Генерация PDF, и настройка их шаблонов.

  • Настройка гугл аналитики.

  • Автоматическая проверка ссылок.

  • Что-то ещё, что мы пока что не увидели.

Сегодня мы пишем документацию сразу в трёх видах. PDF документация должна будет со временем появляться не через Word, а из Сфинкса. Онлайн-справка должна смениться с Dokuwiki на Сфинкс.

О минусах и точках роста

И в завершение немного о наших недостатках и проблемах. Я считаю, что этим тоже важно делиться.

  1. Мы вынуждены выстраивать приоритеты таким образом, что улучшение качества текста остаётся на нижних позициях. Это следствие гонки за релизами, работы над переводами, и других не менее важных активностей. Потенциально в обозримом будущем этот момент будет улучшаться.

  2. Документация рассчитана только для 2 категорий пользователей, и не учитывает интересы еще нескольких категорий. Мы начали работу над исправлением этой ситуации, но какое-то время проблема еще будет сохраняться.

  3. Нам сложно собирать обратную связь по документации от заказчиков. Тут всё просто: никто не будет бесплатно и просто так анализировать насколько чтение было приятным, понятным и удобным. Поэтому нужно работать с косвенными признаками, в том числе, с гугл аналитикой.

  4. Слишком быстрые изменения в продукте. Это плохо влияет не потому, что мы не успеваем документировать, а потому, что любой устоявшийся текст может быть неактуальным уже через месяца после написания. Часть усилий будет просто улетать в трубу.

  5. Нехватка рук. Болячка повсеместная. У нас она выражается в том, что у нас не хватает ресурса для инженерной поддержки процесса документирования. Тот же Sphinx буксует, так как нужно довольно много времени потратить чтобы настроить всё как дóлжно.

Я рассказал только про развитие основного текста документации. Ещё мы экспериментируем с обучающими видео и другими форматами. Возможно, в следующий раз поговорим об этом.

Комментарии (12)


  1. StVorpensi
    12.08.2021 19:15
    +1

    На вершине той горы, куда поднимается всё айти сообщество разными путями, документация по проекту является тождественной самому проекту


  1. terein
    12.08.2021 21:30

    Со скринами "как было" и "как стало" было бы понятней стоит ли игра свеч или нет. Можете пошарить?


    1. InstaHeat Автор
      12.08.2021 22:16

      в смысле - вордовые документы и вики?


      1. terein
        13.08.2021 12:38

        Да, и переходы на разделы wiki из продукта


        1. InstaHeat Автор
          13.08.2021 14:11
          +2

          Могу лишь намёками показать. Сфинкс в стоке выглядел примерно так.

          Я его доработал до такого состояния:

          В продукте кнопка выглядит так:

          Ничего особенного, обычная кнопка-ссылка, которая для каждого экрана своя, что и позволяет переходить адресно. Кнопка находится на правой части экрана и вылезает при наведении. Не торчит, как могло бы показаться))


  1. terein
    12.08.2021 21:32

    А описание решений где ведёте? Если нужно в нескольких местах продукта выполнить синхронные настройки, например.


    1. InstaHeat Автор
      12.08.2021 22:21

      У нас есть руководство по настройке. Как правило, если что-то подобное есть, то всё хранится отдельной инструкцией в этом руководстве. Но вообще, если говорить по хорошему, нужно А) улучшать нашу документацию в этом плане, Б) стараться избегать таких решений в продукте


  1. Malizia
    13.08.2021 06:07

    Для "Docs as Code" мы взяли AsciiDoc формат, тулзой AsciiDoctor перегоняем в HTML. На Ruby написали скрипт конвертации .adoc в .html с возможностью добавления навигации по файлам и поисковых индексов. Добавили возможность синхронизации локальной HTML документации с Confluence, запускается через Jenkins. Документирование включили в требования для завершения задачи.

    В целом, процесс прозрачный - реализовал полезный функционал, описал в AsciiDoc формате, залил в репозиторий. Остальные могут получить оффлайновую версию документации в HTML формате запуском одного скрипта. Актуальная версия всегда есть в Confluence.


    1. InstaHeat Автор
      13.08.2021 14:13

      Много времени заняла доработка? И, я так понял, у вас нет необходимости генерить pdf?


      1. Malizia
        13.08.2021 16:26

        месяца 1.5-2, до разработки я не знал Ruby, HTML, CSS, javascript, etc. PDF генерировать нет необходимости, но AsciiDoctor умеет в PDF (https://asciidoctor.org/docs/asciidoctor-pdf/). На крайний случай, можно найти конвертеры HTML->PDF.


        1. fiddle-de-dee
          17.08.2021 12:40

          Справедливости ради, Asciidoctor поддерживает, как минимум, 5 pdf-ориентированных технологий. Для разных случаев от генерации ГОСТовской документации до создании дизайнерских листовок. Поэтому экстравагантные решения типа HTML->PDF, возможно, излишни. Хотя... всякое бывает

          Подскажите, пожалуйста, чем пользовались для публикации в Confluence?


          1. Malizia
            17.08.2021 13:14

            Confluence REST API + пара костылей для обхода ограничения "заголовок страницы есть уникальный идентификатор".