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

FTE Utilization vs часы: одна метрика врёт

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

Команда из 8 инженеров отлогировала 1 280 часов в марте 2026 — ровно столько, сколько даёт месяц при 160 часах на FTE. На таблице всё выглядело чисто. Двое инженеров были в трёх неделях от увольнения. Цифра часов это полностью скрыла; FTE utilization показала на пятый день.

Это разрыв между метрикой посещаемости и метрикой вовлечённости относительно базовой нагрузки. Исследование Microsoft Research WorkLab 2022 года про «triple peak workday» задокументировало третий вечерний пик продуктивности у knowledge workers — невидимый, если считать только сумму часов. Часы не говорят, кто спринтует, а кто плывёт. FTE utilization — говорит.

{/* truncate */}

Почему часы — это успокоительная метрика

«Команда отлогировала 1 280 часов» — инженерная версия «мы закрыли 47 тикетов». Выглядит как измерение. На деле — счётчик.

Счётчик говорит, что никто не пропал. Он не говорит:

  • была ли нагрузка сбалансирована
  • работал ли кто-то стабильно больше 50 часов в неделю
  • отдохнул ли реально человек, у которого был оплаченный отпуск
  • держится ли скорость на пятерых, перерабатывающих, или на восьмерых, работающих устойчиво

Стэнфордский экономист John Pencavel в своём исследовании 2014 года про working hours и productivity дал самое чистое доказательство по теме. Output растёт с количеством часов до примерно 49 в неделю. После 55 output на час падает настолько резко, что 70-часовая неделя даёт почти столько же, сколько 56-часовая. Лишние 14 часов — это чистая стоимость без отдачи. Отчётность по часам этот разрыв увидеть не может. По utilization — может.

Как PanDev считает FTE utilization

Формула намеренно скучная:

utilization = avgMonthlySeconds / (160h × 3600)

avgMonthlySeconds берётся из IDE-телеметрии — heartbeat-based время активного редактирования, а не «у меня был ноут открыт». 160h × 3600 — стандартная FTE-база (40ч × 4 недели). Для сотрудников с кастомным графиком — декрет 50%, контракторы на 4-дневке, лиды с формальным 30% management time — знаменатель переопределяется через CustomEmployeeWorkingTime, и график 50% считается против базы 80ч, а не 160.

Результат идёт в heatmap с тремя зонами:

ЗонаДиапазонЧто значитДействие
Зелёная<70%Недоутилизация. Запас мощности.Брать новую работу, менторить, экспериментировать
Оранжевая70–90%Здоровая. Устойчивая нагрузка.Защищать этот диапазон
Красная>90%Устойчивая перегрузка. Риск выгорания.Разобраться на той же неделе, перераспределить

Виджет рендерит scrollable per-day timeline с фиксированной Y-осью, чтобы строка, которая внезапно становится красной в середине месяца, была видна с первого взгляда. Мы намеренно выбрали такую раскладку вместо месячных средних, потому что один 95% месяц — редкость; три подряд — это заявление об увольнении в процессе написания.

Скажу прямо: это инструмент для направления внимания, а не приговор. Красная клетка — это вопрос «что произошло на той неделе?», а не performance review.

Часы vs FTE utilization: одинаковые суммы, разные истории

Шесть инженеров, тот же март, по 160ч «отлогированных»:

ИнженерЧасы залогированоАктивные IDE-часыКастомная базаFTE utilizationЗона
Alex (senior)160ч152ч160ч95%Красная
Maria (senior)160ч148ч160ч93%Красная
James (mid)160ч124ч160ч78%Оранжевая
Sarah (mid)160ч118ч160ч74%Оранжевая
Daria (lead, 30% mgmt)160ч98ч112ч88%Оранжевая
Tomás (декрет 50%)80ч72ч80ч90%Оранжевая

Две красных в «идеальном» месяце. Daria выглядит нормально, потому что её база корректно учитывает management time — без override она бы читалась как 61% и казалась лентяйкой. Tomás отлогировал в два раза меньше часов, но ближе к своему потолку, чем James и Sarah к своим. Среднее — «команда отлогировала 1 000 часов, это норма» — стирает всё это.

Это и есть аргумент за FTE utilization в одной таблице. Часы дают вам прямоугольник. Утилизация — heatmap.

Три архетипа команды, которые видит heatmap

Прогоните heatmap по 4 неделям для команды из 8. Повторяются три паттерна:

АрхетипРаспределение по зонамЧто реально происходит
Скрытое выгорание60% красная, 15% оранжевая, 25% зелёнаяДвое-трое тащат, остальные плывут. Скорость выглядит нормальной, пока кто-то из тащущих не уйдёт.
High-performance10% красная, 75% оранжевая, 15% зелёнаяБольшинство в диапазоне 70–90%. Красные — короткие, привязаны к конкретному инциденту. Зелёные — намеренные (отпуск, обучение).
Недоутилизация0% красная, 30% оранжевая, 70% зелёнаяРеальный запас мощности. Либо штат раздут, либо сломан intake задач. Это не «ленивая команда» — это сбой планирования сверху.

