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

Выше я лишь намекнула, о чем пойдет мой разговор, сейчас я распишу подробнее. Часто подход к разработке документации Docs as code воспринимается как что-то тяжеловесное, неповоротливое, сложное и даже страшное. Я постараюсь развеять это мнение или хотя бы повлиять на него. В одну статью я не уложилась, когда писала черновики, поэтому в этой статье я расскажу о существующих подходах к разработке документации (иногда негласных, но все-таки существующих), их особенностях, преимуществах и недостатках. В следующих статьях я расскажу про более практическую часть и использование Docs as code. Держитесь!

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

Подходы к разработке технической документации

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

К основным подходам относятся:

  • Single-source publishing, или принцип единого источника.

  • Docs as code, или документация как код.

  • Knowledge bases, или базы знаний.

  • Files, или файлы (не являются официальными названиями).

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

Single-source publishing

«Single-source publishing (принцип единого источника, публикация из единого источника) — это концепция публикации документов, согласно которой один и тот же контент может быть использован в разных документах или в разных форматах.»

Основные положения подхода:

  • Write once, publish everywhere.

  • Одна точка входа для изменений.

  • Генерация документации в разных форматах из исходных файлов.

Такие определение и положения можно встретить повсеместно в интернете. Я понимаю этот подход шире.

«Single-source publishing — это подход к разработке технической документации, когда единственный инструмент отвечает всем задачам жизненного цикла документации.»

Таким образом, мы имеем готовое решение, которое удовлетворяет требованиям:

  • Публикация одинакового контента в нескольких источниках.

  • Импортирование файлов разных форматов (HTML, XHTML, DOC, DITA, Help projects).

  • Распространение документации в форматах:

    • Веб-приложений (HTML5, XHTML).

    • Печати (PDF, DOC).

    • Настольных приложений (HTML Help, JavaHelp, RTF, DITA).

    • Мобильных приложений (eBook).

  • Редактирование документации в пределах проекта несколькими авторами.

  • Наличие ролевой системы.

  • Имеется пользовательский интерфейс как у продвинутого графического текстового редактора.

  • Поиск по контенту.

  • Является системой управления контентом.

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

Knowledge bases

«Knowledge bases (базы знаний) — это концепция ведения и управления важной информацией компании в инструментах по типу справочного центра.»

Основные положения подхода:

  • Использование инструмента по типу справочного центра.

  • Создание и поддержка логичной и понятной структуры разделов.

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

  • Улучшение через сбор обратной связи.

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

Files

«Files (файлы) — это концепция ведения научных публикаций, документации и другого текстового контента в графических текстовых редакторах, направленных на редакторскую работу с текстами и другим визуальным контентом.»

Самый негласный подход, который до сих пор существует. Один раз настроил стили, макросы и структуру отдельных документов в Microsoft Word, а потом используешь эти надстройки через создание копий этих документов.

Сейчас существуют и другие инструменты (под другие ОС, например), но отличает эти инструменты именно профессиональные функции и такой же профессиональный уровень пользователей, которые их используют. Сколько споров было разожжено из-за колонтитулов или ссылки на изображения!

Docs as code

«Docs as code (документация как код) — подход, согласно которому создание документации выполняется с помощью тех же инструментов, что и создание программного кода.»

Подход в свое время описали аж два человека: Энн Джентл (Anne Gentle) и Эндрю Эттер (Andrew Etter).

Основные положения подхода (из книги «Docs like code»):

  • Храните исходные файлы документов в системе контроля версий.

  • Создавайте артефакты документации автоматически.

  • Убедитесь, что надежная команда рецензентов тщательно проверяет документы.

  • Публикуйте артефакты документации без особого вмешательства человека.

Таким образом, нам необходим инструмент для работы с документацией, где мы:

  • Применяем сценарий жизненного цикла ПО к процессу создания документации.

  • Разрабатываем документацию по гибким методологиям, как и ПО.

  • Для создания документации используем технологии и инструменты разработки ПО.

Я специально оставила этот подход на конец, ведь теперь видна ключевая разница между подходами. А именно: мы сами определяем инструменты и их вид и функциональность. Определяем большую часть из этого, конечно, так как у компании уже есть технологический стек, бюджет и другое. Но многие инструменты — это open-source, и их можно переписать или дописать. Выбор ваш.

Преимущества и недостатки подходов

Сейчас можно поговорить о том, что же хорошего, а что плохого несет каждый из подходов. Теперь подход Docs as code встанет обратно на вторую позицию в повествовании.

Single-source publishing

Преимущества

  • Переиспользование контента.

  • Снижение ошибок в контенте за счет переиспользования.

  • Консистентность в стилях документов.

  • Не требует ресурсов на разработку отдельного инструмента.

Недостатки

  • Распространяются только на платной основе. 

  • Высокий порог вхождения.

  • Доступно в основном только для Windows.

  • Ограниченная функциональность, фича-реквесты могут не сработать.

Docs as code

Преимущества

  • Вовлеченность технических писателей в процессы создания ПО.

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

  • Автоматизация процессов документирования.

  • Гибкость функциональности за счет open-source.

Недостатки

  • Высокий порог вхождения.

  • Необходимость ресурсов разработки.

  • Допуск технических писателей к кодовой базе.

Knowledge bases

Преимущества

  • Возможно переиспользование контента.

  • Низкий порог вхождения.

Недостатки

  • Иногда распространяются только на платной основе.

  • Ограниченная функциональность, о фича-реквестах можно забыть.

Files

Преимущества

  • Мощный редактор.

  • Доступность.

  • Узнаваемость.

  • Применяемость.

Недостатки

  • Может потребоваться разработчик для своего макроса.

  • Несовместимость версий ПО.

  • Иногда несовместимость при использовании разного ПО для одного и того же документа.

Заключение

Когда мы рассмотрели основные подходы, можем выделить типы задач, для которых каждый из них подходит лучше всего. Определенно, это деление не панацея, и всегда будут исключения, но такое обобщение допустимо.

Критерии деления:

  • Целевая аудитория документации.

  • Открытость или закрытость документации для аудитории.

  • Направленность документации.

  • Количество документации.

  • Количество ресурсов на поддержку документации.

  • Специфика к типографике документации.

  • Порог вхождения для поддержки документации.

Задача/требование

Single-source publishing

Docs as code

Knowledge bases

Files

Документация для разработчиков: API, CLI

+

+

Документация для разработчиков: SDK

+

Внешняя публичная продуктовая документация

+

+

Внешняя приватная продуктовая документация

+

+

+

Внутренняя продуктовая документация

+

Внутренняя не техническая документация

+

Внешняя или внутренняя продуктовая документация без ресурсов на системность и автоматизацию

+

+

Небольшой поток документации

+

+

Большое количество специфических требований к документации в целом или к отдельным ее частям с малыми ресурсами на поддержку

+

Большое количество специфических требований к документации в целом или к отдельным ее частям с большими ресурсами на поддержку

+

+

Низкий порог входа в создание документации

+

±

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

В следующих статьях буду говорить только о подходе Docs as code. Часть 2 заденет конкретные решаемые этим подходом задачи и ключевые аспекты к его пониманию, а в части 3 опишу шаблоны по работе с инструментами для разной документации в этом подходе.