Перейти к основному содержимому

Cost heatmap: найти самый дорогой проект за 30 секунд

· 11 мин. чтения
Artur Pan
CTO & Co-Founder at PanDev

Открываем страницу Finances в организации с 38 активными проектами. По умолчанию — сортируемая таблица: имя проекта, расход за 30 дней, расход за всё время, owner, статус. Ежемесячный cost-review CFO начинается отсюда. 38 строк, 8 минут скролла, и в 60% случаев самый дорогой проект сидит на 17-й строке, куда никто реально не доходит. Эдвард Тафти ещё в The Visual Display of Quantitative Information (1983, 2-е издание 2001) показал: человек обрабатывает цвет и размер раньше, чем числа. Heatmap тех же 38 проектов выводит тёмно-красный квадрат меньше чем за секунду. Стивен Фью в Information Dashboard Design (2006, 2-е издание 2013) приходит к тому же выводу через индустриальные исследования: когда задача — «найди выброс», табличный вид это неправильное primary view. В виджете Projects Heatmap у PanDev Metrics обе модели идут бок о бок. Эта статья о том, почему mosaic должен быть дефолтом, а list — проверкой.

{/* truncate */}

Проблема 38 строк

Реальная B2B SaaS-организация из нашего датасета, средний размер, Q1 2026, 38 активных проектов. Расходы за месяц укладываются в $420 — $48 000. Среднее — около $7 400. Медиана — около $2 800. Распределение — длинный хвост: горстка дорогих проектов прячется среди 30+ дешёвых.

Вопрос CFO в ежемесячном обзоре каждый месяц один и тот же: «куда уходят деньги?». Классический дашборд отвечает на него сортируемой таблицей. Сортируешь по cost_last_30_days по убыванию, на верху самый дорогой проект. Технически работает. И при этом упускает форму расхода.

Конкретно:

  • Таблица отвечает на «кто #1?», но не на «#1 это здоровый 2x перед #2 или runaway 10x-выброс?».
  • Не видно, топ-5 проектов вместе — это 50% бюджета или 90%.
  • Прячет кластеры — четыре средних проекта на строках 2-5 могут быть скоординированным platform-team бюджетом, требующим единого решения, но таблица показывает их как четыре независимых строки.

Аргумент Тафти про preattentive processing работает именно здесь. Цвет и площадь человек видит за примерно 200 миллисекунд — до включения сознательного внимания. Прочитать число, сравнить с другим, посчитать в уме — это секунды на ячейку. HCI-работа Microsoft Research по cognitive load дашбордов (Heer & Robertson, IEEE TVCG, 2007 и продолжения) измеряет разрыв напрямую: glanceable visual encoding — в 5-30 раз быстрее табличного восприятия для outlier detection. Таблица из 38 строк воюет с человеческим восприятием. Heatmap его использует.

Что реально показывает виджет Projects Heatmap

Виджет Projects Heatmap в PanDev Metrics — реализация в /modules/finances-home/widgets/projects-heatmap.tsx — гоняет два вида над одним и тем же датасетом:

Mosaic mode. Каждый проект — цветной квадрат. Размер квадрата пропорционален суммарному расходу. Интенсивность цвета меняется от бледно-жёлтого (низкий cost) через оранжевый к тёмно-красному (высокий outlier). Вся организация умещается на одном экране. Глаз садится на тёмно-красный квадрат за секунду.

List mode. Те же данные, сортируемая таблица с пагинацией. Колонки: имя проекта, расход за 30 дней, расход за всё время, drill-down в задачи проекта по клику. Это верификатор — место, где читаешь точную цифру в долларах после того, как глаз выбрал проект.

Оба режима делят два фильтра: период (last30Days, allTime) и click-to-drill-down на любом проекте, открывающий список его задач. Данные приходят из POST /departments/{id}/finance/projects — один и тот же endpoint, представленный двумя способами.

Отдельный виджет Tasks Heatmap разворачивает тот же паттерн на уровень ниже: каждая Jira-задача — это квадрат, окрашенный и размерный по per-issue cost. Дуальность mosaic vs list работает на обоих уровнях. Математику per-issue мы разобрали в cost-per-task-issue-tracking — это формула. Heatmap — линза, через которую её смотришь.

Реальный пример: 38 проектов, секунда чтобы найти outlier

Та же организация. 38 проектов. Mosaic mode в 9:00 в понедельник вытащил такое:

  • Один тёмно-красный квадрат на четверть верхнего-левого квадранта: multi-tenant-sso за $48 000. 3.2x от среднего проекта.
  • Кластер из четырёх средне-красных квадратов справа от него: четыре platform-проекта (platform-billing, platform-search, platform-notifications, platform-auth) по $20 000-$25 000 каждый. Суммарно: $90 000, или 32% всего месячного инжиниринг-бюджета.
  • Море бледно-жёлтых квадратов заполняет остальное: 33 проекта меньше чем по $5 000. Их суммарная стоимость меньше единственного тёмно-красного выброса.

