Как быть с документацией
Как быть с документацией

Введение

Документация в рамках ИТ‑проекта/продукта подчас имеет необычное исполнение. Есть проекты/продукты, где на первый взгляд с документацией всё хорошо, она выходит в рамках обязательств по контракту, но вот применять её очень сложно. Бывают и обратные примеры, когда документация оформлена отлично и написана грамотно, в ней всё понятно, но она очень сильно устарела. Иногда случается всё и сразу.

Не всегда понятно, как включить нового сотрудника в работу? Новичку приходится отвлекать более опытных коллег. Самый удивительный случай, это когда в ИТ‑проекте/продукте существует свой мифический «Петрович», который знает, что как устроено, и может помочь освоиться.

Постановка задачи

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

Суть

Для начала определим, кто в рамках ИТ‑проекта готовит документацию и где впоследствии её можно применять. Сразу оговорюсь, что подход по ГОСТ 34, ГОСТ 19 и другим регулирующим документам мне кажется очень даже неплохим, но нашей задачей будет именно формирование принципов.

Точки образования документации (кто составляет тоже укажем, но попозже)

Заказчик — формирует документацию по целям и задачам проекта. Её можно использовать как есть, но, на мой взгляд, лучше адаптировать к проекту в виде схем, пользовательских путей и т. п.

Функциональный заказчик — определяет последовательность действий в программном обеспечении для достижения результата. Любит описание процессов в нотациях (лучше всего заходит BPMN 2.0)

Руководитель проекта/продукта — определяет последовательность работ для достижения целей проекта/получения выгод от продукта. Редко когда пишет документацию, либо «борщит» пытаясь заполнить всё по PM BOK последней редакции, используя шаблоны полученные во время сертификации (сам грешил:))))

Аналитик — формирует задание на разработку. Есть разные подходы, лучше опираться на пожелания и требования команды. Разработчики, в большинстве своём, идут на встречу и объясняют, что именно им необходимо

Разработка — генерирует минимум документации, является её пользователем. Если в вашем проекте разработка занимается созданием документации, значит что‑то в нём не так. Берегите разработку, в команде есть аналитик, технический писатель, пусть они пишут

Тестирование — пользуется документацией от аналитика. Составляют свою, документация у них очень разнообразная, на мой взгляд самая сложная профессия в ИТ, после штатных психологов в ИТ компаниях у которых ЗП средняя по рынку региона:)

Инфраструктура — формирует документацию для эксплуатации и развертывания проекта/продукта.

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

Эксплуатация — применяет документацию, которую подготовили в инфраструктуре. Иногда на неё жалуются(

Кто создаёт документацию в рамках реализации проекта/продукта

Руководитель проекта/продукта составляет общую картину по проекту/продукту, в которую я включаю:

  • Цели проекта/продукта — как будет выглядеть результат проекта. Помогает при постановке задач проекта, формировании Epic и Story (на habr.com есть отличные статьи на эту тему).

  • Вехи проекта/продукта (дорожная карта) — контрольные точки реализации проекта. Помогают оценивать, туда ли мы идём, способствует ли результат конкретной вехи достижению целей проекта.

  • Карта пути клиента (Customer Journey Map) — описание пути клиента.

Архитектор проекта/продукта определяет технические границы проекта, а еще подходы и методы встраивания в единую архитектуру, в которой крайне желательно видеть:

  • Компонентную схему. Содержит структурную диаграмму, которая отображает структурные компоненты и связи между компонентами.

  • Интеграционную схему. Содержит точки взаимодействия с внешними и внутренними системами, подсистемами, компонентами.

  • Описание каналов взаимодействия. Содержит описание способов обмена информацией и характеристик каналов обмена.

Дизайнер описывает гайдлайн (Web‑UI kit) совместно с front‑лидом. Это очень важное замечание, так как гайдлайн позволит умерить полёт творческой мысли всех участников проекта/продукта (понимаю, что творцу и заказчику визионировать не запретить, но от чрезмерного креатива скорость и качество разработки будут очень сильно страдать. Что делать тестированию без гайдлайна — это отдельный и очень специфичный вопрос). А в задачи дизайнера входит:

  • Описание элементов интерфейса и компонентов

  • Описание шрифтов, цветов и т. д.

  • Совместный с разработкой подбор, в случае необходимости библиотеки компонентов (я видел, как стандартный элемент календаря, который есть в библиотеке, разрабатывали почти 3 месяца:), а время списывали исправно:)))

