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

Опционально могут быть добавлены:

Документация преследует следующие цели:

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

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

Поддерживать документацию в актуальном состоянии позволяет внедрение ее обновления в сам процесс разработки программного продукта, а именно:

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

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