Сергей Баранов: архитектура и ИТ-стратегия


Kanal geosi va tili: Rossiya, Ruscha


Помогаю CTO, CIO, руководителям разработки и архитектурам снижать стоимость изменений через IT-стратегию, архитектурную диагностику, оргдизайн и обучение инженерных команд
Организатор ArchDays.
Консалтинг и обучение → @sergey486

Bog‘liq kanallar  |  O‘xshash kanallar

Kanal geosi va tili
Rossiya, Ruscha
Statistika
Postlar filtri


Я про бэкенд @ Яндекс

Сегодня проходит конференция от Яндекс про бэкенд-разработку и, конечно, центральная тема – все вокруг ИИ. Спасибо @mersonad за приглашение, встретились со старыми знакомыми, появились новые, аудитория действительно профессиональная.

Перессказывать выступления, думаю, смысла нет, как я понимаю они через какое-то время появятся в публичном доступе, озвучу несколько собственных мыслей и наблюдений.

1. На открытии Антон Полднев задавал общую рамку и сказал такую фразу (не дословно): «Удивительно было, когда я попросил модель сложить два числа, а она не пошла складывать, а написала питон-скрипт и сложила». Вот уж правда никогда не знаешь, откуда придет инсайт/обобщение опыта. Я сам не раз сталкивался с такой ситуацией и слышал от других: «агент написал скрипт, которые съел весь процессор/память/…» и эти наблюдения после фразы выше сформировались в общее наблюдение, – а ведь действительно, мы детально формулируем задачи для агента на реализацию функционала, но полностью отдаем ему реализацию вспомогательных скриптов. И это может стать следующей точкой оптимизации, ведь мы платим не только за токены, но и за инфраструктуру на которой агент исполняется и вольное поведение агента вполне может привести к высоким необснованным затратам, особенно если нет внешних ограничений.
2. Просто интересное. Не так давно в яндекс.картах появились светофоры. Изначально эту тему исследовали те, кто разрабатывает беспилотные автомобили под свои нужды, они научились получать данные, но задержка в получении данных оказалась слишком высокой, что для карт не так критично и наработки использовали в картах. Такая вот горизонтальная связь.
3. Архитектурные подходы в целом не новые, новое в них добавляют новая инфраструктура и новые нагрузки. То есть спроектировать решение с ИИ-компонентом не сказать, что невероятно сложно, однако когда появляются высокие нагрузки, то стандартные решения просто перстают работать, как и в любой комплексной адаптивной системе. Причем проявляется это во всех плоскостях - и выдерживать нагрузку с обеспечением безопасного доступа, и уметь непрерывно и быстро поднимать/опускать сотни и тысячи инстансов инфраструктурных компонентов (эластичность на максималках) и следить за экономикой решения. Но повторюсь, если проект по требованиям вполне себе типовой, то здесь скучная, дисциплинированная инженерия (и архитектура) дают вполне приличный, предсказуемый результат.

Всем хорошего дня и надежных решений :)


Достаточно ли восстановить данные для харнесса по коду?

Ситуация: запускается агентская разработка, нужен харнесс и данные для него собираются из текущих артефактов - репозиториев, API, документации.

Дальше возможен градиент от «все идеально» до «соткано из антипаттернов и противоречий».

Сборка данных может отличаться
▪️Cобрать данные и перекреститься
▪️Собрать данные, провести анализ, найти противоречия хотя бы на уровне определений, понятий и связей и перекреститься
▪️Предыдущее + архитектурный аудит на уровне границ ответственности, глобальных инвариантов, соответствия анализа относительно ключевых сценариев и много всего остального, что входит в архитектурный адудит; зафиксировать риски, агентскую разработку стартовать в изолированной области, где риски минимальны, остальные готовить

Возвращаясь к началу, ответы разделились
▪️Одни притормозили когда поняли, что в текущей архитектуре и состоянии документов агенты могут разнести системы в пух и прах и взялись за архитектуру (или как минимум воспроизводить неоптимальные паттерны)
▪️Другие пытаются, но не могут получить обещанную пользу от агентов

