Реанимация проблемных проектов
Мы специализируемся на реанимации и реновации технически сложных проектов, которые столкнулись с проблемами.
К нам нередко приходят проекты с существенным объёмом технических и процессных изъянов, поэтому мы научились выстраивать постепенный процесс их нормализации без ущерба для целей бизнеса. Если вам знакомы хотя бы несколько пунктов из списков ниже, то следует задуматься и предпринять меры.
Управление, сроки и процессы
- Сроки никак не обосновываются и не аргументируются.
- Сроки регулярно переносятся, зачастую в самый последний момент.
- Не сходятся порядки цифр по срокам и трудозатратам между интуитивной сложностью доработок и фактической.
- Работы не планируются, либо планируются на словах, но не фиксируются в задачнике.
- Нет отчётности о прогрессе, либо она неинформативная.
- В задачнике нет или очень мало задач, связанных с системным решением регулярно возникающих проблем.
Разработка, качество и аналитика
- Ошибки функционала обнаруживаются уже на продуктиве и с большой задержкой.
- Тестирование занимает много времени, но при этом не всегда находит проблемы.
- Непропорционально много времени уходит на коммуникации и согласования.
- Блокеры и критичные вопросы (от архитектурных до банального отсутствия доступов) не выявляются на старте, а всплывают в процессе разработки и стопорят работу.
Инфраструктура, релизы и эксплуатация
- Релизы и деплой на продуктивную среду проходят болезненно, требуют ручного вмешательства и часто заканчиваются откатами или долгими простоями.
- У проекта несколько сред, и некоторые из ошибок воспроизводятся только в определённой среде.
- Регулярно возникают проблемы с производительностью, решаются долго.
- Команда не может спрогнозировать нагрузку, которую сможет выдержать решение.
- Возникают периодические поломки, даже если никто ничего не трогал.
- Невозможно или проблематично получать ответы на вопросы, связанные с поведением системы в заданный период времени.
Команда, знания и безопасность
- Критичный для проекта функционал может поддерживать один конкретный человек.
- Подключение новых разработчиков к проекту занимает очень много времени.
- У команды разработки регулярно возникает необходимость в переработках и «тушении пожаров».
- Нет документации или она устарела.
- Возникали инциденты взлома, связанные с халатным обращением к безопасности.
- Возникали инциденты взлома, связанные с устаревшим ПО, но его никто не предлагал обновить.
Как мы работаем
Экстренные меры
Решаем критичные проблемы быстро и лишь потом ставим в план «системное» решение.
Проводим всесторонний технический аудит и составляем дорожную карту с приоритетами и рисками.
Детализация и планирование работ
Декомпозируем работы так, чтобы всем было очевидно что именно будет делаться и в каком порядке.
Регулярная отчётность
Исполнители ежедневно отчитываются о выполненных работах.
Работа с техническим долгом
Любая проблема требующая системного решения отдельно фиксируется в задачнике. Задачи из этого списка добавляются в план работ постепенно, согласно пользе, которую даст их решение.
Замеры производительности
Критичные по производительности участки покрываем автоматическими тестами, которые замеряют скорость исполнения с ожидаемым эталоном. Отклонения видны заранее перед релизом.
Автоматически собираем все важные метрики проекта и устанавливаем уведомления на отклонения от нормы.
Автоматизируем тестирование, чтобы исключить человеческий фактор и проводить проверки быстро.
Статический анализ
Добавляем на проект инструментальные проверки, которые выявляют дефекты кода сразу после его написания.
Живая документация
Организуем проектные артефакты таким образом, чтобы они требовали на себя документацию. Это позволяет документации всегда быть актуальной.
Инфраструктура как код и CI/CD
Переводим настройку серверов в код. Минимизируем «дрейф конфигураций» и автоматизируем доставку обновлений до сред.
Удобство разработки
Автоматизируем развертывание локальных окружений и рутинные операции. Делаем инструментарий разработки удобным, чтобы сфокусироваться на главном — развитие проекта.
Примеры проектов
Интернет-магазин промышленного оборудования ГК «Эльф»
Категории: каждое изменение что-то ломает; любая мелочь оценивается в дни и недели; сайт тормозит и падает под нагрузкой.
Проблемы: Нестабильная работа сайта из-за устаревшего программного обеспечения, неправильных конфигураций сервера и незакрытых инцидентов. Критические и некритические ошибки в работе сайта, приводящие к потере данных заказов, некорректному отображению цен и остатков, сбоям в интеграциях». Устаревший интерфейс с медленным и нерелевантным поиском, перегруженный сервер.
Что сделали: аудит безопасности, рефакторинг и анализ кода, оптимизация SQL-запросов и кеширования, починка функционала черновиков заказов, корзины, каталога, личного кабинета и механизмов импорта данных, обновление ПО и приведение конфигураций в порядок. Параллельно — оптимизация скорости загрузки (код, изображения, сервер), внедрение современной поисковой системы с fuzzy search и морфологией, фасетные индексы и Highload-блоки.
Результат: 145 закрытых задач, 1320 человеко-часов, скорость поиска +60–70%, заметный рост производительности и отказоустойчивости, улучшение позиций в PageSpeed Insights. Техдолг переведён из «вечной фоновой проблемы» в управляемый бэклог.
Интернет-магазин «Ресторан Комплект»
Категории: каждое изменение что-то ломает; любая мелочь оценивается в дни и недели; сайт тормозит и падает под нагрузкой.
Проблемы: Сайт функционировал, но имел множество скрытых проблем: низкая скорость, перегруженная кодовая база, дублирующиеся данные и устаревшие технические решения. Проект содержал множество технического мусора: неиспользуемые PHP-страницы, дубли компонентов, временные бэкапы скриптов и даже тестовые файлы, оставленные предыдущими разработчиками.
Что сделали: удалили технический мусор и нормализовали данные товаров (объединили дублирующие свойства, сократили объём БД), перевели изображения в WebP с авторесайзом, внедрили отложенную загрузку JS, оптимизировали компоненты главной и конфигурацию веб-сервера, внедрили современную систему сборки фронтенда (один CSS и один JS на тип страницы), перестроили архитектуру навигационного меню с ленивой подгрузкой, переработали видео-галерею (превью вместо iframe, видео грузится по клику), починили вёрстку и индексацию.
Результат: Глубокая техническая реанимация проекта. Сайт превращён в быстрый, чистый и удобный в поддержке интернет-магазин, который корректно индексируется поисковыми системами.
Образовательная платформа TOP Academy
Категории: всё держится на одном человеке.
Проблемы: «Основная сложность заключалась в очень ограниченном доступе к информации о принципах работы, заложенных в продукт, о логике взаимодействия сервисов между собой. Главный способ получения информации, который приходилось использовать — изучение исходных кодов всех сервисов».
Что сделали: разработали 15+ собственных библиотек для общего использования кода и межсервисного взаимодействия, унифицировали каналы коммуникации между 20+ сервисами (AMQP, API), упаковали инфраструктуру в Docker для воспроизводимого разворачивания.
Результат: 20+ сервисов на Yii2, 15+ переиспользуемых библиотек, 450 закрытых задач, 2000+ человеко-часов, 8 разработчиков успешно работали над проектом на разных этапах — знания распределены между людьми и зафиксированы в коде.
Интернет-магазин товаров для здоровой жизни «Эвалар»
Категории: Сроки постоянно срываются
Проблемы: Предыдущий подрядчик сильно затянул проект и оставил его в очень плохом техническом состоянии (низкое качество кода и множество ошибок на всех страницах). Поджимали сроки запуска проекта.
Что сделали: тщательно протестировали, распланировали работы, устранили все ошибки и реализовали все отсутствующие функции.
Результат: Проект был сдан вовремя.
Строительный гипермаркет «ДЕКОРАДО»
Категории: каждое изменение что-то ломает; любая мелочь оценивается в дни и недели.
Проблемы: Текущий проект стало невозможно развивать в адекватном темпе из-за накопившегося технического долга. Стек устарел ещё до начала работ предыдущей команды (видимо, скопировали старый шаблон), отсутствовал статический анализ, логирование было фрагментарным. Курьёзный пример «слепоты» проекта: около четырёх лет на каждой странице товара выводился пустой тег `<h1>` — автоматика заметила бы это моментально, но её не было.
Что сделали: обновили инфраструктурный слой (Docker) и добавили поддержку локальных окружений разработки; реанимировали имеющийся набор автотестов; настроили статический анализ, который сразу вскрыл массу скрытых проблем; планомерно обновили все библиотеки до актуальных версий; наладили централизованный сбор логов (Loki + Grafana); сформулировали ~150 E2E-тест-кейсов и автоматизировали ~50 из них; переработали продуктивную инфраструктуру в модульную сборку compose.yaml.
Альтернатива «переписать с нуля на Битриксе» рассматривалась, но после оценки оказалось, что реанимация выходит сопоставимой по бюджету и сохраняет существующий продукт.
Результат: стек обновлён со стороны и приложения, и инфраструктуры; настроен современный инструментарий, который автоматически отлавливает большинство проблем до релиза; проект готов к новым внедрениям.