Спецификация («спека»)

6 июля 2026 · ~13 мин чтения

концепция требования процессы документация управление

Спецификация («спека»)

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

История

Спецификация старше софта примерно на пару веков. Как только производство разделилось на «того, кто проектирует» и «того, кто изготавливает», понадобился документ-посредник: инженерные чертежи с допусками, промышленные стандарты на резьбу, калибры, рецептуры. Вся взаимозаменяемость деталей XIX–XX века держится на том, что изделие описано на бумаге точнее, чем словами у станка.

В компьютерную эпоху у спецификации несколько заметных вех.

1969 — RFC 1. Аспирант Стив Крокер пишет первый Request for Comments (дословно «запрос комментариев») — рабочую заметку о протоколах зарождающегося ARPANET. Скромное название прижилось, и сегодня RFC — это фактические спецификации интернета: IP описан в RFC 791 (1981), HTTP/1.1 — в RFC 2616 (1999). Сейчас RFC перевалили за девять тысяч. Интернет в буквальном смысле работает потому, что тысячи независимых команд реализуют одни и те же спеки.

1970 — Уинстон Ройс и «водопад». В статье «Managing the Development of Large Software Systems» Ройс описал каскадную модель: требования → проектирование → код → тестирование, и между этапами — документы. Ирония в том, что сам Ройс в той же статье предупреждал: в чистом виде одна проходка «сверху вниз» рискованна. Но индустрия запомнила картинку, а не оговорку, и на пару десятилетий толстая спецификация стала главным артефактом разработки.

1975 — «Мифический человеко-месяц». Фредерик Брукс, руководивший созданием OS/360 в IBM, формулирует идею концептуальной целостности: у системы должен быть один замысел, и письменная спецификация — способ этот замысел сохранить, когда над проектом работают сотни людей.

1984 — IEEE 830. Выходит стандарт на то, как писать спецификацию требований к ПО (SRS, Software Requirements Specification). Пересматривался в 1998-м, а в 2011-м его сменил ISO/IEC/IEEE 29148, действующий до сих пор.

1986 — Design by Contract. Бертран Мейер встраивает спецификацию прямо в код: в его языке Eiffel у каждой процедуры есть предусловия и постусловия — машинно-проверяемый мини-контракт. На другом полюсе строгости — TLA+ Лесли Лэмпорта (конец 1990-х): математический язык спецификаций, которым Amazon в 2010-х проверял алгоритмы AWS и, по статье в Communications of the ACM (2015), находил реальные баги в DynamoDB до того, как они случились в проде.

2001 — Agile-манифест. Семнадцать практиков в Юте формулируют: «работающий продукт важнее исчерпывающей документации». Маятник качнулся от толстых спеков к user stories и живому общению. Важно: манифест не запрещал спецификации — он возражал против документов, которые пишутся ради документов.

2011 — Swagger → OpenAPI. Тони Тэм делает Swagger — машиночитаемое описание HTTP-API; в 2016-м проект передан Linux Foundation и переименован в OpenAPI. Спека перестала быть только текстом для людей: по ней генерируют код, тесты и документацию.

2020-е — ренессанс из-за ИИ. Когда исполнителем становится языковая модель, спека снова главный артефакт: агенту нельзя «объяснить на пальцах у кофемашины». Появился термин spec-driven development; в 2025-м GitHub выпустил Spec Kit — инструментарий ровно под этот подход.

Русская ветка — ГОСТы: серия ГОСТ 19 (документация на программы) и ГОСТ 34, где ГОСТ 34.602-89 описывает состав ТЗ (технического задания) на автоматизированную систему; в 2020 году вышла обновлённая редакция.

Что это такое

Спецификация отвечает на два вопроса: что должно получиться и как проверить, что получилось. Всё остальное — стиль, формат, объём — вторично. Спека может быть страницей текста в вики, ГОСТовским томом на сто листов, YAML-файлом OpenAPI или issue в трекере — если в ней есть однозначное «что» и проверяемое «как убедиться», это спецификация.

Главное разделение, которое стоит держать в голове: спека описывает что, а не как. «Пользователь восстанавливает пароль по ссылке из письма, ссылка живёт 24 часа» — это спецификация. «Возьми библиотеку X и сделай токен через JWT» — это уже проектное решение, и в хорошей спеке оно появляется только если выбор сделан сознательно и зафиксирован как ограничение.

Полезно развести спеку с соседями:

Спецификация vs ТЗ. Техническое задание — это спецификация, оформленная как часть договора: в русской традиции ТЗ несёт юридический вес, по нему принимают работу и судятся. Каждое ТЗ — спека, но не каждая спека — ТЗ: внутренний design doc никто не подписывает у юристов.