Архитектура является обеспечивающим условием того, чтобы ИИ-инициативы можно было реализовать (проще/легче лучше/хуже - другой вопрос).

OpenAI так же указывает на важность архитектуры в своей статье https://openai.com/index/harness-engineering/ (см скрин). Да, без деталей, но я уверен, что они подразумевают все это, просто фокусируются на своей теме, однако даже они не забывают упомянуть, что архитектура важна.

Ну и напоследок, набившая уже оскомину фраза, источник которой не найти, но возможно это было State of AI-assisted Software Development - «ИИ работает как мультипликатор и для сильных и для слабых сторон организации.

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


Архитектурная ката @ Podlodka Crew

Вчера с @MaksCher побывали в жюри архитектурной каты от подлодки.

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

И действительно, заменить человека можно, кто нам запретит, однако это, скорее – вопрос уровня риска, который готова взять на себя компания.

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

Для себя я тоже отметил несколько наблюдений:

1. Специфики при использовании моделей в решениях было не так много на уровне набора компонентов, – ML, MCP, LLM-Proxy, сами LLM, то есть структурно решения были плюс/минус схожими. И это важно, потому что с позиции архитектуры AI для нас – это не фундаментальные изменения, а в большей степени более массовое использование компонентов с недетерменированным в общем случае поведением.

2. При этом NFR/QA, поведенческие характеристики, могли отличаться существенно. Например - агент вполне может серьезно увеличить нагрузку на API, потому что появился класс задач, для которых в рамках рассуждений ему нужно не 2 раза обратиться к какому-то API, а она решила, что 20 раз надо перепроверить и сделала это. Важным становится вопрос темпоральности (работа со временем), – агент дошел до некоторого этапа, долго ждал ответа от пользователя и что-то изменилось в тех данных, на которые он опирался при принятия ранних решений. Что делать? Все перепроверять каждый раз? Придерживаться ранее принятых решений, даже если теперь есть противоречие? Это бизнес-решение, находящее свое прямое отражение в архитектуре. Вопросы безопасности стали острыми как никогда в том числе в части определения ролей агентов и разделения полномочий.

3. Единогласное мнение – если можно без агента, – лучше без агента. Это относится к тому, когда можно принять решение не доводя до агента, быстро и безопасно. Например - сразу одобрить возврат для надежного клиента или если уже известно, что есть брак.

4. Для систем с агентами важен второй контур – смысловой анализ диалогов. Тенденция к полному исключению людей из цепочки диалога с внешним миром легко может привести к тому, что в какой-то момент собственник посмотрит на цифры, увидит убытки, спишет на экономическую ситуацию, а в действительности окажется, что это потому, что агенты якобы успешно закрывая диалог допускали ошибки, не решали задачи людей, а постоянно их водили по кругу, выполняли действия, о которых не просили. И люди постепенно уходили. Возможно и в вашем окружении уже есть люди, которые именно по этой причине перестали пользоваться услугами каких-то компаний, в моем – уже есть. И здесь интересный момент, что в такой модели выиграет тот, кто сможет построить максимально надежную систему, которая будет действительно полезной (а это во многом архитектурная задача), но есть мнение, что пока этот момент в области взаимодействия с людьми еще не наступил – слишком много разных людей, ситуаций, контекстов, недостаточно накопленных данных и внутренние корпоративные системы и сами данные часто еще не готовы. Я не так часто пользуюсь первой линией, но даже у меня в копилке уже две таких ситуации и оба раза я решал проблемы находя знакомых внутри компаний, других способов просто физически нет было. И, повторюсь, выглядит так, что у этих компаний нет способа узнать об этом, и так, кейс за кейсом, неспеша, компании могут незаметно терять долю рынка. Выходит, что нужны три контура Observability - в обычном представлении, финансовый (учет расходов на диалоги в части использования моделей и других платных API) и смысловой (что происходит у наших клиентов и что мы с этим делаем).

