Найти в Дзене
Компания Lumos

Legacy-войны: новая надежда

Примерно год назад мы получили в работу проект, который начали делать еще 8 лет назад. Проект на Yii2 и Vuejs2. За время работы этого сервиса сменилось 4 команды разработки. В начале разработки проекта все шло неплохо. после смены 2-х команд разработки все пошло не по плану. Сильно просело качество кода, что привело к эффекту снежного кома. Проблемы начали нарастать. Решать вопросы и внедрять новый функционал становилось все сложнее и требовало больше времени и нервов. Документации на проекте не было никогда, тестовый сервер и продакшен разительно отличались и по версиям кода, не использовался docker для разработки. Раз в час падала очередь для генерации excel файлов, происходило это если 2 пользователя одновременно отправляли запрос на генерацию файлов. В проекте куча странных зависимостей, сомнительной разумности. Весь проект состоял в целом из одного единственного модуля, что накладывало огромные ограничения и приводило к еще большем зависимостям в коде. Ну и что самое ужасное, так

Примерно год назад мы получили в работу проект, который начали делать еще 8 лет назад. Проект на Yii2 и Vuejs2. За время работы этого сервиса сменилось 4 команды разработки.

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

Проблемы начали нарастать. Решать вопросы и внедрять новый функционал становилось все сложнее и требовало больше времени и нервов.

Документации на проекте не было никогда, тестовый сервер и продакшен разительно отличались и по версиям кода, не использовался docker для разработки. Раз в час падала очередь для генерации excel файлов, происходило это если 2 пользователя одновременно отправляли запрос на генерацию файлов.

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

Ну и что самое ужасное, так это задачи в Asana, которые состояли из одного лишь заголовка в 3-5 слов. А-а-а-а!!! Я как это должен делать?!?

Итак мы приступили к работе:

  1. Попробовали вникнуть в проект. быстро поняли, что не вариант.
  2. Начали с инфраструктуры для разработки. Внедрили docker, т.к. невозможно править код, когда у тебя на локальной машине одно окружение и версии, на тестовом-сервере другое, на production - третье.
  3. Встретили сильнейшее сопротивление системного администратора со стороны заказчика. Простая задача затянулась на сутки. Впоследствии еще не раз с этим столкнулись.
  4. Решили вопрос с очередью, переписали этот модуль для работы в многопоточном режиме.
  5. Приступили к плановым работам по обнаружению и исправлению багов. Оказалось, что в каждой функции сервиса, есть дефект. Иногда заметный, иногда нет.
  6. В процессе исправления одного бага мы получали проблему астрономического масштаба в другом месте приложения. Мы не могли поверить, что можно было написать такое количество кода с таким подходом. Этот момент в работе нам дался очень больно. Заказчик был в бешенстве, у него под угрозой ухода был ключевой клиент. А мы при этом закрываем мелкие задачи очень долго и при этом с кучей побочных эффектов. Опять А-а-а-а!!!
  7. С клиентом решили вопрос ценой седых волос и ночевкой в офисе. Теперь надо решать эту огромную проблему по коду.
  8. Выделили отдельного сотрудника для вынесения функций из богоподобного модуля в отдельные мелкие, независимые модули.
  9. Для всех моделей данных стали писать валидации
  10. Начали писать документацию и пояснения по коду. Внедрили типизацию на всем проекте. Описания phpDocs и swagger для API настроили.
  11. Ввели практику регулярного Code-review на проекте. Теперь на продакшен не летит грязный, недоделанный, недокументированный код.
  12. Столкнулись с тем, что в БД лежат данные, которые мягко говоря не соответствуют логике работы кода. В итоге на тестовых данных функционал работает, а на продакшене все идет через пень колоду.
  13. Спустя 2 недели кропотливой работы добились консистентности данных в БД.
  14. Вышли с клиентом на регулярные созвоны по спринтам. Начали дополнять описание задач своими комментариями и развернутыми формулировками. Стали писать техническое заключение по проблемам.
  15. По непонятным задачам сразу созвон с заказчиком и дотошный разговор с выяснением что нужно, как это должно работать, что хотите в результате. Сами предлагаем варианты решения по задаче.

Сейчас ситуация стабилизировалась. Проект под контролем. Багов становится все меньше. Работаем преимущественно над развитием функционала. Огромное спасибо за это нашей команде.

С заказчиком у нас хорошие отношения, огромное спасибо за понимание и терпение проявленное в начале нашей работы.

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