Скрытое выгорание — самый опасный. На дашборде по часам он выглядит здоровым, потому что тащущие компенсируют плывущих. Сумма — норма. Проблема в распределении. Gallup в State of the Global Workplace 2024 ставит глобальную вовлечённость на уровне 23%, а активную невовлечённость — 15%. То есть в среднем в команде больше disengaged, чем burnt-out, но именно burnt-out делают работу. Математика по часам их усредняет. FTE utilization их разделяет.

Heatmap утилизации по 8 инженерам за 4 недели: горячие красные клетки на 1–2 неделях, остывающие до оранжевых на 3–4 неделях после перераспределения Та же команда, та же сумма часов. Недели 1–2: паттерн скрытого выгорания — красные тащущие, зелёные плывущие. Недели 3–4 после redistribution: разброс сжался в диапазон 70–82%.

Реальный пример: −23% cycle time, ноль найма

Команда из 8 инженеров отлогировала 1 280 часов в марте 2026. Отчёт по часам читался как «месяц укомплектован, идём по плану». Heatmap FTE utilization рассказывал другое:

  • 5 инженеров на 92–98% (красная зона) три недели подряд
  • 3 инженера на 45–55% (зелёная зона) — не в отпуске, не на обучении, просто недоразданы

Их лид прокликал drill-down через /dashboard/finances/employee/:id для каждого инженера в красной зоне. Двое тонули в очереди code review. Двое были вытащены в security-проект под регулятора, который никто не отразил в спринт-плане. Один в одиночку парно-дебажил flaky-пайплайн 12 дней.

Фикс был неромантичный: переключить CR-нагрузку security-проекта на двух инженеров из зелёной зоны и подсадить третьего парой к владельцу flaky-пайплайна. К апрелю разброс на heatmap сжался в диапазон 70–82% по всем 8.

Cycle time улучшился на 23%. Найм: ноль. Сумма часов месяц-к-месяцу была идентичная. Форма этих часов — совершенно разная. Именно форма предсказывает, останется ли команда в Q4.

Та же динамика, которую мы разобрали в статье про overhead coefficient: utilization напрямую кормит расчёт nontaskTotal, который вылезает в математике cost-per-feature. Команда, работающая в красной зоне, несёт 1.3–1.5× эффективной стоимости команды того же размера в оранжевой — потому что налог на выгорание компаундится в churn в течение двух кварталов.

Что FTE utilization НЕ измеряет

Скажу прямо, чтобы никто не вешал планирование на метрику, которая это не вытянет:

  • Не ловит мышление вне клавиатуры. Staff-инженер, проектирующий систему на доске два часа, читается как IDE-idle. Для research-heavy и design-heavy ролей сочетайте метрику с self-reported deep-work блоками. Сторону deep work мы разобрали в почему два часа непрерывного кода равны шести.
  • Не измеряет качество кода. Инженер на 95% в красной зоне может выдавать фичи и одновременно баги. Смотрите вместе с review velocity из code review checklist 2026, а не изолированно.
  • Не работает для соло- и opensource-контрибьюторов. Наш датасет — B2B инженерные команды. Соло-фаундеры и OSS-мейнтейнеры живут совсем в другом ритме: рваные пики, асинхронная коллаборация, нет фиксированной FTE-базы.
  • Одна неделя высокой утилизации — это шум. Три подряд — сигнал. Сила heatmap в time series, а не в снапшоте.

Как действовать на том, что показывает heatmap

Для каждой зоны playbook короткий:

Красная (>90% устойчиво ≥3 недель): 1:1 на той же неделе. Не делайте это performance-разговором — делайте load-разговором. Аудит того, чем человек владеет: очередь CR, on-call, проекты, ad-hoc-запросы. Перенесите минимум один поток работы в течение спринта. Перепроверьте через две недели.

Оранжевая (70–90%): ничего не делать. Это диапазон, в котором вы хотите видеть 70–80% команды. Не оптимизируйте людей, которые уже там, где надо.

Зелёная (<70%): вопрос, не обвинение. Спросите, что блокирует — низкий intake? Тикеты неправильно нарезаны? Инженер ждёт review? Раскачивается после смены роли? Если ничего из этого — это реальный запас мощности под новые инициативы или менторство.

Самая частая ошибка, которую мы видим: команды реагируют на красные зоны наймом. Найм занимает 4–6 месяцев до выхода эффективного инженера. Перераспределение — один спринт. Нанимайте, когда перераспределение перестало работать, не до того.

Метрика, которую мы бы повесили на стену

Если бы пришлось выбрать одну цифру для стены инженерных операций, это были бы не часы. И даже не средняя утилизация. Это была бы доля команды в красной зоне ≥3 недель подряд.

Выше 25% — у вас структурная перегрузка. Ниже 5% — возможно, перебор по штату. Между 5% и 15% — здоровая работа с нормальной частотой инцидентов и кранчей. Эта одна цифра предсказывает риск attrition, стабильность cycle time и здоровье review-очереди лучше любого тщеславного дашборда.

Часы говорят, что никто не пропал. FTE utilization — кто из них останется через полгода. Выбирайте ту, что отвечает на вопрос, который стоит задавать.

Попробуйте сами — бесплатно

Подключите IDE-плагин за 2 минуты и увидьте свои реальные метрики. Без карты, без обязательств.

Попробовать бесплатно