Благодарю @thebits и @Gskoba за приглашение поучаствовать в жюри, Podlodka как всегда на высоте!


Сегодня в ходе общения со знакомым пришли к выводу, что широкое распространение vibe-кодинга (речь именно о ситуациях, в которых создающий что-то человек не знает и/или не думает о технических характеристиках) может неплохо поднять мировую выручку облачных провайдеров, но не через успешный успех, а через экстра потребление процессора, памяти и трафика.


Посетил Demo Day сертфиикации для архитекторов от Сбер.

Благодарю за приглашение, было приятно встретиться с друзьями, приятелями и познакомиться с новыми людьми 🤝

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

1. Компании все еше не адаптировались к новой скорости появления технологрий. На практике это означает, что пока EA согласовала новую технологию со всеми у себя в компании (иногда это год+), технология может уже устареть.
2. Компании все еще ищут экономические модели использования ИИ. Полная автоматизация бэкофиса со сроками окупаемости в десятки лет не считается за экономический успех.
3. Корпоративная архитектура все чаще становится частью инвестиционного цикла на практике и на практике все чаще начинает работать с финансовой стороной вопроса (считаю позитивным сдвигом для отрасли)


Встретились арх/ит друзьями и знакомыми поговорить про ИИ, архитектуру, про будущее.

В общем, в домашних условиях за $8000 собирается рабочая конфигурация, равная GPT Luna и окупается она за 29 месяцев. Вот так.

2k 1 23 18 24

«Лидерство во льдах», Альфред Лансинг

Эту книгу мне подарили когда-то давно на день рождения и она некоторое время стояла на полке. А затем была прочитана на одном дыхании.
Дело в том, что книга хоть и написана как художественная, но написана она на основе дневников участников и интервью выживших, то есть она документальная.

Книга об экспедиции Шеклтона в 1914 году (а сама книга – 1959-го года). Он хотел первым пересечь Антарктиду пешком, но не достигнув материка судно вмерзло в лед и несколько месяцев дрейфовало, пока его не раздавило, а команде пришлось почти полгода жить в палатках на дрейфующих льдинах. Лед начал ломаться и они пересели в спасательные шлюпки. После долгих дней в шлюпках они причалили к острову, но остров был необитаем и они понимали, что искать их никто там не будет. Шеклтон с несколькими людьми отправился на шлюпке через океан, проплыли они где-то 1300 километров за 16 дней на 7-метровой шлюпке в ледяной шторм. Они нашли остров, но оказались с его необитаемой стороны и еще сутки с половиной шли через горы. В итоге нашли людей на острове и спасли всех, кто оставался на острове.

Это если по сюжету. Что же в ней такого?

Я в ней разглядел стоические мотивы. Люди не могут повлиять на шторм, ветер, лед, течения, но полностью отвечают за то, как они к этому относятся. В книге стойкость проявляется через ежедневную рутину, то, как люди соблюдают распорядок, делят еду, шутят, ждут и не позволяют себе опустить руки.
Помимо этого, можно было ожидать, что цивилизованность в подобной ситуации исчезнет и начнется борьба каждого за себя (или чего хуже, как в книге Повелитель Мух), но вместо этого общество держалось на мелочах – на справедливом распределении, на ритуалах и на доверии к лидеру (хотя люди остаются людьми - они раздражаются, ссорятся, завидуют и отчаиваются и тем важнее, что при всем при этом они не распались).

Но книга называется Лидерство во льдах и я ее когда читал, название задало рамку восприятия и высматривал, что же там про лидерство, а там оказалось много.