Спецификация vs документация. Спека пишется до работы и описывает желаемое будущее; документация пишется после и описывает существующее. Частая болезнь — спека, которую забыли обновить: она превращается в документацию, которая врёт.

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

Спецификация vs стандарт. Стандарт — это спека, о которой договорилась целая индустрия: RFC, ГОСТ, стандарты W3C. Разница не в жанре, а в масштабе договаривающихся сторон.

Спека — это не бумага, а мышление заранее

Главная ценность спецификации не в артефакте, а в том, что развилки находятся и решаются, пока они стоят дёшево. Противоречие, замеченное в тексте, стоит десять минут правки; то же противоречие, доехавшее до кода, — дни переделки. Написание спеки — это отладка замысла до первого запуска.

Аналогии из жизни

Архитектурный проект дома. Ты не объясняешь бригаде «хочу уютный дом» — ты отдаёшь проект: планировки, сечения, марка бетона, узлы. Бригада строит по проекту, технадзор принимает по нему же. Спека в разработке играет ту же роль: единый документ, по которому и делают, и проверяют. Где ломается: в стройке изменить фундамент после заливки почти невозможно, поэтому проект обязан быть полным заранее. Софт переделывать на порядки дешевле, и попытка «спроектировать всё до последнего гвоздя» до первой строчки кода часто оборачивается томом, устаревшим к середине проекта. В софте спека может и должна уточняться итерациями.

Заказ стейка в ресторане. «Рибай, medium rare, без соли» — это крошечная спецификация: описан результат и критерии приёмки, а не инструкция повару, на какой сковороде жарить. Если принесли well done — заказ объективно не выполнен, и спор не нужен. Где ломается: в ресторане ты выбираешь из готового меню, а повар видел тысячу стейков — контекст общий и огромный. В разработке задача часто уникальна, «меню» нет, и минимальной фразой не обойтись: приходится описывать контекст, границы и краевые случаи самому.

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

Как это работает

Жизненный цикл спецификации выглядит примерно так — независимо от того, пишешь ты ТЗ подрядчику или design doc внутри команды.

1. Сбор входных данных. Кто заказчик, какую проблему решаем, что уже есть, какие ограничения (сроки, бюджет, легаси, регуляторика). На этом шаге спека ещё не пишется — собирается сырьё.

2. Черновик. Автор садится и пишет. Именно здесь происходит главная работа: попытка связно изложить замысел вскрывает дыры, которые в голове не были видны. Типовая структура выглядит так:

Цель          — что должно получиться и зачем (одним абзацем)
Контекст      — что уже существует, от чего отталкиваемся
Решённые
развилки      — выборы, которые уже сделаны; исполнитель их
                не переоткрывает
Поведение     — что система делает, шаг за шагом, включая
                краевые случаи и ошибки
Границы       — чего НЕ делаем (out of scope); самый
                недооценённый раздел
Критерии
приёмки       — проверяемые условия: команды, сценарии,
                ожидаемый результат (DoD, Definition of Done)

3. Ревью. Черновик читают заинтересованные стороны: исполнитель, смежные команды, заказчик. Каждый ищет своё: исполнитель — неоднозначности, смежники — конфликты со своими системами, заказчик — соответствие замыслу. Комментарии дешевле кода.

4. Согласование (sign-off). Фиксация: «делаем вот это». С этого момента спека — источник истины. Изменения возможны, но проходят как изменения: с версией, датой и уведомлением сторон, а не молчаливой правкой.

5. Реализация. Исполнитель работает по спеке. Все вопросы, которых в ней нет, — повод дополнить документ, а не решить устно и забыть.

6. Приёмка. Результат сверяется с критериями. Хорошие критерии проверяются механически: «запусти X — увидишь Y», «в файле есть разделы A–M», «время ответа меньше 200 мс на тестовом стенде».

7. Судьба документа. Либо спеку поддерживают актуальной (living spec — как HTML, который сегодня «живой стандарт» WHATWG), либо честно архивируют с пометкой «исторический документ». Худший вариант — оставить устаревшую спеку выглядеть действующей.

Спека без критериев приёмки — это пожелание

«Сделайте удобно и красиво» непроверяемо: работа будет принята или отвергнута по настроению. Если к описанию нельзя приложить процедуру проверки — командой, сценарием, числом — это ещё не спецификация, и спор о результате уже запрограммирован.

Где встречается в обычной жизни

Где встречается в IT и бизнесе

Кто пользуется

Альтернативы и конкуренты

Когда НЕ стоит использовать

Связанные понятия

Литература и источники

Где встретилось у меня

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

Краткое резюме