Этот код плохой, 

его нужно переписать
Нужно ли, когда, почему?
Частый вопрос
Как доказать бизнесу, что это нужно
Термины
Рефакторинг и переписывание
Если вы правы, то как
доказать это бизнесу?
Думай как бизнес - решай чужую проблему, 

а не свою
с какой мы стороны
денег?
2*2 = ? 



а мы покупаем или продаем?
Чаще переписывают
не плохой код
а вполне хороший, но больше не решающий
бизнес задачу
Критерии кодеров не
относятся к решению
бизнес задач
Кроме одного - они больше не могут деливерить. 

Технические критерии не имеют значения -
паттерны, старые/новые языки, это все очень
интересно (самим кодерам)
мало кто говорит что его код
плохой. 

плохой код всегда писали
предшественники
«Добро» и «зло» в
бизнесе и технологиях
одинаковы
Менеджер уходит за квартал до итогов года

Программист перед релизом
автор и технология
язык + фреймворк и/или библиотеки

проблемы могут быть и там и там
автор свой код переписывает или чужой?
Культура переписывания была
развита у XP программистов,
они рефакторили (постоянно)
Пишут код 1 раз
Читают 10+ раз

Разные люди. 

Уважайте их и они будут уважать вас
7ми летних детей учат
писать так, чтобы не
переписывать
Кто видел желающих
переписать любой
OpenSource проект?
Почему живет Legacy
код на Java 1.2, COBOL,
AngularJS 1?
Мейнфреймы. Их пытаются
закрыть, но клиенты
держатся "за любые деньги"
Почему вкладывают деньги
в поддержку Legacy, 

а не переписывание?
Факт 1 - бизнес сделает
все, чтобы ничего не
переписывать
Кода на COBOL - море
• Он хорошо работает. 

• С точки зрения не только джуна, просто с роли кодера
код на COBOL СЕГОДНЯ - ПЛОХОЙ. 

• Программист - больше, чем кодер
• Бизнес - больше, чем программист
Что такое плохой код?
И почему это не объективно?
появление проблемы
до релиза первой
версии
MVP - этот код плохой и его .. - ОК
SoundCloud -
переписали на MSA
Почему? Код не плохой
Две крайности - «софт
пограничников» vs
«CTO стартапа растет»
Почему Google не пишет
фронт на JS/React, как парни
на соседней вечеринке?
Почему в начале чуждые фронтам схемы Java
to JS и тп?

Почему AngularDart, почему на AngularJS не
перешли раньше, почему проскочили весь JS?
Культура ценностей в компании
Личный интерес разработчиков
- конфликт или синергия?
Сдержать эгоистичных
разработчиков от
переписывания кода
Дать возможность
разработчикам с инженерной
этикой переписать код
Покажите
инженерную этику
ТЕХ. ДОЛГ
• Кто что кому должен?

• Кто одолжил? Он знает или у него просто взяли в долг
без его ведома?

• Кто будет возвращать?

• Проценты ниже доходов или выше?

• Процедура банкротства - переписывание
«Костыль»
сознательный (костыль) и неосознанный (делали на пределе
умений, но предел был ниже уровня сложности проекта)

костыль - все работает, ошибок нет

делаем новые фичи - появляются ошибки или долго делать
фичу, мешает костыль явно или неявно
Философия Windows,
Mac, FreeBSD, Linux
Обновления системы, апгрейд версии со стороны
разработчиков и пользователей

by design - судьба на десят лет +

вы не смените архитектуру после MVP
Если это что-то
важное, то оно с чем-
то связано
SOAP, REST, ПРИВЫЧКИ ЮЗЕРОВ

переписывайте компоненты, 

но не интерфейсы
Совместимость
• ABI

• SOA

• MSA
Критерии для бизнеса
• время до выхода продукта на рынок

• время вывода новой фичи (SoundCloud MSA, DevOps,
TDD), цена фичи

• Цена фичи / ценность фичи

• Риски по качеству - «влет» из-за дефектов (после
релиза)