1. Главная цель лидера может измениться. Экспедиция провалилась и Шеклтон озвучил новую цель - вернуться домой. Не все ситуации в жизни несут экзистенциальную угрозу, поэтому мы можем долго идти к цели, которая уже не имеет смысла, руководствуясь самообманом и не признавая реальность.
2. Моральный дух – такой же ресурс и им можно управлять. Например, Шеклтон держал распорядок дня, поощрял игры и песни. Был такой момент, что кому-то стало плохо и он велел всем разогреть горячего молока, чтобы не выделять одного человека.
3. Самых нервных и склонных к пессимизму Шеклтон поселил в своей палатке :) Он так гасил недовольство до того, как оно распространится. В книге прямо указывается, что Шеклтон понимал, что раскол группы означает смерть для всех.
4. Авторитет Шеклтона держался на личном примере, – он ел то же, что и все, отдал свои рукавицы, взялся отправиться на шлюпке вникуда. Дела важнее слов, в общем.
5. Интересный был момент – как проходила жеребьевка при распределении спальников. Шеклтон с офицерами так устроили жеребьевку так, что им самим достались худшие спальники =) Смысл в том, что в условиях нехватки ощущение несправедливости разрушает группу быстрее, чем сама нехватка.
6. Шеклтон мог долго ждать, но когда наступал подходящий момент - действовал решительно и быстро.
7. Шеклтон понимал свои ограничения, поэтому в шлюпку подобрал сильных людей и доверился им. Это важно, – знать свои слабые стороны, собрать сильную команду и доверять этой команде.

Лидерство, если посмотреть сквозь призму книги, проверяется вовсе не в тепличных условиях, когда все идет по плану, а в кризис, когда план летит к чертям и Шеклтон вошел в историю не потому, что достиг изначальной цели, а потому что никого не потерял, когда цель изменилась.

#Книги




Эволюция Закона Конвея и социальная сложность ИИ-агентов

Долгое время Закон Конвея служил надежным инструментом организационного проектирования. Формируя команды вокруг ограниченных контекстов, архитекторы направляли коммуникации так, чтобы код естественным образом разделялся на независимые сервисы. Этот процесс, известный как «Обратный маневр Конвея», опирался на фундаментальную предпосылку о том, что люди, пишущие код, присутствовали в коммуникационной структуре.

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

Что делать?

Превратить границы архитектуры в проверяемые ограничения
Неформальные договоренности плохо масштабируются в среде, где код создают не только люди. Наверное, это и есть истинный барьер, почему тормозит внедрение ИИ в задачи, в которых важен широкий контент и при этом достаточно высокая точность принимаемых решений. И если раньше можно было как-то схалтурить, то теперь реально нужны:
• контрактные тесты между сервисами и модулями
• архитектурные тесты на допустимые направления зависимостей
• правила импорта, запрещающие доступ к внутренним пакетам другого контекста
• фитнес-функции в CI/CD, проверяющие соблюдение архитектурных инвариантов
• политики доступа к репозиториям, каталогам, инфраструктурным модулям и секретам

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

Спроектировать область видимости агента
ИИ-агент не должен быть универсальным солдатом с правом менять все, что ему заблогорассудится. Наиболее надежная модель – это дать каждому агенту ограниченную область ответственности, совпадающую с границами конкретной команды или домена. И снова не получится схалтурить. Если команда отвечает за один продуктовый поток, сервис или bounded context, агент этой команды должен работать в тех же границах:
• иметь доступ только к нужным репозиториям и каталогам
• менять только компоненты своего домена
• использовать только разрешенные интеграции
• работать с заранее определенными контрактами соседних систем

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

Чем больше кода создается агентами, тем опаснее полагаться на неявное знание. Архитектурный замысел (как мне понравился этот термин, но это то же, что и видение) должен быть переведен в явные, проверяемые и автоматически исполняемые правила. В той точке, в которой мы сейчас находимся это и становится новой задачей архитектора – создать среду, в которой и люди и агенты могут двигаться быстро, не разрушая границы, договоренности и ответственность системы.


Russian Association of Software Architects dan repost
На что вы опираетесь при выработке архитектурных решений? (возможен множественный выбор)
So‘rovnoma
  •   Собственный опыт и знания
  •   Внешние эксперты
  •   Собственная интуиция
  •   Прототипирование
  •   Формальная методология принятия решений
  •   Повторное использование ранее принятых решений
  •   ИИ
  •   Посмотреть ответы
