Рефакторить, переписать или заменить систему?
Когда стоит рефакторить, переписывать или заменять старую систему, что покупает каждый бюджет и как неверный выбор отнимает год.

Рефакторинг, переписывание и замена могут стоять в одной строке бюджета, но покупают разные результаты. Рефакторинг покупает более безопасные изменения внутри нынешней системы. Переписывание покупает новую реализацию той же бизнес-задачи. Замена покупает другой продукт и, признаёт это заказчик или нет, другой способ работы.
Команды теряют год, когда утверждают один результат, а финансируют другой. Они называют переписывание рефакторингом, чтобы проект выглядел безопаснее, а потом выясняют, что всё поведение нужно открывать заново. Внедрение готового продукта называют заменой и закладывают только лицензии и настройку, считая изменение процессов, миграцию и интеграцию мелочами. Или объявляют переписывание, хотя ограничение сидит в договорах, ответственности за данные или вышестоящем мейнфрейме, который никто не собирается трогать.
Эти варианты не образуют лестницу зрелости. Замена не всегда смелее рефакторинга, а переписывание не занимает удобную середину. Каждый вариант выгоден при своих условиях. Полезный вопрос звучит так: какие обязательства должны сохраниться, какие можно изменить, а какие пора убрать. Когда ответы зафиксированы, бюджет перестаёт быть спором о вкусах.
Рефакторинг покупает изменяемость, а не новую систему
Рефакторинг меняет внутреннюю структуру работающей программы и сохраняет наблюдаемое поведение. Определение Мартина Фаулера важно, потому что команды часто растягивают термин до миграций, переработки функций и полной замены. Если пользователи, вызывающие системы или операторы увидят запланированное изменение поведения, это уже не рефакторинг, даже если инженеры улучшают соседний код.
Бюджет покупает меньшие модули, ясные зависимости, хорошие тесты, актуальные средства сборки и более безопасные выпуски. Можно отделить расчёты от ввода-вывода, поставить API вокруг стабильной функции, удалить мёртвые ветви, обнаружить скрытую связанность и подготовить извлечение компонента. Бюджет не освобождает от нынешней среды выполнения, модели данных, границы развёртывания и старых продуктовых решений, если отдельная работа их не меняет.
Рефакторинг подходит, когда система по-прежнему решает нужную задачу, её поведение в эксплуатации понятно, а технология выдержит следующий деловой горизонт. Он подходит и тогда, когда поставку нельзя останавливать. Инженеры улучшают по одному пути за существующими интерфейсами, часто выпускают изменения и в любой момент могут остановиться с полезным результатом. Нужны промежуточные контрольные точки. Рефакторинг на двенадцать месяцев, польза которого видна только в конце, скорее всего скрывает переписывание.
Жёсткий предел задаёт архитектура. Чистка методов в монолите не уберёт узкое место релиза, если его создают общая база и единая единица развёртывания. Интерфейсы вокруг устаревшей настольной среды не перенесут её в браузер. Если цель требует новой границы доверия, среды выполнения или ответственности за данные, рефакторинг подготовит путь, но сам до цели не доведёт.
Достоверная оценка называет ограничение, которое исчезнет. «Улучшить сопровождаемость» проверить нельзя. «Отделить расчёт тарифа от терминального ввода-вывода, чтобы запускать его в автоматическом тесте» проверить можно. Финансируйте последовательное снятие конкретных ограничений и измеряйте срок поставки, изоляцию ошибок или независимость релизов. Не оплачивайте общее желание сделать код приятнее.
Переписывание покупает новую реализацию и счёт за исследование
Переписывание заменяет реализацию, сохраняя бизнес-задачу системы. Можно сменить язык, архитектуру, базу и интерфейс, но обязанность сохранить всё нужное компании поведение остаётся. Она и создаёт счёт за исследование, который часто больше видимого счёта за программирование.
В старой системе несколько спецификаций. Исходный код показывает работу одной ветви. Данные показывают, какие значения программа принимает на практике. Настройки планировщика, JCL, сценарии командной строки и инструкции операторов показывают реальное движение работы. Производственный трафик показывает формы и порядок запросов. Пользователи помнят исключения, которых больше нигде нет. Ни один источник не полон, а противоречия между ними обычны.
Переписывание подходит, когда бизнес-задача продукта остаётся нужной, но реализация блокирует требуемую модель эксплуатации. Причиной бывает неподдерживаемая среда, развёртывание без нужного восстановления, язык, для которого трудно нанять людей, или архитектура, мешающая изолировать работу с особыми требованиями к нагрузке или безопасности. Аргумент становится сильнее, если поведение можно наблюдать и сравнивать автоматически.
Бюджет должен оплачивать четыре блока: исследование поведения, новую реализацию, миграцию и доказательство. Программирование занимает только один блок. Преобразование данных должно обрабатывать значения, нарушающие формальную схему. Переключение учитывает незавершённые операции. Доказательство охватывает результаты, побочные эффекты, временные предположения и сбои, а не только успешные экраны. Если оценка считает целевые сервисы и задачи, но не содержит проверки паритета, в ней пропущена дорогая часть.
Привычки разработки с нуля здесь мешают. Команда нового продукта уточняет функцию у владельца. Команда переписывания выбирает между кодом, трафиком, записями и человеческой практикой, которые имеют разный вес в разных случаях. Чистая целевая модель может отвергнуть некрасивое состояние, которое правильно закрывает бухгалтерский период. Удалить его из эстетических соображений нельзя. Нужно сохранить результат, официально отменить правило или явно обработать разницу при преобразовании.
Переписывание оправдывает бюджет, когда убирает структурные ограничения и не заставляет компанию заново изучать собственный бизнес. Если заказчики хотят заметно изменить процессы, правила или границы продукта, отделите эти изменения от паритета. Иначе любое несовпадение становится двусмысленным: ошибка, намеренная переработка или недокументированное старое правило.
Замена покупает продукт и изменение процесса
При замене нынешнюю систему выводят из эксплуатации ради готового продукта, сервиса или рабочего процесса. Компания перестаёт владеть значительной частью реализации и принимает понятия, ритм выпусков и ограничения замены. Такой обмен бывает отличным для стандартных функций, но настройка не превращает продукт в прежнюю систему.
Бюджет покупает лицензию или подписку, настройку, перенос данных, интеграцию, учётные записи, контроль, обучение и организационные изменения. Иногда в него входят услуги поставщика. Точную семантику старой системы он не покупает, если продукт её уже не поддерживает. Доработка пакета до воспроизведения каждого исторического исключения создаёт старую систему заново на платформе, которую компания контролирует хуже.
Замена подходит, когда функция не отличает бизнес от конкурентов, готовый продукт покрывает работу без глубокой доработки, а организация готова принять его процесс. Расчёт зарплаты, заявки или документооборот могут подойти с учётом местных требований. Собственный механизм цен, модель распределения или последовательность управления оборудованием требуют большего скепсиса, потому что странные правила могут описывать бизнес, а не случайную историю программы.
Главная стоимость скрывается в расхождениях, а не в количестве функций. Запрос предложений покажет наличие согласований, экспорта и ролей. Он почти ничего не скажет о согласовании смешанного пакета, сохранении исходной бухгалтерской даты после исправления или получении экспорта до срока следующей системы. Малые различия в смысле приводят к дорогим обходным решениям после выбора.
Замена также передаёт поставщику власть над планом развития. Он может убрать интерфейс, изменить лимит или иначе упаковать нужную функцию. Договор распределяет часть риска, но не возвращает технический контроль. Заложите путь выхода, долговечный экспорт и адаптеры вокруг интеграций, где это разумно. Если отказ от продукта заставит срочно перестраивать компанию, покупка создала стратегическую зависимость, которую нужно так и оценивать.
Три бюджета расходуют разные ресурсы
Бюджеты различаются, потому что каждый вариант тратит свой дефицитный ресурс. Рефакторинг расходует внимание инженеров, сохраняя непрерывность работы. Переписывание расходует силы на исследование и проверку, чтобы перенести поведение в новую реализацию. Замена расходует готовность организации изменить работу и принять внешние ограничения. Сравнение одних сроков скрывает ресурс, который закончится первым.
При рефакторинге поведение продукта и операционная граница остаются стабильными. Неопределённость создаёт скрытая связанность, команды часто забывают тестовые швы и работу над релизом, а прогресс означает, что конкретное ограничение исчезло в эксплуатации.
При переписывании сохраняются бизнес-задача и выбранное поведение. Неопределённость создаёт недокументированная семантика, команды забывают исследование, преобразование и доказательство паритета, а прогресс означает, что записанные случаи дают принятый результат в обеих системах.
При замене сохраняется обязательный бизнес-результат, а местная практика может измениться. Неопределённость создаёт соответствие продукта, команды забывают изменение процесса, интеграцию и выход, а прогресс означает, что пользователи проводят реальные случаи без специальных исключений.
Поэтому сравнение стоимости одной функции слабо работает. Переписанная система может содержать меньше строк, но потребовать намного больше решений. Замена может быстро установиться и забрать сотни часов у финансов, эксплуатации и специалистов по требованиям. Рефакторинг может выглядеть медленным из-за малых поставок, хотя рано снижает риски сбоев и релизов. Деньги важны, но график часто определяют скорость решений и доступ к знатокам предметной области.
Считайте отвлечения от работы. Один и тот же опытный оператор может объяснять правила, проверять преобразованные записи и поддерживать нынешний сервис. Оценка, которая полностью выделяет этого человека проекту, считает выдуманный труд. Покажите потребность по ролям и периодам. Технически возможный план провалится, если три потока требуют одного недоступного человека.
Резерв зависит от выбора. При рефакторинге он следует за связанностью кода и слабостью тестов. При переписывании он зависит от разнообразия поведения, качества данных и состояния на переключении. При замене он зависит от функциональных разрывов, ограничений поставщика и принятия пользователями. Одинаковый процент делает таблицу аккуратной, а решение менее честным.
Составьте карту обязательств до оценки решений
Карта обязательств отделяет случайное поведение системы от того, что организация обязана продолжать. Составьте её до запроса оценок у команд и поставщиков. Иначе каждая сторона молча выберет своё определение объёма, а самое дешёвое предложение будет содержать самое большое упущение.
Используйте доказательства, а не прилагательные. Для каждого обязательства запишите участника, событие, допустимый ввод, результат или побочный эффект, временную границу, правило сбоя, источник доказательства и разрешение на изменение. Одна строка может требовать, чтобы исправление до регионального срока сохраняло исходную деловую дату, с подтверждением в истории планировщика и бухгалтерских записях. Другая может разрешить убрать печатный отчёт после согласия его единственного читателя на экспорт.
Компактная запись может выглядеть так:
ID: BILL-042
Actor: billing supervisor
Trigger: corrected usage batch accepted before 18:00 local cutoff
Required outcome: invoice keeps original service period; adjustment posts today
Failure behavior: reject the whole batch and preserve prior balances
Evidence: production request pair + ledger rows + operator runbook section 6
Change permission: outcome fixed; screen flow may change
Candidate treatment: preserve in rewrite, configure-and-test in replacement
Owner: revenue operations
Такая запись полезнее требования «поддерживать исправления счетов». Команда переписывания получает случай для проверки паритета, поставщик получает точный вопрос о соответствии, а команда рефакторинга получает границу для защиты. Разногласия тоже проявляются рано. Если финансы и эксплуатация требуют разной реакции на сбой, выбор технологии конфликт не решит.
Отнесите каждое обязательство к фиксированным, обсуждаемым или снятым. Фиксированным остаётся результат, а не каждый экран или таблица. Обсуждаемое может изменить названный владелец. Снятое официально удалил уполномоченный человек, который определил последствия. «Никто не упомянул» не означает «снято».
Берите для выборки сложные, а не средние случаи. Включите отмены, поздние файлы, частичные сбои, повторы запросов, переходы времени, повторно открытые периоды и записи старше нынешней схемы. Обычный случай показывает, что продукт работает. Неудобный показывает, подходит ли он.
Правила решения лучше театра с баллами
Сначала исключите невозможные варианты, затем сравнивайте оставшиеся. Взвешенные матрицы часто создают ложную точность: участники меняют веса, пока не победит любимый вариант, а фатальное условие получает приличный средний балл. Жёсткое ограничение должно исключать вариант, а не отнимать семь баллов.
Используйте такие барьеры:
- Если обязательное поведение должно заметно измениться, одного рефакторинга недостаточно.
- Если точное местное поведение нужно сохранить, а продукт не поддерживает его без глубокой доработки, замена не проходит проверку соответствия.
- Если нынешняя среда выдержит целевой горизонт, а главная проблема состоит во внутренних изменениях, переписывание ещё не оправдало риск.
- Если производственное поведение нельзя наблюдать, записать или восстановить, у одномоментного переписывания нет надёжного эталона.
- Если организация не примет процесс продукта, покупка только отложит спор.
После этих барьеров сравните полную стоимость, отвлечения, обратимость, время до первого снижения риска и доступные при переключении доказательства. Показывайте диапазоны. Узкая оценка при неизвестном качестве данных не говорит о дисциплине, она скрывает неопределённость. Спросите, какое исследование сузит диапазон, и профинансируйте его до всей программы.
Короткая оплаченная проверка может атаковать самый рискованный тезис. Для рефакторинга изолируйте одну зависимость и выпустите изменение через новый шов. Для переписывания воспроизведите типичную часть записанного поведения на старой и новой реализациях. Для замены настройте два неудобных сквозных случая стандартными расширениями и выгрузите записи. Не выбирайте лёгкую демонстрацию. Проверка должна уметь дёшево похоронить предложение.
В протоколе решения укажите причины отказа от остальных вариантов. Иначе через шесть месяцев новые руководители откроют тот же спор с меньшим контекстом. Запишите проверенные обязательства, изученные доказательства, открытые предположения и событие для пересмотра. Это защищает решение, но не объявляет его вечным.
Неверный выбор проваливается узнаваемо
Неверно названный рефакторинг проваливается из-за расширения объёма. Команда начинает чистить зависимости, а затем узнаёт, что заказчики ждут новый интерфейс, модель данных и правила согласования. Инженеры не могут одновременно сохранять и переделывать поведение без явного решения. Релизы замедляются, временные адаптеры множатся, а руководство обвиняет рефакторинг, хотя проект перестал им быть несколько месяцев назад.
Переписывание проваливается, когда новую систему судят по письменным требованиям, а эксплуатацию по накопленному поведению. Модульные тесты проходят, демонстрации выглядят чисто, а на переключении обнаруживаются пропущенные правила порядка, округления или восстановления. Команда держит обе системы и исследует различия. Каждая правка двигает цель, старые результаты тестов теряют силу. Год уходит в растущий хвост исключений.
Замена проваливается, когда при выборе награждают широту функций, а соответствие откладывают. Продукт побеждает, потому что умеет представить каждое существительное из запроса. При внедрении пользователи узнают, что действия идут в другом порядке. Интегратор добавляет сценарии, специальные поля и ручные очереди. Обновления превращаются в репетиции, а старая сложность распределяется между продуктом, промежуточным ПО и таблицами.
Бывает более тихий провал, когда решают не то ограничение. Компания переписывает сервис ради быстрых релизов, но ежеквартальный процесс управления по-прежнему контролирует каждое развёртывание. Другая заменяет приложение ради снижения поддержки, хотя основную нагрузку создают плохие входные данные. Рефакторинг атакует качество кода, когда у бизнес-правил нет владельца. Свяжите обещанный результат с причинным ограничением до выбора работы с программой.
Следите за словами на управляющих встречах. «Один в один» часто прячет неизученное поведение. «Из коробки» часто исключает интеграцию и местный контроль. «Постепенное переписывание» может описывать разумную миграцию или отсутствие конечной границы. За каждой фразой требуйте обязательство, доказательство и приёмочный тест.
Гибридной программе нужен основной договор
В больших портфелях часто применяют несколько подходов, но каждой ограниченной функции нужен один основной договор. Рефакторьте части с подходящими поведением и платформой. Переписывайте отличительные функции, результаты которых должны сохраниться в новой архитектуре. Заменяйте стандартные функции, если компания примет стандартный процесс. Смесь работает только при явных швах и ответственности.
Не называйте весь портфель «гибридным», чтобы избежать решений ниже. Для каждой функции назовите подход, источник истины во время перехода, право разрешать конфликтующие обновления и условие вывода. Если две системы могут менять одного клиента или баланс, миграция создала проблему распределённой согласованности. Слайд со стрелками её не решает.
Выстраивайте работу вокруг информации, а не удобства структуры. Малый рефакторинг может открыть стабильный интерфейс, через который видно будущую реализацию. Замене могут понадобиться чистые справочные данные до проверки настройки. Переписывание может создать поток событий для безопасного переноса стандартного модуля. Новый слой интеграции вокруг скоро удаляемого интерфейса, напротив, превращает переходный код в постоянные расходы.
Популярный шаблон Strangler Fig, названный Мартином Фаулером, постепенно заменяет функции вокруг существующей системы. Он полезен, когда запросы можно направлять через стабильный шов, а старое и новое поведение способны сосуществовать. Это не заклинание для пакетной обработки с общим изменяемым состоянием, долгих транзакций или побочных эффектов, которые нельзя дублировать. В таких случаях создайте шов через ответственность за данные или управляемую единицу переключения, а не объявляйте маршрутизацию HTTP решением всей миграции.
Для переходных механизмов нужен тест на окончание срока. Двойная запись, очереди сверки, совместимые схемы и временные адаптеры требуют владельцев и условий удаления. Иначе программа отпразднует новую систему и будет бессрочно платить за обе архитектуры. Бюджет должен включать снятие миграционных лесов, а не заканчиваться при первом трафике в цель.
Доказательство определяет, купил ли бюджет результат
Завершение должно означать доказанное поведение и готовую к эксплуатации систему, а не объединённый код или установленную программу. Каждому варианту нужна своя проверка, потому что обещания различались.
Рефакторинг доказывает стабильность наблюдаемого поведения и снятие названного ограничения. Запустите регрессию, сравните подходящие производственные показатели и покажите новую инженерную возможность: изолированный тест, независимый релиз или удалённую зависимость. Если код чище, а релизы столь же рискованны, бюджет не купил заявленный результат.
Переписыванию нужен стенд паритета. Подайте одинаковые записанные входы старой и новой системам, нормализуйте разрешённые различия вроде созданных идентификаторов и временных меток, сравните выходы и эффекты. Разделите расхождения на дефекты цели, принятые изменения, временно сохраняемые дефекты источника и плохие тестовые данные. След согласования принятых отличий входит в артефакт.
CodeHero применяет эту модель для переписывания старых систем: платформа читает весь код, создаёт современную архитектуру на Go, Rust или TypeScript и проверяет поведение на записанном производственном трафике. Такой подход соответствует бюджету переписывания, потому что реализация и доказательство паритета поставляются вместе, а проект завершается менее чем за 30 дней.
Замена доказывает соответствие на реальной работе, включая исключения. Пользователи должны провести типичные случаи с настроенными правами, интеграциями и преобразованными данными. Эксплуатация должна восстановить сервис, сверить неудачный обмен и извлечь записи без импровизации команды внедрения. Приёмка по включённым функциям доказывает только положение переключателей.
Установите пороги переключения до результатов. Определите блокирующие расхождения, право принять разницу, срок сверки и условие отката. Если руководители решают это во время сбоя, давление графика будет переопределять «приемлемо» для каждой ошибки.
Итоговые доказательства должны приносить пользу после запуска. Сохраните под ответственностью карту обязательств, корпус паритета, правила преобразования, решения о соответствии и эксплуатационные тесты. Они станут спецификацией, которой никогда не было у старой системы. Выбросите их, и следующее изменение снова начнётся с археологии.
Финансируйте реальную неопределённость
Верный выбор виден, когда бюджет соответствует неопределённости. Финансируйте рефакторинг, если доверяете назначению и платформе системы, но не можете безопасно её менять. Финансируйте переписывание, если доверяете бизнес-задаче, должны заменить реализацию и можете доказать паритет. Финансируйте замену, если способны приспособить процесс к готовому продукту и принять передачу контроля.
Не утверждайте название преобразования. Утверждайте набор обязательств, подход к каждому, доказательство подхода и снимаемое ограничение. Попросите показать финансирование исследования, миграции, проверки, подготовки эксплуатации и вывода. Пропущенные строки не становятся бесплатной работой, они возвращаются задержкой.
Первой полезной тратой часто будет узкое упражнение по снижению неопределённости: составить карту одного сложного процесса, проверить реальные данные, воспроизвести записанные случаи или настроить самый неприятный вопрос соответствия продукта. Результат может убить любимый вариант. Деньги потрачены разумно, если они предотвращают год поставки по предположению, ложному до первого спринта.
Упражнение должно оставить повторно используемые доказательства. Проверка продукта оставляет настроенные случаи, выгруженные записи и описание всех расширений. Проверка переписывания оставляет версионируемый корпус, правила нормализации и классификацию различий. Проверка рефакторинга оставляет тестируемый интерфейс и производственные данные о том, что старая зависимость больше не управляет релизом. Презентация, сообщающая только уверенность, заставляет команду повторить исследование.
Закупки должны просить участников оценить одинаковые обязательства, но не навязывать одинаковую форму поставки. Продукт может выполнить обязательство настройкой и новым процессом. Команда переписывания сохранит его кодом и правилом преобразования. Команда рефакторинга защитит его, удалив зависимость. Сравнивайте доказательства и оставшиеся ограничения, а не число экранов, сервисов или людей.
Управление должно держать решения на нужном уровне. Совет или комитет владеет допустимым риском, границами финансирования и разрешением менять крупные результаты. Владельцы предметной области принимают конкретные отличия. Инженеры выбирают реализацию внутри этих границ. Если комитет проверяет каждое поле, решения копятся. Если инженеры молча определяют бухгалтерскую семантику, программа быстро идёт к спору на переключении.
Финансируйте вывод как отдельный результат. Старая система, доступная «для справки», всё ещё требует контроля доступа, инфраструктуры, решений о хранении и знающего человека. Определите нужные исторические запросы, место хранения записей, владельца последней сверки и порядок отключения учётных данных, заданий и интерфейсов. Преобразование, которое запустило цель и не выключило источник, купило ещё одну систему.
Совет может принять диапазон, если команда объясняет его причины. Нельзя принимать точную дату, построенную на неназванном поведении и выдуманном доступе к специалистам. Сделайте неопределённость видимой, выберите бюджет на её снятие и потребуйте доказательство обещанного результата. Тогда рефакторинг, переписывание и замена перестанут быть конкурирующими лозунгами и станут тремя подотчётными инвестициями.
Вопросы
Чем рефакторинг отличается от переписывания?
Рефакторинг меняет внутренний код, сохраняя наблюдаемое поведение и границу системы. Переписывание создаёт другую реализацию и требует заново найти, перенести и проверить всё нужное бизнесу поведение.
Когда стоит рефакторить старый код?
Когда система всё ещё решает верную задачу, платформа выдержит нужный горизонт, а главным ограничением остаются небезопасные изменения. Работа должна постепенно снимать конкретные ограничения и давать пользу до завершения всей программы.
Когда компании нужно переписать старую систему?
Когда бизнес-задача остаётся особенной, но реализация мешает найму, развёртыванию, восстановлению, масштабу или безопасности. Решение оправдано, только если команда может восстановить и сравнить поведение, которое должно сохраниться.
Заменить программу дешевле, чем переписать?
Иногда, но лицензия и внедрение не составляют весь бюджет. Изменение процесса, интеграция, преобразование данных, обучение, пределы поставщика и будущий выход могут сделать неподходящий продукт дороже точного переписывания.
Можно ли сохранить всё старое поведение при переписывании?
Можно сохранить всё, что команда нашла, воспроизвела и классифицировала, но слово «всё» опасно при неполных доказательствах. Используйте код, трафик, записи, расписания и знания операторов, а намеренные отличия согласуйте.
Как оценивать модернизацию старой системы?
Отдельно оцените исследование, реализацию, миграцию, доказательство, готовность эксплуатации и вывод. Покажите диапазоны по качеству данных, разнообразию поведения, связанности, соответствию продукта и доступу к специалистам.
Что входит в бюджет замены программы?
Включите продукт, настройку, интеграции, доступ, преобразование, обучение, изменение процесса, эксплуатационные тесты и выход. Отдельно оцените исключения, потому что они часто воссоздают старую систему в менее управляемых местах.
Можно ли одновременно рефакторить и переписывать?
Да, если для каждой функции заданы подход и граница. Рефакторинг может создать тестовые швы или стабильные интерфейсы для будущего переписывания, но слово «гибридный» не решает вопросы данных и переключения.
Как доказать соответствие новой реализации старой?
Воспроизведите одинаковые записанные входы в обеих реализациях и сравните нормализованные выходы и эффекты. Классифицируйте каждое отличие, храните согласования и проверяйте сбои с восстановлением, а не одни успешные запросы.
Почему модернизация длится год и всё равно проваливается?
Часто бюджет покрывает видимую разработку, но пропускает исследование, разрывы, миграцию, доказательство и вывод. Название остаётся прежним, ожидаемый результат меняется, и команда тратит год на противоречия, которые нужно было открыть до утверждения.