Понедельничный отчёт менеджеры открывают первым. И он висит. Выгрузка для клиента, сравнение филиалов, сводка звонков за неделю: человек нажал «сформировать», ждёт минуту и спрашивает, не пора ли менять CRM. Смета на замену отвечает не на этот вопрос. Тормозит конкретный отчёт. Новая система легко соберёт его так же: прямо в открытой вкладке, строка за строкой, по таблице без индекса, в одной базе на все филиалы.
Это для владельца продукта. Важны три вещи: какой отчёт, кто его ждёт и не увидит ли один клиент строки другого. Очередь и индекс чинят именно это. Переписывать платформу из-за них не нужно. Засеките, сколько открывается отчёт, который уже есть. Потом решите: считать его в фоне, добавить индекс или отдавать меньше данных. Новая платформа — последний вариант, и только когда эти проверки уже что-то показали.
1. Назовите отчёт, который уже заставляет ждать
На совещании говорят «отчётность сломалась» и сразу открывают список вендоров. Единственный нужный факт при этом пропускают. «Сломалась» не говорит, какой отчёт, какой филиал и сколько секунд ждать. В одном продукте спокойно живут два разных отчёта. Один — короткий список. Другой за месяц собирает каждый звонок, каждый счёт и каждое сообщение.
Человек, который это чувствует, в базу не смотрит. Он видит крутящуюся загрузку, таймаут или таблицу, которая приходит, когда планёрка уже кончилась. Дальше предлагают новую CRM: такое решение понятно, как принимать. Сам отчёт так и остаётся без имени, и в новой CRM вопрос будет тот же.
Рядом с отчётом хватит одной страницы:
Фраза «CRM тормозит» не подскажет разработчику, какой запрос открывать. На публичном сайте правило то же: сначала экран, потом редизайн. Об этом отдельно в материале что проверить до редизайна.
2. Молодой продукт тормозит по тем же причинам
Возраст тут мало что объясняет. Свежий продукт висит так же, как старый, если отчёт ходит в базу по разу на каждую строку, фильтрует по колонке без индекса или тащит все поля, хотя на экране их пять.
Первая версия отчёта часто и есть цикл. Для каждого клиента подгрузить звонки. Для каждого звонка — оценку. Пока строк мало, это незаметно и даже правильно. Когда строки настоящие, отчёт открывается минуту. Та же картина бывает и вне CRM. На одном продукте цикл запросов заменили одним агрегирующим запросом, и эта операция сократилась с двенадцати с лишним секунд примерно до двух. Цифра про эту операцию. Это не прогноз для вашей понедельничной выгрузки. Она показывает, что именно менять: один запрос вместо цикла, индекс там, где без него поиск не живёт, ответ не толще экрана.
Спросите того, кто может открыть запрос:
3. Когда отчёт больше не стоит считать на открытой странице
Бывает, вкладка висит, пока не соберутся все строки. Люди жмут ещё раз. Повтор той же тяжёлой работы только удлиняет ожидание. А если задача шлёт письмо, проводит списание или ставит оценку, второй запуск легко сделает это дважды.
Отчёт сделали страницей, потому что так было быстрее показать его один раз. Месячный период, сводка по филиалам и файл из этой страницы вырастают. Считать по-прежнему нужно. В один запрос браузера это уже не помещается. Очередь забирает расчёт с открытой вкладки, сохраняет результат и даёт человеку вернуться, когда готово. Это меньшая перемена, чем замена CRM.
Считайте в фоне, когда сходится вот это:
На одной CRM, где несколько клиентов живут в одном приложении, обработка звонков шла задачами в очереди. Повтор должен был найти работу уже записанной и остановиться, чтобы вторая попытка не создала второй результат. В цепочке были звонки, телефония, сообщения и учёт, а наружу это выходило отчётом. Ваш отчёт может быть не про оценку звонка. Вопрос тот же: если запуск случится дважды, строка будет одна или две? Спрашивайте это и тогда, когда очередь у вас самая простая из тех, что уже работают.
4. Сначала проверьте, не видит ли клиент чужие строки
Быстрый отчёт с чужими строками хуже медленного. Когда он открывается сразу, утечку замечают быстрее. В CRM или SaaS филиалы и аккаунты живут в одном приложении и не должны видеть записи друг друга.
Удобный запрос звучит как «все звонки за месяц», а фильтр «чей это клиент» вешают уже на странице. Или база одна, и часть запросов забывает колонку, которая говорит, чьи это строки. Индекс такой запрос ускорит. Пропавший фильтр он не добавит. На одном продукте у каждого филиала была своя база, а миграции и индексы делали под это разделение. Индекс обслуживал границу. Заменить её он не мог.
Прежде чем радоваться быстрой выгрузке:
5. Короткий план, и это не новая платформа
Предложение из двух строк — «отчёты тормозят» и «меняем CRM» — без третьей, которую можно написать сегодня. Сразу: отчёт, которого ждут, с секундами и гипотезой, почему так. Дальше: либо один агрегирующий запрос и индекс, либо фоновый запуск, который безопасно повторить, плюс письменный ответ, как аккаунты остаются раздельными. Новая платформа — потом, если после этих правок продукт всё ещё не даёт решение, ради которого отчёт нужен. Унаследованную боевую систему обычно сначала приводят в порядок. Решают, что стабилизировать.
План лучше держать таким, чтобы его закончить:
Когда звать специалиста
Назвать отчёт, засечь секунды и открыть его под двумя аккаунтами можно самим. Имеет смысл позвать человека, когда причина похожа на запрос или индекс, а внутри это никто не читает, когда повтор может отправить второе письмо или второе списание, или когда смета на замену уже в работе, а этого отчёта в ней нет.
Такую работу с отчётами я беру на существующей CRM или SaaS, без пустого репозитория на старте. Услуги — скорость, SaaS и backend, интеграции с ИИ, в том числе когда отчёт стоит поверх телефонии или другой системы, которая у вас уже работает. Проекты — тот же класс систем: отчёт, который должен остаться правильным при повторе, и данные, которые должны остаться внутри своего аккаунта. Если хотите разобрать один отчёт, который долго открывается, напишите мне в LinkedIn: как он называется, кто его ждёт и сколько секунд вы записали.