369 ta ovoz


На случай если кто-то спросит что такое эта ваша Архитектура: https://scrumtrek.ru/blog/technical-excellence/it-glossary/17258/it-architecture/


Russian Association of Software Architects dan repost
Проверим как у нас дела с обучением =) Сколько различных платных обучений вы прошли в этом году?
So‘rovnoma
  •  
  •   1
  •   2
  •   3
  •   4
  •   5
  •   6 и более
431 ta ovoz


Признаки распределенного монолита

▪️Несколько сервисов почти всегда выпускаются одновременно
▪️Общая библиотека моделей (shared kernel) меняется вместе со всеми сервисами
▪️Сервисы читают или изменяют чужие таблицы
▪️Для теста одного сервиса требуется поднять другой сервис
▪️Один компонент невозможно запустить автономно
▪️Недоступность одного сервиса блокирует выполнение большинства операций
▪️Бизнес-операция требует согласованных изменений в нескольких БД
▪️Нельзя указать владельца данных и инвариантов
▪️Сервисы масштабируются только совместно

Если большинство компонентов физически раздельны, но изменение, тестирование, развертывание и восстановление выполняются совместно – высокий шанс распределенного монолита (вероятность тем выше, чем больше положительных ответов).

Важное замечание
Распределенный монолит в отдельных случаях может быть подходящим решением, но это должно быть обоснованное решение с зафиксированным компромиссом. Например - изоляция доверенных зон, независимое масштабирование ресурса (отдельный процесс с тяжелым расчетом на GPU), нормативная граница и ряд других. То есть это исключение, для которого есть явное, проверяемое требование с фиксацией последствий.


Распределенный монолит?

Даже удивительно, но значительно чаще, чем каждое второе решение, аудит которого проводим, – распределеный монолит. Сколько индустрия теряет, страшно представить. Это ж как нам не хватает архитектурной экспертизы (в широком смысле).

И иногда даже можно не смотреть на as-built, достаточно посмотреть на as-designed, это ведь так очевидно, на той же компонентной, по названиям даже (если исходить из смысла названий):
API Service -> Manager Service -> Data Service -> DB

Это типичный Layered Monolith:
Controller -> Manager -> Service -> Repository -> DB

То есть получили издержки на сетевые вызовы, сериализацию, ретраи, дискавери, трассировку, частичные отказы, если не считать координационных издержек, совместимости, распределенного внесения изменений, времени на деплой… и не получили главного преимущества микросервисов - автономности. Хотя называется оно в документах, конечно, «Микросервис UserService», «Микросервис Nginx».

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

Однако, стоит сделать важную оговорку. Названия – это, конечно, хорошо, однако мы ж про инженерию, а в инженерии нельзя просто сказать - должно быть больше или должно быть меньше, в инженерии для каждого распределенного компонента должно существовать экономическое или архитектурное обоснование (все, часть, одно из тех, что ниже, если оно критически важное, могут быть и другие):

• Независимое масштабирование
• Независимый жизненный цикл
• Отдельная команда
• Отдельный уровень безопасности
• Изоляция отказов
• Независимый темп изменения
• Отдельная модель данных
• Существенная внешняя интеграция

И если такого (никакого) обоснования нет, компонент добавляет сложность, но не создает архитектурной ценности.


Адаптирую материал школы архитекторов, мое любимое определение архитектуры (неформальное, но все же) в своей изначальной форме более не актуально.

«Набор ключевых решений в системе, которые избавляют разработчиков от ненужной креативности»

Да, было так, что архитектура защищала от «креативности» живых разработчиков, которые могли написать лишний/сложноподдерживаемый код.

С распространением AI-ассистентов генерация кода стала почти бесплатной. Это привело к взрывному росту объема кода и неконтролируемой технологической сложности. Появился риск «эмерджентного техдолга»,когда AI генерирует рабочие атомарные функции, но они разрушают глобальную целостность системы и ее эмерджентные свойства.