Бизнес‑аналитик составляет описание реализуемых процессов в системе. В частности:

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

  • Описание примеров использования (Use Case).

  • Описание данных для тестирования (Кто‑то скажет, что это вопрос тестирования, а я выражу свое несогласие. Бизнес‑аналитик общается с функциональным заказчиком. Ему предстоит демонстрировать функционал, с него и данные, а у тестирования своих задач хватает).

Системный аналитик составляет техническое описание реализации программного обеспечения:

  • ER диаграмма

  • Диаграмма последовательности (sequence diagram)

  • Описание методов взаимодействия (REST, SOAP, GRPC и т. д.)

  • Описание взаимодействия с брокерами сообщений и т. д.

Разработка. Тут есть нюанс. С моей точки зрения, у разработки должна быть только техническая документация, которая дополнит картину всей предшествующей документации. По идее, если от разработки требуется какая‑либо документация (выведем за скобки информацию по развёртыванию системы, правилам написания кода, соглашению о подходах), то на предыдущем этапе кто‑то немножко недоработал.

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

Инфраструктура. Сюда отнесём всё, что связанно с DevOps‑методологией (DEvSecOps) и эксплуатацией. Это диаграмма развертывания (deploy diagram), описание конфигураций системы (конечно лучше в git) и т. д.

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

Выделим подход к работе с документацией

Процитируем Agile‑манифест: «Работающий продукт важнее исчерпывающей документации». Теперь немного поделюсь своими соображениями по этому поводу.

  1. Чтобы продукт был качественным, как минимум необходимо чётко сформулировать цель проекта/продукта и выделить набор задач по достижению цели.

Пример: Нам всем в школе на уроке математики, а кому‑то и на уроках физики рассказывали: «Для решения задачи необходимо описать: дано, найти, решение». Мы дополним этот алгоритм из школы методом решения и получим, что должно исходить от руководителя проекта/продукта.

  1. От постановки задачи на разработку до написания руководства пользователя доходит только один документ — это пример использования. Обычно его пишет аналитик, причём с указанием основного пути, альтернативного пути и негативных сценариев.

Пример: Постановка на разработку функционала от аналитика ушла с описанием примеров использования. По ним системный аналитик сможет описать техническую часть реализации; разработка — понять, что хочет пользователь; тестирование — проверить правильность работы функционала; технический писатель — доработать руководство пользователя; а пользователь — разобраться, как работает функционал. Заметим, что большинство участников команды применяет на этапе постановки именно сформированный документ (!).

  1. Можно разбить свою wiki‑систему на 2 части. Это позволит понимать, что сейчас разрабатывается, а что уже применяется.

    • Работающий функционал. За него отвечает служба технической поддержки.

    • Разрабатываемый функционал, за который отвечает аналитик.

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

  1. Разработка должна формировать документацию только тогда, когда это действительно необходимо. У них есть свои очень важные задачи, которые за них никто не решит.

  2. Документ должен иметь ответственного.

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

Пример: Мои папа и мама! Я живу хорошо, просто замечательно. У меня все есть, есть свой дом, он теплый. В нем одна комната и кухня. Я без вас очень скучаю, особенно по вечерам. А здоровье мое не очень. То лапы ломит, то хвост отваливается. А на днях я линять начал. Старая шерсть с меня сыпется, хоть в дом не заходи. Зато новая растет чистая, шелковистая, так что лохматость у меня повысилась. До свидания, ваш сын, дядя Шарик.

