Нужен ли технический проект при разработке?

21.07.26

Управление ИТ - Стандарты и документация

«Зачем писать бумажки, если можно писать код?» — этот вопрос я слышу на каждом втором проекте. В статье разбираю на живом примере — подсистеме динамических констант, прошедшей путь от идеи до поставки с формами, ролями и юнит-тестами, — что реально дает технический проект, когда он окупается за первую же неделю, а когда превращается в карго-культ. Отдельно — почему в эпоху ИИ-ассистентов технический проект внезапно стал нужнее, а не наоборот.

С чего все началось

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

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

Коллега, увидев это, спросил ровно то, что вынесено в заголовок: «А зачем? Подсистема на три метода. Ты бы уже код дописал».

Дописал бы. А потом переписал бы. Дважды. Ниже объясню, почему я в этом уверен, — но сначала договоримся о терминах, потому что половина споров про ТП происходит из-за того, что спорящие называют этим словом разные вещи.

 

Технический проект — это не техническое задание

ТЗ отвечает на вопрос «что должно получиться» и пишется языком заказчика: «константы можно создавать программно», «константы могут быть периодическими».

Технический проект отвечает на вопрос «как это будет устроено» и пишется языком разработчика:

  • какие объекты метаданных создаем и почему именно такие;
  • как выглядят сигнатуры API до последнего параметра;
  • где транзакции и какие управляемые блокировки;
  • что происходит в граничных случаях: константа уже существует с другими признаками, пустая дата у периодической константы, чтение несуществующей константы;
  • как это все проверяется.

Ключевое отличие: ТЗ утверждает заказчик, ТП — это разговор разработчика с самим собой и с будущим сопровождением. И вот этот разговор, по моему опыту, экономит больше всего времени.

 

Честные аргументы «против»

Начну с позиции оппонентов, потому что она не глупая.

«Документ устареет через неделю». Правда — если документ живет в вакууме. Мой ТП за время проекта прошел версии с 1.0 до 1.9: добавились формы, роль администратора, функция поиска по значению. Устарел бы он, если бы я его не обновлял. Но обновление раздела ТП занимает десять минут, а вот восстановление проектных решений из головы уволившегося разработчика — недели.

«Код и есть документация». Код отвечает на вопрос «как сделано», но молчит о «почему». Почему значения непериодических констант хранятся под фиксированной служебной датой? Почему в подсистеме намеренно нет кэширования? Из кода это не прочитать — только из ТП, где решение зафиксировано вместе с обоснованием: «значение может измениться в течение сеанса, а инвалидация кэша усложнит подсистему».

«Мы аджайл, у нас требования меняются». Меняются. У меня за проект сменились: состав ролей, имена по стандартам, появилась форма, которой в исходных требованиях не было вовсе. ТП это не отменило — наоборот, каждое изменение ложилось в документ отдельной версией, и всегда было видно, что и почему поменялось.

 

ТП во времени

 

Так что аргументы «против» — на самом деле аргументы против мертвого ТП. Против живого у меня контраргументов не нашлось.

 

Что ТП дал на практике: разбор кейса

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

 

1. Главное архитектурное решение было принято на бумаге, а не в отладчике

Значения констант надо где-то хранить. Вариантов минимум три: справочник с реквизитом, регистр сведений с датой-измерением, периодический регистр сведений. На бумаге сравнение заняло полчаса, и победил периодический независимый регистр с ведущим измерением-ссылкой: срез последних из коробки, автоочистка при удалении константы, одна структура для периодических и непериодических констант (вторым — фиксированный служебный период).

 

Архитектура подсистемы: слои и границы ответственности

 

Если бы я начал с кода, я бы почти наверняка начал со справочника — он «проще». А на требовании периодичности переписал бы хранение целиком, вместе с уже написанными тестами.

 

2. Сигнатуры API стали контрактом до первой строки реализации

В ТП были зафиксированы сигнатуры:

ДинамическиеКонстанты.СоздатьКонстанту(ИмяКонстанты, ЭтоПериодическаяКонстанта,
    СодержитСписокЗначений, ДатаУстановкиЗначения, Значение)
ДинамическиеКонстанты.ПолучитьКонстанту(ИмяКонстанты, ДатаЗначения)

