PMO Consulting
Нам немного доработать
Что случается, когда клиент просит сделать небольшую доработку в legacy систему, а компания очень хочет проект с этим клиентом
Клиент и его запрос
Клиент — крупная международная фармацевтическая компания, 15 лет назад заказавшая IT-решение у подрядчика. Теперь они вернулись с просьбой доработать его для другой своей лаборатории в другой стране. Эта лаборатория ранее успешно использовала собственное самописное решение и не испытывала потребности в смене системы.
Анализ ситуации
К моменту возвращения клиента старая команда разработчиков уже была недоступна. Люди поменялись как на стороне клиента, так и у подрядчика. Текущие пользователи системы не могли полноценно сформулировать требования — приходилось восстанавливать картину по крупицам: "А зачем этот функционал?", "А что делает эта кнопка?" и т. д.
Дополнительные сложности:
  • Legacy-монолитная система с огромным кодовым базисом с устаревшим тех стеком (WinForms), большая часть функционала устарела.
  • Отсутствие документации, код комментировали "по ходу дела".
  • Жёсткие ограничения бюджета со стороны клиента: "Там же всё то же самое!", хотя технически это требовало существенной доработки.
  • Очень сильное желание подрядчика возобновить работу с крупным клиентом, что перевесило риски.
План решения
"Партия сказала: надо! Комсомол ответил: есть!"
  1. Быстро сделали ballpark (приблизительную) оценку, которая устроила клиента. На нее и подписались, пообещав, что итоговая сумма будет +/-20% от данной оценки (занавес).
  2. Организовали сбор требований по текущему решению.
  3. Провели поездку в новую лабораторию для уточнения их требований.
  4. Запустили процесс гармонизации требований и начали разработку.
Реализация
Почти сразу возникли серьёзные проблемы, которые значительно осложнили реализацию:
  • Подбор команды: сложно найти людей, готовых работать с устаревшим стеком. Потратили дополнительные 3 месяца на найм и онбординг.
  • Несовпадение бизнес-процессов: новая лаборатория не хотела пересаживаться на старую систему и менять процессы. Пришлось разделять логику в коде, что добавило сложности.
  • Недооценка сложности монолита: малейшие изменения порождали неожиданные артефакты, требовавшие глубокого рефакторинга.
  • Сдвиги сроков: из-за множества багов и нестабильности данных срок сдачи проекта несколько раз сдвигался.
  • Сложная сдача проекта: даже после вывода в production приходилось экстренно исправлять ошибки, затрагивавшие реальные исследования.
Из плюсов: внимательно управляли скоупом проекта, удалось договориться о нескольких change request (уже с реальными оценками), что дало небольшой буфер по срокам и бюджету.
Результаты и эффект
  • Основная цель провалена: новая лаборатория не стала переходить на старую систему, предпочтя оставить свою.
  • Обновление старой лаборатории: система получила актуализированную версию, но затраты на неё сравнялись с ценой новой системы.
  • Проект вышел практически в ноль: не удалось достичь требуемой маржинальности.
  • Потеря дальнейших контрактов: клиент отказался от новых проектов: "Пусть сначала уляжется пыль от прошлого проекта".
  • Человеческий фактор: перегруз привёл к выгоранию, несколько сотрудников покинули компанию.
Выводы и уроки
  • Не ведитесь на "вкусного клиента" — взвешивайте все "за" и "против". Оценки должны быть реалистичными, а не в угоду бюджету.
  • В крупном бизнесе учитывайте внутренние отношения — решение принимают не всегда те, кто заинтересован в проекте.
  • Не бойтесь просить больше времени на анализ — это важнее, чем быстро подписать контракт, и важно объяснить эту важность в том числе и клиенту.
  • Legacy-системы требуют дополнительных ресурсов — закладывайте +30% к срокам и +50% к бюджету, если проект касается устаревших технологий.
  • Подбор команды — отдельный риск. Заранее оценивайте сложность найма разработчиков под устаревший стек.