Всем привет!
Так получилось, что пару раз на предыдущих местах работы я попадал на проект, который уже был запущен, но на него не было документации. Все знания по проекту были по кусочкам и у разных коллег, а некоторые части систем были «чёрными ящиками» (люди, владевшие информацией, уже уволились).
У многих в команде было представление на уровне «наша система существует, чтобы сделать клиентам хорошо», но нюансов реализации и цельной картины по проекту не было ни у кого.
Что делать, когда попал в проект без документации? Ответ простой — уходить!
А если серьёзно, то отсутствие документации — это большая возможность для прокачки скиллов — как хардов, так и софтов. Мне приходилось собирать информацию по крупицам, фиксировать её и минимизировать bus‑фактор.
Спустя время я отрефлексировал, как создавалась документация в условиях недостатка информации. Постараюсь в статье дать пошаговую инструкцию, чтобы облегчить жизнь тем, кто попадёт в аналогичную ситуацию.
В статье постараюсь придерживаться следующих рамок:
Статья написана для совмещённой роли системного и бизнес-аналитика, то есть необходимо восстанавливать документацию как бизнесовую, так и в части описания систем.
Будем считать, что документация на проект отсутствует или очень устарела — что ещё хуже, так как она может вводить в заблуждение.
Условимся, что в команде нет человека, который мог бы рассказать о всей системе в целом, но есть кусочное представление о её работе у разных коллег.
Чтобы статью было проще воспринимать, я постараюсь придерживаться легенды, что я попал в продуктовую команду на проект магазина детских игрушек (у которого есть и фронт, и бэк). Спойлер: в реальности я не работал в магазине игрушек, не ищите совпадений с работодателями, у которых был провал в документации.
Сразу бы хотелось оговориться, что в некоторых пунктах как вариант решения проблемы будет упомянуто самостоятельное чтение кода. Некоторые аналитики намеренно избегают этого. На самом деле многие фреймворки написания программного обеспечения базируются на паттерне MVC, и если понять подход данного паттерна, чтение кода становится кратно проще.
Ну и для поднятия настроения при чтении статьи я буду использовать мемы.
Итак, с чего начать восстанавливать доку
Так что же делать, с какими проблемами придётся столкнуться — опытным путем я для себя вывел минимальный и достаточный для погружения в проект объём шагов. Это своего рода чек‑лист с проблемами, решив которые, на мой взгляд, довольно глубоко можно погрузиться в проект и снизить bus‑фактор.
Я выделил следующие проблемы с документацией:
Нет зафиксированных бизнесовых сценариев, которые решает продукт, например, в виде User Story, что мешает вам в целом понимать, какие бизнес проблемы вы решаете своим продуктом.
Нет зафиксированного перечня сервисов, участвующих в проекте, и полной картины о масштабе трагедии.
Отсутствие зафиксированных архитектурных решений, как следствие — нет понимания, как взаимодействуют между собой микросервисы (через REST, SOAP, брокеры сообщений и т. п.). А может быть, вы выясните, что у вас и вовсе монолит.
Отсутствие сиквенс-диаграмм, которые в последнее время в аналитике стали чуть ли не обязательными, нельзя понять, какие микросервисы вызывают какие эндпоинты во внешнем мире и в какой последовательности.
На первом пункте при проработке бизнес-сценариев вы наверняка зафиксируете, какие сущности есть в проекте, но как они хранятся в базе данных — тоже важно понимать, в том числе для дальнейшего маппинга данных.
Если у вас нет зафиксированной логики работы сервисов, вам будет сложно анализировать инциденты, прилетающие с прода, поэтому этот пункт также важен.
Далее в ходе статьи разберём для каждого пункта данной дорожной карты способы решения и возможные варианты итоговых артефактов.
Определение бизнес-сценариев
Как мы ранее обусловились, по легенде аналитик попадает на проект онлайн‑магазина детских игрушек. На онбординге он не находит в условном Конфлюенсе описанных бизнес‑сценариев, которые покрывают разрабатываемое приложение. Я выделил для себя несколько шагов для решения:
Получить доступ к тестовому стенду системы и попробовать интуитивно понять, какой функционал есть в системе. Так можно зафиксировать часть реализованных User Story. На этом этапе вы сможете понять, насколько хорошо продуман UX‑дизайн и подсветить команде сложности навигации в системе.
Наверняка в нашем магазине детских игрушек есть не только возможность класть товар в корзину и оплачивать его. Вероятно, можно сравнивать разные товары, оценивать их, оставлять отзывы и т.п. Всё, что находим — фиксируем.Отдельным пунктом выделю определить круг стейкхолдеров продукта и подготовить вопросы для интервью. Иногда найти ответственного не всегда так просто, как кажется.
После того, как вы самостоятельно нашли какой‑либо объём сценариев в пункте 1 — их нужно провалидировать при помощи стейкхолдеров и членов команды. Вероятно, вы получите ряд уточнений.
Провести интервью со стейкхолдерами и представителями команды, которые ближе к бизнесу (менеджеры проекта/продукта) — здесь вы, вероятно, получите дополнительные сценарии, которые не нашли самостоятельно. Например, сможете узнать, что для разных ролей есть разные сценарии, и ваше мобильное приложение доступно не только покупателям, но и продавцам для сборки онлайн-заказов.
Отмечу, что этот набор пунктов нужно пройти итерационно несколько раз (кроме, пожалуй, второго пункта). В каждой итерации можно узнать всё новые нюансы.
В качестве артефактов фиксации бизнес‑сценариев выделю:
Зафиксированные User Story
BPMN‑диаграммы в одной из первых итераций
Зафиксированные Use Case для различных User Story
Появление данных артефактов позволит нам понять, а для чего вообще создавался продукт, погрузит нас немного в контекст. Когда будете рассказывать коллегам о зафиксированных сценариях и узнавать от них всё новые вводные, скорее всего, будете выглядеть примерно так:
Но расслабляться ещё рано, мы коснулись лишь вершины айсберга.
Определение перечня сервисов проекта
На предыдущем шаге мы поняли, какие бизнес‑сценарии покрывает наш продукт, пора задуматься, какие сервисы под капотом реализуют описанный ранее функционал. На моём опыте, самым продуктивным для фиксации перечня сервисов в проекте является:
Интервьюирование коллеги, стоявшего у истоков, он может вам помочь (но это неточно). Это может быть тестировщик, аналитик, разработчик или любой другой сотрудник. В начале статьи мы договорились, что знания у всех «кусочные». Примем допущение, что у коллеги мы всё-таки смогли получить часть информации.
Изучение системы контроля версий (условный GitLab) — позволит найти ещё часть сервисов, в которые контрибьютили ваши коллеги‑разработчики.
Пройтись по всем разработчикам и узнать, какие сервисы они разрабатывают/разрабатывали на проекте. После этого шага у вас должен быть более-менее полный перечень используемых сервисов.
Не забываем, что в начале статьи я упомянул, что часть команды уже уволилась. В процессе интервью «выжившие» могут не вспомнить сервис, который разрабатывал условный Вася, уволившийся два года назад, а его сервис ещё в проде. Тогда нам может помочь таск‑трекер (условная Jira). В эпиках создания сервисов может фигурировать информация о том, какие сервисы нужно было разработать или доработать. Вы увидите, что ранее Вася создавал сервис, о котором вам никто не рассказывает.
После исследования сервисов у вас как минимум должны появиться дополнительные артефакты:
Зафиксированный список сервисов, участвующих в разрабатываемой системе. На данном этапе можно их отображать просто квадратиками.
Найдены Swagger, ReDoc, WSDL документации по всем сервисам проекта.
Найдены примеры запросов (cURL‑ы).
Найдены хосты стендов, параметры аутентификации и авторизации.
Возможно, вам удастся раздобыть коллекции условного Постмана — это будет просто отлично, сильно упростите себе жизнь.
Теперь, вероятно, вы будете выглядеть как-то так:
К этому моменту будет примерно понятен масштаб бедствия — количество сервисов, которые вам нужно описать.
Определение архитектурных решений
После предыдущих двух шагов у вас есть представление, что клиенты могут делать в онлайн-магазине детских игрушек и из каких микросервисов на бэкенде он состоит. Пришло время выяснить, как взаимодействуют микросервисы между собой и узнать, как они общаются между собой: через REST, SOAP или брокеры сообщений. На этом шаге важно определить, между какими микросервисами есть взаимосвязь, а какие между собой не общаются.
-
Если у вас веб-приложение, начать проще всего самим. Через инструменты разработчика (на Windows это F12, скрин ниже) находим во вкладке Network, к каким эндпоинтам обращается фронтенд.
Сопоставляя имеющуюся документацию Swagger, можем понять, в какой сервис обращается фронт. Скорее всего, на этом шаге будет один сервис, но это неточно.
-
Всё, что за вашим первым сервисом back-end, вы не увидите через инструменты разработчика. Есть два пути уточнения:
— если умеете читать код, можно получить доступ к гиту сервисов, которые используются в вашей системе, и продолжить изучение самостоятельно;
— поочередное интервьюирование разработчиков по каждому сервису, который они дорабатывали. В чём суть: часто разработчики не знают, какие и сколько сервисов используют их эндпоинты, но куда ходит их сервис — они подскажут достоверно.
Пример: условный разработчик Вася делал gateway, который ходит в сервисы 4,5,6 — Вася вам это точно сможет сказать. А разработчик Миша, который разрабатывал сами сервисы 4,5,6 — достоверно не скажет, какие сервисы к нему обращаются. Поэтому в данном примере более ценным интервьюируемым будет разработчик gateway Вася, но и пообщаться с Мишей будет не лишним, так как его сервисы могут вызывать ещё какие‑либо внешние сервисы.
На этом этапе мы можем получить артефакты:
1. Схему взаимодействия микросервисов — в будущем она поможет нам зафиксировать диаграммы последовательностей. Здесь рекомендую рисовать схематично, какие сервисы взаимодействуют между собой, соединяя квадратики стрелочками.2. При отрисовке схемы взаимодействия сервисов над стрелочкой между ними указать эндпоинт, который используется в вызываемом сервисе. Над каждой стрелкой у вас может получиться несколько эндпоинтов. На этом шаге может не быть конкретики, в каком кейсе какой эндпоинт используется, но эти данные пригодятся нам в будущем.
3. Проверить все эндпоинты вручную через Postman или SoapUI. Важный нюанс: часто между сервисами используются различные механизмы аутентификации. Возможно, вы не сможете воспроизвести вызовы без знания кредов и способов аутентификации микросервисов друг с другом. В этом случае нужно дополнительно найти все креды, чтобы всё‑таки суметь сымитировать все необходимые взаимодействия между сервисами.
Картинка очень точно описывает моё состояние в момент, когда я решал проблему, что нельзя просто взять и узнать взаимодействующие между собой сервисы:
На первый взгляд это очень простая работа, но по факту она отнимает много времени. В процессе будьте готовы к большому количеству коммуникаций с коллегами.
Фиксация диаграмм последовательности
После предыдущего шага мы в целом знаем, как и какие сервисы взаимодействуют между собой. Мы, вероятнее всего, даже можем создать через Постман тестовый заказ, дёрнув соответствующую ручку. Но вызвав сервис напрямую вручную для создания заказа, мы не воспроизведём полностью Use Case клиента и явно можем упустить важные нюансы с точки зрения последовательности вызовов микросервисов.
-
Для полноценного воспроизведения Use Case с точки зрения бэкенда я использовал логи. Зная запрос с фронта на бэк (который мы нашли через инструменты разработчика на предыдущем шаге), — берём в логах данного запроса идентификатор запроса (как правило, его называют request_id) и далее фильтруем все логи по данному параметру. Так мы увидим все эндпоинты, задействованные в Use Case.
Если у вас в логах по какой‑то причине нет идентификатора запроса или он не «пробрасывается» через всю систему, после получения эндпоинта с фронта на бэк для всей дальнейшей цепочки запросов придётся либо изучать код, либо обращаться за помощью к разработчикам.
Далее мы сопоставляем все полученные на данном шаге эндпоинты и схему взаимодействия сервисов из предыдущего шага и получаем sequence-диаграмму.
Собственно артефактом после данного шага будет полноценная sequence-диаграмма. На этом шаге вы сможете полноценно вручную проходить клиентский путь через Постман или подобные ему инструменты. Ниже представлена всего одна упрощенная диаграмма последовательности, но у вас должно получиться несколько схем для различных Use Case.
На примере интернет магазина игрушек у вас появится как минимум диаграмма для онлайн-заказа, для оставления обратной связи по товару и рейтингу товаров. Наверняка отдельными будут диаграммы последовательности для ролей сотрудников магазина, где они будут заняты сбором онлайн-заказов.
В итоге у вас получится несколько диаграмм последовательности, и вы можете немного побыть Дмитрием Нагиевым:
Определение структуры моделей данных
После того, как мы поняли бизнесовые сценарии нашего онлайн‑магазина игрушек, разобрались, какие сервисы под капотом вызываются для различных Use Case, нам предстоит узнать, какие вообще данные у нас хранятся в базе данных (далее — БД). Часть сущностей, которые есть в системе, мы смогли определить на шаге проработке бизнес-сценариев.
Наверняка ни один магазин не обходится без объектов Заказ, Платёж, Чек. Но какие ещё есть объекты в нашей системе, какие параметры данных объектов мы храним в БД — это очень важные вопросы для понимания возможностей системы.
Для начала нужно уточнить у разработчиков, какая у вас база данных: реляционная или не реляционная. Условимся, что у нас реляционная БД, пусть это будет PostgreSQL.
Далее самым верным шагом будет изучить структуру данных через подключение к БД (например, через терминал или инструменты визуализации интерфейса наподобие DBeaver).
Альтернативным сценарием будет самостоятельное чтение кода (Буква «М» из паттерна MVC, который упоминался в начале статьи).
Здесь можно погружаться глубже и выяснять параметры сериализации, десериализации данных, какие индексы на какие столбцы навешены, но оставим это для следующих итераций.
На этом этапе в качестве артефакта, у вас появится описанная модель данных. Например, в виде ER-диаграммы.
После данного шага ваш разработчик уже не сможет говорить, что только он знает схему данных.
Теперь, задокументировав эту информацию, вы приоткрыли завесу тайны и знаете о структурах объектов.
Определение логики работы сервисов
Теперь мы знаем про наш онлайн-магазин игрушек очень много, но осталось устранить важный пробел — начать понимать внутреннюю логику работы сервисов (в том числе маппинг параметров между сервисами).
Условно, какие параметры из заказа вставляются в объект платежа перед отправкой в платёжную систему и какие параметры платежа и заказа нужно отправлять в провайдер чеков, чтобы в будущем не попасть на неприятный разговор с Федеральной налоговой службой со всеми вытекающими последствиями.
Здесь на самом деле не так много вариантов, как получить информацию. Я для себя зафиксировал два варианта:
Самостоятельное чтение кода и последующую валидацию полученных блок-схем через тест‑кейсы.
Интервьюирование разработчиков сервисов системы.
В качестве артефакта здесь подойдут любые схемы, которые отразят логику работы приложения. Я встречал случаи, когда логику описывали просто текстом, но мне удобнее читать по блок-схемам, тут, как говорится, «на вкус и цвет».
Вторым артефактом может быть таблица маппинга данных в различных сервисах.
После фиксации логики работы приложения вы выглядите примерно как этот котик. Вы знаете всё про онлайн-магазин игрушек, ну, или почти всё.
Вместо выводов
Вы прошли важные шаги и восстановили документацию и теперь знаете лучше всех в команде, как работает продукт. Давайте оглянемся назад и честно ответим, кому нужен был данный марафон с восстановлением документации?
Нужно отдавать себе отчёт, что ваша работа (сбор информации и документирование) — в первую очередь была для себя. В зависимости от культуры в команде и уровня зрелости участников — отдельной задачей будет продать результат работы команде и объяснить, зачем это надо (они жили без вас в хаосе отсутствия документации, и их всё устраивало).
Стоит помнить, что проделанная вами работа не имеет никакого смыла, если не привить культуру документирования. В разработке всё очень динамично меняется, и документация «протухнет» очень быстро. А неактуальная документация порой хуже полного отсутствия документации.
На первый взгляд, статья содержит всего лишь шесть пунктов, что может создать впечатление, что восстановить документацию по данному роадмапу легко и быстро. На практике это долгий и трудоёмкий процесс. Не забывайте, что параллельно с восстановлением документации проект продолжает развиваться, и новые фичи также требуют аналитики. Это значит, для закрытия долга по документации нужно «бежать» быстрее всей команды, иначе размер техдолга останется тем же или будет увеличиваться.
В том, что я попадал в ситуацию, где на проектах нет документации, есть и моя вина, я не задавал такие вопросы до трудоустройства в данные компании. Теперь на собеседованиях я всегда спрашиваю про наличие и величину технического долга документации и о том, как выстроен процесс работы с техдолгом.
Приходилось ли вам попадать в команду, в которой большой долг по документации? Если да, поделитесь в комментариях, в какой роли вы были и как справлялись с информационным вакуумом?
Комментарии (24)
alexhu
28.10.2024 14:27Очень хочется иметь схему взаимодействия модулей / пакетов / блоков кода. То есть бизнес процессы уже с кодом. Видеть и процессы и код почти одновременно. Тут мы сдвигаемся в крупноформатное визуальное программирование и будут возражения - от кому это надо, как это поддерживать в актуальном состоянии, до - а как это отлаживать? И ещё это полностью не помещается на экране, убогость ограниченности отображения в стандартных символах/ фигурах, дубляж информации в коде и в диаграммах, проблемы синхронизации кода и диаграмм.
Возражений много, только это сильно облегчает работу всей команды. И даже если вы один на проекте, то вспоминается многократно быстрее, сохраняет множество часов и нервов. Хотя конечно, что бы задокументировать, нужно тоже потратить время и иногда возникают ощущения, что все эти труды впустую и это никому никогда не пригодиться.
Ruslan964 Автор
28.10.2024 14:27Полностью согласен. "Проблемы" документирования тоже есть...
Из ваших аргументов в пользу документирования добавлю ещё, что документация кратко ускоряет онбординг новых коллег
eurocodersl
28.10.2024 14:27В 2024 появился чит, который работает - собрать имена всех файлов, пути, классы, сигнатуры методов (без имплементации), структуру баз данных ну и целиком код из роутинга ендпоинтов. Собирается шелл скриптом / батником автоматически в один текстовый файл, потом этот текстовый файл загружаем в клод соннет 3.5 либо оупенаи о1 - и оно все досконально рассказывает о чем этот проект. Ну и дальше когда понятна о чем проект в целом собирать таким образом уже отдельные модули / неймспейсы уже с реализацией и опять спрашивать у ллмки загрузив контекст. Ещё весной-летом это всё было лажей и не работало, последние пару месяцев реально работает. Но, важно, чтоб кодовая база более ли менее следовала базовым кодинг стандартам по неймингу и имела более ли менее вменяемую архитектуру.
Ruslan964 Автор
28.10.2024 14:27Если LLM развернут на внутренних серверах, то наверное можно провернуть такое (я не пробовал), но если использовать условный chatGPT, который на стороннем сервере - то могут возникнуть вопросики от службы безопасности...
Если я правильно понял, то сами интеграции между сервисами (кто кого и в какой последовательности вызывает) - все равно придётся описывать вручную?
Но в целом идея минимизации трудозатрат интересная)
eurocodersl
28.10.2024 14:27В моем случае я просто попросил Клода написать мне батник который пробежится по проекту и соберет все сигнатуры под конкретный ЯП проэкта, запускал этот батник и скармливал ллм мол "о чем тут все, опиши архитектуру". При чем информации в какой последовательности и как у него в принципе не было, я это не описывал вручную, это он все домысливал сам, но совершенно правильно! Если там какие-то неочевидные интеграции или сложные последовательности на фронте, то ему видимо придется скормить ещё кусочки фронта, но в моем случае хватило просто апишки (немаленькая под сотню ендпойнтов) - целиком роутинг, целиком некоторые особо хитрые контроллеры, все остальное чисто сигнатуры . Ну и на текущий момент сэлф-хостед ллм решения типа ЛЛамы скорее всего подобное не потянут и много где нагаллюцинируют. Это большое преимущество новых моделей от топ провайдеров интеллектов - им даже особо описывать вручную ничего не надо, они до всего сами докумекают по контексту.
Ruslan964 Автор
28.10.2024 14:27интересное решение)
знаю, что сейчас делают аналогичное решение на внутренних мощностях в одном из банков))
в части документирования диаграмм последовательности (а это важный аспект документации) - не пробовали тоже как-то автоматизировать процесс?
или у вас монолит и в целом документация одного большого сервиса/модуля покрывает условные 99% запросов клиентов?eurocodersl
28.10.2024 14:27Ну да, в кровавом энтерпрайзе подобное решение типа "а давайте отправим структуру нашего кода в облака заклятым друзьям", пожалуй загнется ещё на уровне согласования с СБ. :) Да и в целом ограничения по контекстному окну начнут играть большую роль. Но учитывая скорость с которой опен-сорс ллм догоняет китов, в очень ближайшем будущем подобная авто-документация должна стать стандартом. Ну и конечно всякие банки, мобильные операторы и яндексы здесь будут первыми.
Конкретно это решение - достаточно крупный монолит, так что одной общей документации хватает. Достаточно путанный монолит с сильным коуплингом, но с хорошим следованием нейминг-конвенциям, а это для ЛЛМ пожалуй самое важное.
В bpmn-нотацию УЖЕ может но ПОКА ЧТО так себе, тут придется в режиме дискуссии уже с ллмкой работать. Т.е. xml для импорта в какой-нибудь draw.io он создаст, дорожки, действий и шлюзы понатыкает, но пока что это всё достаточно криво и доделывать придется. Ну в моем случае это было и не надо, это я уже так для интереса посмотрел сейчас.
ElenaShliaga
28.10.2024 14:27Спасибо, очень интересная статья. Как раз пишу документацию с нуля на новом месте. Думаю, воспользуюсь частично вашими гайдами)
Ruslan964 Автор
28.10.2024 14:27рад, что статья поможет вам)
если в ходе написания вашей документации с нуля на текущем проекте - появятся инсайты по возобновлению документации - буду рад, если поделитесь в комментариях)
ElenaShliaga
28.10.2024 14:27Ой, там столько этой документации пилить. Мы пока начали с пользовательской. Ваша же статья ближе к внутренней. Но внутреннюю мы тоже обязательно будем писать!
UnclShura
А можно поинтересоваться - зачем вам вся эта макулатура? Что есть конечная цель? Ну вот допустим у вас на руках большой проект. В нем 100500 sequence diagrams, описана схема данных (а так ее что не видно через FK в SQL базах или по связям в ORM?) и все такое. Что теперь вы будете с этим делать и что будут делать другие? Давайте оставим за скобками проблемы аудита. Нужна документация программистам? Они будут ее читать? Не джуны, а все остальные. Если не будут, то скорее всего она вам и не нужна. Я ничего не скажу про аналитиков - им надо - вот и пусть пишут и поддерживают. Мне кажется, что единственная документация - это код и все что из него можно сгенерировать. Все остальное или не нужно или устарело.
Ruslan964 Автор
код - это отличная документация в рамках системы, если у вас монолит, а если система распределенная (система состоит из множества модулей-микросервисов)?
например, у вас 100 микросервисов - прилетает баг с прода...
как без документации локализовать проблему?
как понять, что пофиксить нужно "вон тот" микросервисе, мы ошиблись и необходимо доработать логику "вот так"
UnclShura
В рамках микросервисов есть OpenAPI - там и код и документация в одном. Я к тому, что даже если вы доку написали один раз ее потом всю жизнь надо поддерживать. У вас есть на это бюджет, желание и ресурсы? Если нет, то выход один - код лучшая документация (@ValeryGL). Просто не надо разделять их. Отдельная документация устаревает в момент сохранения файла (а то и раньше). В итоге дока как-бы есть, но ее как бы и нет. По этому только доко-генерация (которую можно и не делать) и редкие статейки на вики, которое никто не читает :)
Ruslan964 Автор
Согласен с тем, что разделять код и Доку не нужно, но одного кода не достаточно. Подтверждение в моём примере выше с багом и сотней микросервисов.
Основной ваш посыл в том, что документацию дорого содержать в актуальном состоянии - ещё дороже не иметь документацию. Посчитайте насколько дешевле онбординг новых сотрудников при отсутствии документации , посчитайте насколько дороже анализ и фикс багов.
Возможно, вы правы, что описание излишне, когда весь проект - это пара сервисов, но в крупном проекте без актуальной документации крайне сложно. О том, что необходимо прививать культуру документирования - это также отмечено в статье
Advisers
"Мне кажется"
- главное, чтобы это кому-то было действительно реально нужно - очевидно что это и те..., кто придёт читать тот код, который был написан ушедшим разработчиком... и да, важно, чтобы сама документация была предельно простой и понятным образом организована..., чтоб те, кто будут ею пользоваться не теряли время на доп. обучение...
Ruslan964 Автор
Да, высокое качество документации - это особый навык
ValeryGL
Начав читать ваш комментарий, уже придумал на него смешной аргумент "вы еще скажите, что код - лучшая документация".... упс, так уже шутили?
ValeryGL
У разработчика два состояния:
через месяц после релиза, если сам сумел разобраться в своем или соседском коде - "там все понятно, и вообще код - лучшая документация". Ну и сразу после своего релиза то же самое.
А если не разобрался - "там ничего непонятно, пусть аналитик нам все расскажет"
Ruslan964 Автор
Как по живому прям...)
Vpan
Если вы работаете в компании-интеграторе, то у вас нет доступа к проду и к данным с прода (если он есть, то нужно сделать все, чтобы от него избавиться, так как последствия утечки или изменения чего-либо на проде у заказчика могут быть катастрофическими).
Есть "бледная копия настоящей системы" на средах DEV и TEST в виде того компонента, с которым работает ваша фирма по договору и, если повезет, парочки соседних компонентов, наиболее значимых, но не всех. При этом компоненты "мертвые": там нет пользователей, реальных записей тоже (только оставшиеся с прежних времен какие-нибудь тестовые), отсутствуют логи и т.д. Понять, как работает система при таких вводных - нетривиальная задача.
Программисту документация действительно не нужна, ему нужна задача. А поставить вы ее как системный аналитик не можете так как просто не от чего оттолкнуться.
gun_dose
Это работает ровно до тех пор, пока ты пишешь код, который не используется нигде повторно. Как только ты пишешь что-то, что должно использоваться многократно, тебе нужна документация. Причём в первую очередь у документации должна быть очевидная точка входа, где будет расписано, что к чему.
Например, есть фронтенд-приложение, которое общается с бэкендом, используя авторизацию через JWT-токены. В таком случае имеет смысл написать свой http-агент, в который будет зашит домен бэкенда плюс логика валидации и обновления токенов также должна быть зашита в агент. Пока ты этим пользуешься, всё хорошо, но потом приходит второй разраб, и когда ему надо будет сделать запрос на бэк, он напишет запрос через fetch, а токены валидирует и добавит в запрос вручную. Потом через неделю выяснится, что обновление токена у него вообще не было реализовано, и он потратит на это ещё день вместо того, чтобы сразу взять готовый агент. И вот тут как раз становится понятна роль документации: там должно было быть ясно сказано, что для http-запросов нужно использовать агент, который лежит вот там. То есть докуменация не должна объяснять работу кода, а должна регламентировать использование типовых решений для тех или иных задач.
Ну или компонентный дизайн - он вообще не будет работать без документации. Пока нет списка компонентов, каждый фронтендер будет делать свой компонент для одних и тех же задач.
Yura_PST
Проект сотни тысяч строк, разобраться что в нем происходит - много месяцев.
Для подобного проекта, документация несколько сотен страниц - за несколько недель можно вникнуть.