Три наблюдения, считанных примерно за секунду. Те же три наблюдения с list view требуют: проскроллить, чтобы зафиксировать верхнее число, окинуть взглядом следующие четыре строки на тот же порядок величины, потом 33 ячейки арифметики в уме чтобы оценить хвост. Мы прогнали внутренний контролируемый walkthrough — CFO, глядя на список, 8 минут 14 секунд формулировал те же три вывода. Разница mosaic vs list по времени: ~30x.

Это не магическое свойство heatmap. Это свойство человеческого зрения. Information Dashboard Design Фью даёт эмпирическую версию: outlier detection на treemap ограничен временем саккад и количеством фиксаций, что меньше секунды для ≤ 50 элементов. Outlier detection на отсортированном списке масштабируется линейно с количеством строк.

Mosaic из 38 проектов с одним тёмно-красным выбросом, доминирующим в верхнем-левом углу, четырьмя средне-красными квадратами рядом, и морем бледно-жёлтых квадратов снизу Mosaic mode виджета Projects Heatmap для 38-проектной организации в Q1 2026. Outlier на $48K и кластер платформенных проектов на $90K видны без чтения единственной цифры.

Mosaic vs List — когда какой вид правильный

Два вида комплементарны, не избыточны. Mosaic отвечает на вопросы про форму; list — на вопросы про точные значения. Используйте их последовательно.

Вопрос, который задаёшьПравильный видПочему
«Где сконцентрирован расход?»MosaicВизуальная площадь = доля бюджета. Глаз делает сложение.
«Есть ли outliers, требующие внимания?»MosaicИнтенсивность цвета флагает 2x+ проекты без арифметики.
«Покажи топ-5, отсортированных точно по cost.»ListЧисла, не визуальные приближения.
«Нужно скопировать цифры в board deck.»ListTabular export. Mosaic не вставляется в PDF.
«Проект X над бюджетом на $4K или $40K?»ListMosaic компрессирует; list даёт точные доллары.
«Кто 30 дешёвых проектов, на которые в этом месяце забить?»MosaicКластер бледно-жёлтых → глянул и пропустил.
«Аудитор хочет сортируемые строки за 6 месяцев.»ListAccessibility, screen-readable, экспорт.
«Я color-blind.»ListMosaic зависит от цветового кодирования. List работает всегда.

Честный вывод: mosaic для 30-секундного ежемесячного обзора, list для 30-минутного deep dive. Большая часть времени CFO/CTO должна уходить на первое; время аналитика — на второе.

Те же данные, два вида — выборка из 10 проектов

Возьмём выборку из 10 проектов из той же организации, чтобы сравнение было конкретным. Числовая таблица:

РангПроектCost (30д)% от total
1multi-tenant-sso$48 00027%
2platform-billing$24 50014%
3platform-search$22 00013%
4platform-notifications$21 20012%
5platform-auth$19 80011%
6mobile-ios-rewrite$14 5008%
7dashboard-v2$11 4006%
8analytics-pipeline$7 8004%
9partner-api$5 2003%
10docs-portal$2 4001%

Читатель, идущий по списку чтобы найти паттерн расхода, должен: прочитать число строки 1, удержать его, прочитать число строки 2, разделить, прочитать число строки 3, разделить ещё раз. К пятой строке формируется ментальная модель «топ-1 примерно вдвое больше среднего по 2-5». Это около 30-45 секунд чтения.

Mosaic-эквивалент — одна картинка. Визуальное утверждение тех же данных:

  • Один огромный тёмно-красный квадрат (multi-tenant-sso) на четверть канвы — мгновенно доминирующий элемент.
  • Четыре средне-красных квадрата кластером рядом, все примерно одного размера, все одного оттенка — глаз читает их как «platform-штука, похожая величина».
  • Один чуть темнее снизу (mobile-ios-rewrite) — заметно сам по себе, ни в кластере, ни в хвосте.
  • Три бледно-оранжевых квадрата (dashboard, analytics, partner-api) — заметно средний tier.
  • Два бледно-жёлтых (analytics-pipeline detail, docs-portal) — едва видны.

Дело не в том, что mosaic точнее — он явно менее точный, $48 000 с него не считаешь. Дело в том, что mosaic отвечает на вопрос, который задают первым в cost review («где расход?») за долю того времени. List отвечает на второй вопрос («сколько именно?»). Большинство дашбордов первый шаг пропускают.

Слой per-feature учёта, который кормит эти числа, мы разобрали в cost-per-feature-sql-formula — оттуда приходит цифра в долларах для каждого проекта. Эта статья на уровень выше: как отрендерить эти числа так, чтобы человек мог действовать на их основании в ежемесячном обзоре.

Почему большинство финансовых дашбордов пропускают heatmap

Если heatmap настолько быстрее, почему не все тулы делают его дефолтом?

Две причины, обе прагматичные.

Их сложнее построить. Сортируемая таблица — это примитивный HTML. Treemap требует layout-алгоритма (squarified treemap, slice-and-dice, или strip), интерполяции цвета, обработки hover-tooltip, click-target sizing для маленьких квадратов. Реализация в PanDev Metrics в projects-heatmap.tsx — несколько сотен строк кода; эквивалентный list view — около 80. Для маленького SaaS-стартапа, делающего финансовый дашборд, таблица заезжает в спринт; mosaic — в три.