• Риски по кадрам - уйдут туда, где разрешат GraphQL
Вести ли переговоры
с террористами?
Что будет с бизнесом, если вся команда уйдет на
НОВЫЕ ТЕХНОЛОГИИ?
НОВОЕ
• зачем бизнесу emergent technology?
DevOps - бизнес
термин
При правильном DevOps ничего не придется
переписывать. Но где вы видели правильный
DevOps?

В треугольник цена, сроки, качество добавим
интеллект
Бизнес - это люди
• Собственники с правом решать

• Акционеры без права решать, но с рекомендацией
отправить все в облако, чтобы сэкономить

• CEO

• Менеджеры

• Линия потери смыслов - аутсорс
Пользователи - тоже
люди
• Пользователи не могут хотеть фичи (пользователь
входит в когорты и не имеет личности, только
настройки фона в кабинете)

• За них это делают представители бизнеса

• Они берут на себя РИСК проверить, будут ли
пользователи платить, ВЛОЖИВ В ЭТО ДЕНЬГИ, ЗА
КОТОРЫЕ ОНИ ОТВЕЧАЮТ
Бизнес вес фич и
предпосылки к
переписыванию
Второй критерий оценки - добавлять ли фичу?
Системное
мышление
Цепочки от хороших идей до больших проблем
Критерии качества
архитектуры
ISO-25010
Сквозная
функциональность
Очевидно -
Maintainability
Шаг вперед, два шага назад. Переписываем
Новые требования к
Reliability
Сильный рост
нагрузки
«Не тянем» нагрузку

Дорого тянуть
Новые требования к
безопасности
React Native ->
Native
Case как FB сделал Native app сам когда-то
React Native ->
Flutter
«Принцип торнадо»
В облако с или без
переписывания?
С переписыванием - операционка иначе
считается
Лямбды - повод
переписать?
Home Work
риски / возможности
• рост влияния рисков

• типы компаний по роли софта в бизнесе

• мы чем-то рискуем (новые конкуренты) или нам за это
заплатят пользователи? (обновление продукта)
На что переписать?
• Когда MS затеял TypeScript, они сначала написали что-
то на JS и решили это переписать (но без JS)? 

• или решили создать язык ради языка или рынка
(лопаты золотоискателям)?
Переписывать на что
• Смена фреймворка (был «неправильный», появился
лучше (решающий бизнес задачу (меньше кода, лучше
структура)))

• Смена языка

• Смена поколения языка

• Смена архитектуры - SOA, MSA, MVC, introduce Kafka,
AWS
уровни экспертизы - выше
старого кода или ниже
• знание об этом менеджера исполнителя 

• знание об этом клиента

• знание об этом пользователя

• знание об этом контролирующих органов (самолет)
как пережить кризис и не
переписывать?
• 1го года

• 2го года

• 3го года

• каждый продукт на Agile через 2-3 года заходит в
«опасные земли»
Когда мы перешли от
как переписать к как не
переписывать?
А это и есть главная цель - переписать нужно.
НО ОДИН РАЗ. Или даже не начинайте разговор
Когда таки нужно
переписывать?
• Есть план, как не переписывать снова через 2-3 года

• Скорость внесения новых фич сейчас делает убытки
бизнесу и ведет его к катастрофе

• Нефункциональные требования нельзя реализовать -
они не компонент системы, а ее свойство!

• Иначе кодеры уйдут, все развалится и бизнес тоже.
Дай террористам то, что они хотят, но не дай себя *** в
следующий раз
Код не плохой, но нужно
переписывать
• Чем меньше модуль, тем лучше - MSA - «да»

• Авторов м сервиса на Rust больше нет - MSA было «да»

• Код написан на Haskell и я его не понимаю (и не
должен, кому в голову пришло написать это на
Haskell?)

• Код написан сеньором, меня назначили сеньором, но я
не сеньор, бизнес в меня вкладывается
Спасибо
max.bezugly@gmail.com
International Software Architect Club (FB, T)

"Этот код плохой, его нужно переписать". Слышали? Как обосновать