Архитектурные ограничения (guardrails) теперь становятся жестким фильтром для AI-агентов. Архитектура должна явно задавать рамки, за которые AI не имеет права выходить при генерации кода. И это не так просто, как кажется на первый взгляд. Мы ведь формулируем guardrails на естественном языке, а какая проблема с естественным языком? Именно так, которую и подсвечивает DDD и которая в целом нередко проявляется в жизни – ограниченность любого языка. У нас огромный контекст в голове, мы пишем и даже не представляем, что то, что мы написали кто-то может трактовать иначе, а этот кто-то чистает и через призму наполнения своего мозга воспринимает именно иначе =)

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

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

Ну и конечно AI-агенты стали «цифровыми членами команд». Появилась новая социальная сложность гибридных команд (человек + AI).

Думаю, придется сделать несколько дополнительный веток практического обучения, в частности база по онтологиям, нейросимволичности и DDD конкретно в этом узком контексте, иначе… плывет оно и чтобы каждый раз собирать разъехавшееся решение в кучу, приходится прилагать экстра-усилия (тем, кто инженерию не практикует, разумеется) :)


ИИ уничтожит человечество?

Посмотрим через призму критического мышления на тезис в заголовке. Кто его озвучивает и неявно подпитывает? Те, кто несет колоссальные риски из-за отсутствия чистой прибыли и туманных сроков окупаемости. Нарратив об экзистенциальной угрозе – идеальныое прикрытие.

Образ сверхразума, якобы способного уничтожить человечество, превращается в удобный маркетинговый инструмент OpenAI и Anthropic для привлечения новых венчурных инвестици, а регулярные громкие инциденты и взломы (вроде HuggingFace) вполне могут оказаться спланированными инфоповодами для поддержания ажиотажа в условиях отсутствия иных инфоповодов.

Конечно, это не обязательно так, просто одна из возможных альтернативных точек зрения.


Интересный всплыл вопрос - как отличить качественную инженерную работу от удачного промта?

Это в тему собеседований.

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

То есть как ведет себя человек с очень быстрым, но ненадежным коллегой.

Так быстро и так фундаментально, конечно, отрасль еще не перестраивалась.


Как только кто-то начинает читать вашу схему БД напрямую, ваша схема становится публичным API.


Переписывать ли канал взаимодействия?

Например, мобильное приложение, админку, личный кабинет. Это частый вопрос. Начнем с технических особенностей.

Единственная техническая причина переписывать с нуля, - это если канал - стороннее решение, кода у вас физически нет возможности провести рефакторинг.

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

Экономические (внезапно) причины:
▪️Умер стек, на котором разработана текущая имплементация канала. Сложно или дорого найти компетенции под стек.
▪️Архитектура фундаментально несовместима с направлением бизнеса. Вроде, - проектировали под single tenant, а теперь работаем с multitenant, сюда же если изначально не закладывался highload и так далее. При архитектурной несовместимости постепенная замена модулей может оказаться дороже, чем полная замена с разработкой с нуля
▪️Банкротство. Это когда годовая стоимость поддержки старой системы (проценты) доходит до 40% от реалистичной оценки переписывания. Речь только о процентах, а есть еще тело долга.
▪️ Бизнес-модель поменялась настолько, что старая система решает не ту задачу, - нужен другой продукт

Это были рациональные причины. Чтобы их обсчитать и принять рациональные решения, нередко придется потрудиться, это затратно, поэтому иногда решения принимаются иррационально, например:

▪️В целом выглядит привлекательно начать с чистого листа, чтобы скинуть балласт. Часто решение принимается при смене команды или руководства, - «нам проще переписать, чем разбираться и поддерживать, что они там написали». Это скорее организационная причина.
▪️Переписать - это понятный проект с границами, который можно защитить (формально) в отличие от нередко непонятного (что печально) менеджменту постепенного рефакторинга. Это, скорее политическая причина, понятный проект выглядит просто привлекательнее по форме.

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



20 ta oxirgi post ko‘rsatilgan.