Плюс поведение в граничных случаях — то, о чем на этапе «сразу в код» никто не думает, а потом это всплывает в бою:

  • повторное создание с теми же признаками — идемпотентно, возвращается существующая ссылка;
  • создание с другими признаками — исключение, а не тихая перезапись;
  • чтение несуществующей константы — Неопределено, а не исключение.

Каждое из этих решений — это чей-то будущий несостоявшийся баг. Дешевле всего они решаются в документе.

 

3. План тестирования из ТП превратился в тестовый модуль

Раздел «План тестирования» из десяти пунктов почти механически развернулся в модуль на YAxUnit: пять наборов, под тридцать тестов, включая негативные сценарии с проверкой текстов исключений. Когда тестируешь по плану из ТП, а не «что вспомнилось», покрытие получается систематическим: у меня, например, в плане с самого начала стоял пункт «чтение на дату до первой записи истории» — сценарий, который при тестировании «по памяти» забывают почти всегда.

 

4. Первый прогон: 27 из 29 — и оба падения окупили тесты целиком

Честность требует сказать: первый прогон не был зеленым. 27 из 29, два падения. И вот тут проявилась настоящая ценность связки «ТП + тесты»:

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

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

 

5. Каждая доработка знала свое место

Дальше подсистема жила обычной жизнью доработок: форма управления константами, создание констант из формы, редактор значений всех типов конфигурации, поиск и замена значений, роль с полными правами. Каждая доработка начиналась с обновления соответствующего раздела ТП — и дважды это меняло решение еще до кода. Например, «замена значений» на бумаге сразу превратилась из «заменить значение константы» в «заменить с сохранением дат исторических записей и с точечной заменой элементов внутри списков» — в коде до этих нюансов я дошел бы через баг-репорт.

 

Неожиданный аргумент: ИИ-ассистенты

А теперь наблюдение последних лет, которое перевернуло мое отношение к вопросу окончательно.

Часть кода этой подсистемы писалась с ИИ-ассистентом. И выяснилась простая вещь: качество сгенерированного кода прямо пропорционально качеству спецификации на входе. Если скормить ассистенту требование «сделай подсистему констант», получите усредненную подсистему с решениями «как обычно делают» — включая чужие ошибки. Если скормить ТП с зафиксированными сигнатурами, структурой хранения, поведением граничных случаев и планом тестирования — получите код, который делает то, что спроектировали вы.

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

 

Когда ТП действительно не нужен

Чтобы не превращаться в секту свидетелей документации, честно перечислю ситуации, где я сам ТП не пишу:

  • Прототип на выброс. Проверяем гипотезу, код умрет через неделю. Документировать нечего — но важно, чтобы прототип действительно умер, а не поехал в прод.
  • Доработка в один экран. Новый реквизит, колонка в отчете, поправка в запросе. Достаточно нормального описания задачи и коммита.
  • Работа внутри жесткого фреймворка. Если БСП или архитектура конфигурации уже продиктовала все решения, проектировать нечего — надо просто следовать стандарту.
  • Одноразовая обработка. Перенос данных, разовая чистка. Максимум — чек-лист прогона.

Мой критерий простой: ТП нужен там, где есть решения, которые больно менять после реализации. Структура хранения, контракт API, схема блокировок, права — больно. Цвет кнопки — нет.

 

Минимальный состав, который окупается

Если писать ТП «по ГОСТу», он умрет под собственным весом. Мой рабочий минимум — 5–8 страниц:

  1. Назначение и ограничения — включая то, чем подсистема заниматься не будет.
  2. Объекты метаданных — таблицами: имя, синоним, тип, назначение каждого реквизита.
  3. Программный интерфейс — сигнатуры с параметрами, возвращаемыми значениями и граничными случаями.
  4. Ключевые алгоритмы — только нетривиальные: транзакции, блокировки, срезы.
  5. Обработка ошибок — таблица «ситуация → поведение».
  6. План тестирования — он же будущий состав юнит-тестов.

И два правила жизни документа: версия меняется с каждой доработкой, а спорные решения записываются вместе с отвергнутыми альтернативами — через год вопрос «а почему не сделали через справочник?» закрывается одним абзацем.

 

Выводы