Тяжело читать письмо из Простоквашино:))) Мой трудовой опыт показывает, что это самое цитируемое описание состояний дел на проекте.

Выводы

Документация при реализации ИТ-проекта/продукта необходима. Основной источник документов – аналитик. При правильном подходе и должном усердии можно поддерживать документацию актуальной. Важно помнить, что документации должно быть достаточно для понимания текущей ситуации и включения новых участников команды в процесс реализации ИТ-проекта/продукта. Всё остальное излишне.

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


  1. FlyingDutchman2
    17.08.2023 09:14
    +1

    Помогает при постановке задач проекта, формировании Epic и Story (на habr.com есть отличные статьи на эту тему).

    А ссылку дать можете?


  1. kost_tr Автор
    17.08.2023 09:14

    FlyingDutchman2 прошу прощения, думал что нажал кнопку ответить и уже после написал ответ, как удалить сообщение не нашёл(((

    Мне казалось что на Habr читал, продолжу искать, как найду отправлю сообщением.

    Если коротко то ситуация такая

    Необходимо проект разбить на Epic (у себя мы используем компоненты из архитектуры)

    Каждый компонент состоит из набора функций, необходимо раздробить его на Story (тут по разному можно делать, у себя мы отталкиваемся от времени на разработку, 2-3 дня максимум)

    Story уже наполняем задачами Бизнес анализ, Системный анализ, Дизайн, Фронт разработка, Бэк разработка, Базы данных, Инфраструктура, Тестирование, Авторская приемка (иногда применяются не все задачи)

    Баги при функциональном тестировании крепим к Story

    В итоге имеем очень понятную и связанную структуру.


    1. tempart
      17.08.2023 09:14

      Пользовательская функциональность затрагивает, как правило, несколько компонентов архитектуры. У вас эпики - компоненты.

      1. Где вы формулируете US, UC для этой функциональности, если у вас самый верхний уровень - компонент?

      2. Как внутри одного компонента можно делать US, если она обычно затрагивает несколько компонентов?

      3. Как можно внутри компонента описывать БА, если он охватывает весь продукт (несколько компонентов)


      1. kost_tr Автор
        17.08.2023 09:14

        Всё на самом деле довольно просто

        Пример возьмём из медицины.

        Есть система, например по неврологии

        Цель системы: Автоматизировать рабочее место врача невролога

        Компоненты (только пример, конечно их будет больше): Лечащий врач, Логистика пациента, Регистр Пациентов, Лабораторные исследования, Нейросеть (тренд), Инструментальные исследования, Мониторинг врачей, НСИ, Интеграция с внешними системами, BI, и т.д.

        Рассмотрим компонент Лечащий врач

        Цель компонента - ведение пациента во время лечения

        Задачи компонента:

        • Провести первичный приём

        • Назначить исследования

        • Получить результаты исследований

        • Проанализировать результаты исследований, получить рекомендации от виртуального помощника (сейчас тренд, надо отобразить)

        • Поставить диагноз и определить программу лечения

        • ...

        Переводим на язык User Story

        1. US Провести первичный приём - я как пользователь хочу провести приём пациента, получить историю болезни пациента, написать анамнез

        2. US Назначить исследования - я как пользователь хочу назначить исследования инструментальные, лабораторные, физикальные

        3. US Получить результаты исследований - я как пользователь хочу получить результаты исследований в историю болезни

        4. US Проанализировать результаты исследований - я как пользователь хочу получить рекомендации от ИИ по направлениям:

          1. Результаты исследований

          2. Лекарственные средства при выбранной нозологии

          3. Подборка статей в научном журнале по тематике

        5. US Поставить диагноз и определить программу лечения - я как пользователь хочу поставить диагноз (их бывает сразу много, но упростим для примера) и хочу получить подсказки от ИИ при назначении диагноза (помним, сейчас тренд)

        6. ...

        Одну US (смотри п.5) переведем в Use Case

        Цель: Поставить диагноз, получить рекомендации от ИИ

        Участники: Система, Врач, ИИ

        Стартовые условия: Пользователь Врач зашёл в карточку пациента

        Положительный сценарий 1

        1. Врач видит экран Карточка пациента (смотри картинка 1)

        2. Врач может нажать на кнопку получить рекомендации ИИ (смотри картинка 2)

        3. Система открывает экран Рекомендации ИИ (смотри картинка 3) - работа с экраном описано в Use Case 4 в Компоненте Нейросеть (ссылка)

        4. Врач может выбрать диагноз (смотри картинка 3)

        5. ....

        Альтернативный сценарий

        1. ...

        Негативный сценарий

        1. Система при вызове экрана Рекомендации ИИ не смогла:)

        2. На экран выводиться уведомление: "Произошла ошибка" (можно дополнить таблицей ошибок по бизнес логике, но сейчас излишне)

        3. ...

        Вроде всё

        Понятно что я упрощаю, но в целом думаю на ваш вопрос ответил, если нет, прошу задать уточняющий вопрос

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


        1. tempart
          17.08.2023 09:14

          Судя по описанию, компонент в системе - это микросервис, стало чуть понятнее.
          Не ушло главное моё непонимание. Вы проектирует якобы для одного компонента только на том основании, что в нём будут проходить большинство процессов. При этом затронуты другие компоненты - это очевидно из приведённых US/UC.

          Т.е., вместо того, чтобы описать пользовательскую функциональность как взаимодействие всех компонентов между собой, вы описываете как взаимодействие одного компонента со всеми остальными. Полное понимание процессов по конкретной пользовательской функциональности теперь только внутри одного компонента. Получаем, что все описания почти рандомно размазаны по компонентам. Каждый компонент теперь не понимает, что и зачем вот этот API в нём делает - надо идти к потребителю. А потребителей может быть более одного. То же самое, зачем компонент внезапно использует какой-то метод другого компонента. Теперь надо бегать по всей системе, искать "ответственный" компонент, чтобы сложить пазл.

          Если это так, то это полный кошмар для аналитика.
          Зачем вкладыватьверхнеуровневые (бизнес) артефакты в компоненты - не понимаю.
          В компонентах должен содержаться исключительно системный анализ. Описание логики, данных, API - всё то, что касается работы исключительно данного компонента


          1. kost_tr Автор
            17.08.2023 09:14

            Пример
            Пример

            Немного уточнений (US - это пользовательская история, UC - это пример использования, Компонент - это условный сервис микро или часть монолита для примера не принципиально)

            Основной смысл в следующем (рассмотрим пересекающиеся компоненты по US)

            В рамках US Поставить диагноз, получить рекомендации от ИИ вы верно заметили что участвуют несколько компонентов, Что бы их связать опишем канал (будут упрощения)

            Лечащий врач. - Точка входа пользователя

            Нейросеть (тренд). Канал - API GateWay - Нейросеть у нас в облаке, ест много ресурсов

            НСИ - API. Лежит в отдельной БД, пользуются все

            Регистр Пациентов - Брокер по событийной модели. При назначении пациенту врача, врач получает доступ к электронной медицинской карте пациента. Безопасность наше всё)

            Лабораторные исследования - Брокер по событийной модели. При назначении на лабораторные исследования (создаётся задача на сбор материала)

            Инструментальные исследования - Брокер по событийной модели. При назначении на инструментальные исследования (создаётся задача на исследования, формируется очередь расписания и т.д.)

            Объектное хранилище (где то надо хранить артефакты по результатам в виде понятном нейросети) - API все артефакты, результаты исследований должны сохраняться в него

            Итого

            В примере видно, что для системного аналитика работы много. Бизнес логика отдельно (комментарий выше), системная логика отдельно.

            За счет компонентов мы можем понимать построение системы, совместно с архитектором и/или лидом разработки уточнять каналы и форматы

            Я смог ответить на вопрос?


  1. anna_the_racoon
    17.08.2023 09:14
    +1

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