Их сложнее валидировать. List с пер-row cost аудируем: аналитик копирует 38 строк в spreadsheet, суммирует, сверяет с GL. Mosaic сложнее аудировать, потому что прикидывание на глаз площадей — не количественный навык. Стандартная реакция аудитора на treemap — «где табличный вид?». Оба правы: аудиту нужен list, диагностике нужен mosaic.

Команда IBM Watson Health публиковала исследование adoption дашбордов в клинической среде (часть HCI-работы IBM, 2018-2020) — тот же паттерн в healthcare: visual-first дашборды получают больше engagement у senior decision-makers, но требуют tabular fallback для compliance и аудита. Компромисс — то, что делает PanDev: оба вида, на одних данных, в один клик.

Как использовать cost heatmap в 30-минутном ежемесячном обзоре

Walkthrough, который мы рекомендуем парам CFO/CTO, запускающим этот обзор впервые:

Минута 0-1: открыть mosaic mode. Смотрим на него 10-30 секунд, не читая никаких чисел. Формулируем гипотезу: где расход сконцентрирован, есть ли явные outliers, хвост короткий или длинный?

Минута 1-3: выбираем топ-1-3 outliers. Кликаем по каждому — виджет drill-down открывает task-list проекта. Скользим по топ-5 задачам этого проекта. Это пока не аудит; это ориентация. Drill-down в per-task мы описали в cost-per-task-issue-tracking — слой ниже heatmap.

Минута 3-15: переключаемся в list mode по кластеру. Если mosaic показал кластер (как наш пример из четырёх platform-проектов), переключаемся в list, сортируем по cost descending, читаем точные доллары. Теперь есть математика, подтверждающая визуальную гипотезу.

Минута 15-25: разбираемся с сюрпризами. Проект, которого ты не ожидал увидеть в топе — самый ценный сигнал. Заходим в его задачи. Спрашиваем engineering manager.

Минута 25-30: записать 1-2 решения. Не пытаемся починить всё за один обзор. Следующая статья серии, top-expenses-monthly-review, про лёгкий ежемесячный отчётный ритм, превращающий эти обзоры в привычку, а не в пожар.

Без heatmap обзор либо пропускает ориентацию (и идёт сразу на ту цифру, что уже в голове CFO), либо тратит 20 минут на скролл.

Где heatmap перестаёт работать — честное ограничение

Heatmap работает, когда есть variance. Если все проекты стоят примерно одинаково, heatmap монохромный и бесполезный. Если организация гоняет 12 микросервисов каждый по $8 000 в месяц с низким разбросом, mosaic — это плоская оранжевая сетка, ничего не сообщающая сверх list view.

Цветовое кодирование также не работает для color-blind пользователей. Около 8% мужчин и 0.5% женщин имеют ту или иную форму нарушения цветового восприятия (Birch, Color Vision Deficiencies, 6th Worldwide Workshop, 2012). При дейтеранопии и протанопии красно-зелёное различие в типичной cost-heatmap палитре схлопывается. List view — accessible-fallback, не nice-to-have.

Третье ограничение, о котором меньше говорят: heatmap врёт про точность. Квадрат, который выглядит «чуть больше», может быть на 5% или на 50% дороже — глаз надёжно не различает на маленьких разницах. Всегда используем mosaic как диагностику, потом сверяем с list перед подписью бюджетного решения. Mosaic — это вопрос; list — ответ.

Четвёртое ограничение: данные о cost зависят от лежащей под ними time-tracking и rate-модели. PanDev heatmap ровно настолько точен, насколько точен per-task cost feed под ним, ограниченный покрытием IDE heartbeat и свежестью rate-card. Если у проекта данные пропущены на 40% команды, потому что у них не установлен IDE-плагин, heatmap underколорит проект. Диагностическая ценность реальна; абсолютные цифры в долларах всё ещё требуют list view как sanity check.

Что это значит для ежемесячного обзора

Сдвиг небольшой, почти тривиальный: открой mosaic до того, как открыть list. Потрать 30 секунд на форму, потом копай в числа. Большинство команд пропускают первый шаг, потому что их дашборд не показывает mosaic, и месяц за месяцем упускают outliers — табличный вид требует слишком много арифметики.

Финансовый модуль PanDev Metrics поставляется с обоими видами в виджетах Projects Heatmap и Tasks Heatmap. Mosaic — это диагностика. List — это аудит. Drill-down в per-issue cost — это чек. Ежемесячный cost-review на 38 строк занимает 8 минут на list и 30 секунд на mosaic. Это аргумент в пользу того, чтобы ставить визуальное кодирование первым, и сверяться с list перед подписью любого бюджетного решения.

Готовы увидеть метрики своей команды?

30-минутная персональная демонстрация. Покажем как PanDev Metrics решает задачи именно вашей команды.

Забронировать демо