Нужен ли технический проект при разработке? Мой ответ после этого проекта: нужен — везде, где есть архитектурные решения, и вреден — как ритуал.

  • ТП — это не отчетность, а дешевый способ совершить ошибки на бумаге вместо продакшена.
  • Живой ТП с версиями — это память проекта: «почему так» переживает и релиз, и ротацию команды.
  • План тестирования в ТП — половина будущего тестового модуля; в моем случае тесты по этому плану нашли транзакционный нюанс, который стоил бы боевого инцидента.
  • С приходом ИИ-ассистентов хорошая спецификация стала не архаикой, а главным рычагом качества: код теперь пишется быстро, а вот думать по-прежнему приходится самому.
  • И — не пишите ТП на одноразовые обработки. Серьезно.

А как у вас: пишете технический проект перед разработкой, ограничиваетесь ТЗ или считаете, что лучшая документация — это код? Расскажите в комментариях, особенно интересны случаи, когда отсутствие (или наличие) ТП дорого обошлось.

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

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Стандарты и документация Россия Бесплатно (free)

Продолжаю разбирать профстандарты. Беру стандарт «Архитектор программного обеспечения» (06.003) и сверяю с тем, кого у нас в 1С зовут архитектором. Зовут кого угодно - спеца по производительности, тимлида, ревьювера, самого опытного на проекте, - но почти никогда того, кто на самом деле делает работу архитектора. А она одна: принимать архитектурные решения и отвечать за них.

06.07.2026    1191    21    ardn    16    

12

Компетенции и навыки Стандарты и документация Программист Россия Бесплатно (free)

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

22.06.2026    4505    15    ardn    46    

25

Стандарты и документация Бесплатно (free)

Про то, как перестать терять знания о принятых архитектурных решениях. Разбираю, что такое Architecture Decision Record (ADR) и как начать вести его буквально сегодня.

18.06.2026    1494    0    ardn    10    

19

Стандарты и документация Бесплатно (free)

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

18.06.2026    494    0    YA_826532418    3    

4

Работа с требованиями Стандарты и документация Россия Бесплатно (free)

“Не хотим заполнять документ вручную, пусть он сам откуда-то подтянет данные, заполнится и запишется” — звучит понятно только до тех пор, пока разработчик не начнет задавать вопросы. Откуда подтянуть? При каких условиях? Что делать, если данных нет? Кто имеет право запускать сценарий? Что должно попасть в другую базу 1С после согласования? Разбираем, почему мутная задача всегда становится дорогой, какие требования нужны 1С-разработчику до начала реализации и как простая карточка задачи экономит часы разработки, уточнений и переделок.

16.06.2026    465    0    NikolayMaerov    0    

4

Стандарты и документация 1С 8.3 Россия Бесплатно (free)

Внешние обработки и отчеты часто появляются в 1С как быстрый и удобный способ решить задачу: выгрузить данные, проверить остатки, сформировать нестандартный отчет, выполнить разовую обработку или закрыть срочную потребность бизнеса. Но со временем .epf и .erf могут превратиться в теневой слой системы: без владельцев, версий, проверки после обновлений, описания назначения и понимания рисков. Разбираем, как держать внешние обработки и отчеты под контролем

15.06.2026    425    0    NikolayMaerov    0    

3

Стандарты и документация Бесплатно (free)

НСИ часто вспоминают слишком поздно: когда отчёты уже не сходятся, интеграции падают, маршруты согласования уходят не тем людям, а пользователи спорят, какой контрагент или номенклатура “правильные”. Разбираем, почему нормативно-справочная информация критична для 1С-проектов, какие ошибки встречаются чаще всего и как начать приводить НСИ в порядок без гигантского отдельного проекта.

11.06.2026    769    0    YA_826532418    0    

4

Стандарты и документация 1С:Предприятие 8 1С:ERP Управление предприятием 2 Машиностроение и приборостроение Бесплатно (free)

В связи с тем, что большинство предприятий, на которых мы проводим внедрения, работают с конструкторской документацией, составили краткую справку по подготовке к внедрению «1С:ERP Управление предприятием 2».

20.05.2026    647    0    AiBCifra-1S-ERP-UH    1    

1
Для отправки сообщения требуется регистрация/авторизация