DevPace
БлогСправкаНовостиСкачатьДемоТарифыПривязка устройстваВойтиНачать

Чем на самом деле занят рабочий день разработчика

Со стороны рабочий день разработчика выглядит просто: человек сидит за монитором и пишет код. Так его представляют нетехнические коллеги, так его иногда представляет и сам начинающий разработчик, ещё не привыкший к тому, как на самом деле устроена инженерная работа. Реальность заметно сложнее, и разрыв между ожиданием и тем, что показывает честный учёт времени, — одна из самых частых причин недовольства собственным днём: “я почти ничего не закодил, а день пролетел”.

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

Дальше — честная раскладка по этим шести категориям, что реально входит в каждую, таблица для быстрой ориентации, гипотетический пример типичного дня в виде временной шкалы и то, как каждый может посмотреть свою собственную структуру дня, а не гипотетическую. Здесь же — почему код-ревью и встречи так часто оказываются больше, чем ожидалось, и что с этим наблюдением вообще можно сделать.

Оглавление

Миф о том, что разработчик весь день пишет код

Миф держится на простой, но неверной логике: раз результат работы разработчика — код, значит, вся работа состоит из его написания. Это то же самое, что судить о работе писателя только по числу страниц в готовой книге, не замечая черновиков, переписывания, консультаций с редактором и месяцев, ушедших на то, чтобы понять, о чём вообще должна быть эта книга.

На практике написание нового кода — лишь один из шагов в цепочке, которая обычно начинается с чтения и понимания уже существующей системы, продолжается обсуждением решения с командой, самим написанием, затем код-ревью — своим и чужим, — и часто отладкой, когда написанное не работает с первого раза. Разработчик, который провёл день в отладке сложного бага и в итоге исправил его тремя строками, сделал не меньше работы, чем тот, кто за тот же день написал двести строк нового функционала, — просто эта работа не выглядит как код в состоянии “написано”. Подробный разбор того, сколько реально времени в течение дня уходит именно на написание кода, а не на всё вокруг него, — в отдельной статье “Сколько времени программист пишет код”.

Миф особенно живуч ещё и потому, что часть работы разработчика физически не оставляет следов, которые легко посчитать: обсуждение архитектуры на созвоне, чтение чужого пул-реквеста, попытка понять чужой модуль перед тем, как в него что-то добавить — всё это не превращается в diff, который можно измерить строками. Из-за этого возникает искажённое ощущение: раз в git не появилось коммита, значит, ничего не произошло — хотя содержательная работа вполне могла занять большую часть дня.

Шесть категорий, из которых состоит день разработчика

Ниже — шесть видов деятельности, которые в сумме и составляют типичный рабочий день разработчика в командной разработке. Порядок здесь не отражает долю времени — она у каждого человека, команды и периода своя; порядок просто следует за естественной последовательностью задачи от появления до завершения.

Код — непосредственно написание, изменение или удаление кода в IDE или редакторе: новая функциональность, рефакторинг, исправление найденного бага после того, как причина уже понятна.

Код-ревью — чтение и оценка чужих изменений перед их слиянием в основную ветку, а также ответ на комментарии к собственным пул-реквестам и доработка кода по замечаниям. Это дорога в обе стороны: время тратится и на то, чтобы просмотреть чужой код, и на то, чтобы дождаться и обработать ревью своего.

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

Отладка и дебаг — поиск причины неправильного поведения программы: чтение логов, работа с отладчиком, воспроизведение бага, проверка гипотез одна за другой. В отличие от написания нового кода, здесь результат работы — не новые строки, а понимание, почему существующие строки ведут себя не так, как ожидалось.

Чтение чужого кода и документации — разбор существующей кодовой базы перед тем, как в неё можно что-то безопасно добавить, изучение документации сторонней библиотеки или внутреннего API, чтение технического райтапа коллеги. Эта категория частично пересекается с код-ревью, но шире его: она включает и самостоятельное изучение системы вне контекста конкретного пул-реквеста.

Коммуникации — переписка в мессенджерах и почте, не оформленная как формальная встреча: быстрый вопрос коллеге, обсуждение задачи в тред-чате, синхронизация по асинхронному каналу вместо созвона. В отличие от встреч, это время обычно рассредоточено по дню мелкими эпизодами, а не собрано в один блок в календаре.

Таблица: категории дня разработчика и что в них входит

Категория Что входит Что НЕ входит
Код Написание нового функционала, рефакторинг, исправление бага после того, как причина найдена Обсуждение решения до начала работы над ним — это встречи или коммуникации
Код-ревью Просмотр чужих пул-реквестов, ответы на комментарии к своим, доработка по замечаниям Первое самостоятельное чтение чужого модуля без привязки к конкретному ревью
Встречи Стендап, планирование, ретро, архитектурные обсуждения с несколькими участниками, встречи с продуктом Быстрый асинхронный вопрос в чате — это коммуникации, а не встреча
Отладка и дебаг Поиск причины бага, работа с логами и отладчиком, проверка гипотез Исправление кода после того, как причина уже понятна, — это снова код
Чтение чужого кода и документации Изучение существующей кодовой базы, документации библиотек и внутренних API, технических райтапов Чтение кода строго в рамках оформленного ревью пул-реквеста — это код-ревью
Коммуникации Переписка в мессенджерах и почте, асинхронные обсуждения задач вне формальной встречи Синхронное обсуждение с несколькими участниками по календарю — это встреча

Границы между соседними категориями в этой таблице не абсолютны — реальный день не режется по живому ножом, и один и тот же час может начаться с чтения чужого кода, а закончиться неформальным обсуждением находки в чате с автором. Таблица нужна не для бюрократической точности, а для того, чтобы у “остального времени, которое не код” появились конкретные названия вместо одной размытой массы.

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

Точных общих цифр по всей индустрии, которые можно было бы честно назвать универсальными для любой команды, роли и стека, не существует — слишком разные условия у стартапа на пять человек и у команды внутри крупной корпорации. Но два конкретных академических исследования дают опорные точки, на которые можно ссылаться без выдумывания процентов.

Крупное полевое исследование Xia, Bao, Lo, Xing, Hassan и Li, опубликованное в IEEE Transactions on Software Engineering в 2018 году, отслеживало реальную рабочую активность профессиональных разработчиков и показало, что значительная часть их времени уходит именно на понимание уже существующего кода — то есть на его чтение и разбор, а не на написание нового. Это прямое академическое подтверждение того, о чём говорилось выше: одна из шести категорий дня, “чтение чужого кода”, — не второстепенная, а одна из содержательных частей работы, а не пауза перед “настоящей” работой.

Полевое исследование Meyer, Fritz, Murphy и Zimmermann “Software Developers’ Perceptions of Productivity”, представленное на конференции ESEC/FSE в 2014 году, изучало, как сами разработчики ощущают продуктивный и непродуктивный день. Ключевой вывод исследования — ощущение продуктивного дня у разработчиков устойчиво связано с наличием крупных непрерывных блоков времени и с фактическим прогрессом по задаче, а не с общим объёмом отработанных часов или количеством написанного кода. Иначе говоря, день с несколькими встречами и раздробленным временем субъективно ощущается хуже даже при том же итоговом объёме сделанной работы — и это уже независимо подтверждённое наблюдение, а не догадка.

Оба исследования вместе объясняют, почему честная структура дня так редко совпадает с интуицией: часть реальной работы (понимание кода) систематически недооценивается человеком со стороны, а часть переживаемого дискомфорта (раздробленность встречами) не связана напрямую с объёмом сделанного, а связана именно со структурой времени. О том, как это соотносится с более широкими фреймворками оценки продуктивности разработчика вроде SPACE, — в отдельной статье про SPACE-фреймворк.

Иллюстративный пример: гипотетический день разработчика

Ниже — не собранные данные, а гипотетический пример, построенный для иллюстрации, как шесть категорий могут распределиться в течение одного дня. Это не типичная статистика по индустрии и не усреднённый реальный день — просто условная временная шкала, показывающая логику, а не цифры, которые стоит воспринимать как норму для кого угодно.

Время Категория Что происходит
09:00–09:20 Коммуникации Просмотр непрочитанных сообщений с вечера, короткие ответы
09:20–09:35 Встречи Ежедневный стендап команды
09:35–11:00 Код Непрерывная работа над новой функциональностью в IDE
11:00–11:30 Код-ревью Просмотр пул-реквеста коллеги, комментарии
11:30–12:30 Отладка и дебаг Воспроизведение и поиск причины бага, о котором сообщил тестировщик
12:30–13:30 Обеденный перерыв, вне рабочего трекинга
13:30–14:15 Чтение чужого кода и документации Разбор модуля, в который нужно внести изменение
14:15–15:00 Встречи Обсуждение архитектурного решения с двумя коллегами
15:00–16:30 Код Продолжение работы над функциональностью с утра
16:30–17:00 Коммуникации Ответы на вопросы по задаче в чате, синхронизация асинхронно
17:00–17:40 Код-ревью Доработка своего пул-реквеста по комментариям ревьюера

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

Почасовая «Лента дня» с цветными сегментами категорий активности за реальный рабочий день Реальная лента дня строится не по смысловым категориям вроде “код-ревью” или “встречи”, а по техническому приложению и его категории — но логика та же: день состоит из чередующихся блоков, а не из одного сплошного цвета.

Как проверить это на себе

Вместо того чтобы полагаться на общее ощущение “почти весь день ушёл на ерунду”, свою собственную структуру дня можно посмотреть напрямую — если работать за компьютером с фоновым трекером активности вроде DevPace, который фиксирует техническую категорию активного приложения и её длительность.

Здесь важна одна честная оговорка: шесть смысловых категорий из этой статьи — код, код-ревью, встречи, отладка, чтение чужого кода, коммуникации — не совпадают один в один с техническими категориями, которые различает автоматический трекер. Код-ревью в браузере на GitHub или GitLab технически попадёт в категорию “браузер”, а то же ревью через плагин прямо в IDE — в категорию “IDE”; звонок в отдельном видеоприложении обычно попадёт в “коммуникации”, а обсуждение в календарном созвоне с демонстрацией экрана внутри самой IDE — снова в “IDE”. Трекер честно показывает, в каком инструменте и сколько времени было проведено технически, но не умеет и не пытается угадывать, что именно из шести смысловых категорий происходило внутри этого инструмента в конкретный момент, — потому что для этого пришлось бы читать содержимое экрана или переписки, а не просто фиксировать категорию и длительность.

При этом соотнести одно с другим на глаз обычно несложно: разбивка дня по категориям показывает суммарные минуты за день по IDE, браузеру, коммуникациям, терминалу и другим техническим категориям — и, глядя на день целиком, легко вспомнить, что именно происходило в каждом блоке времени: было ли время в IDE написанием нового кода или отладкой уже существующего, было ли время в коммуникациях просто перепиской или частью ревью через комментарии к пул-реквесту. Лента дня, упомянутая выше, показывает то же самое, но по часам и с возможностью приблизить конкретный отрезок — это удобно, если хочется вспомнить не только сколько суммарно ушло на браузер, но и в какой момент дня это произошло.

Что делать с этим знанием

Само по себе знание о том, что код — не единственная и не всегда преобладающая часть дня, ничего не меняет автоматически, но снимает минимум одну ложную претензию к себе: если за день написано мало новых строк кода, а вместо этого прошло несколько часов в код-ревью, отладке сложного бага или обсуждении архитектуры, это не значит, что день прошёл впустую — это значит, что день прошёл в других, не менее содержательных частях той же самой работы.

Практическая польза начинается там, где структура дня становится не разовым наблюдением, а устойчивой картиной за несколько недель: если код-ревью или встречи стабильно занимают заметную часть каждого дня, это повод обсудить с командой распределение нагрузки — например, не назначать одного и того же человека ревьюером почти на все пул-реквесты подряд, — а не повод молча считать, что просто “не хватает дисциплины писать больше кода”. Если раздробленность дня короткими сессиями коммуникаций устойчиво выше обычного, это тоже сигнал не про личную несобранность, а про структуру рабочего процесса, которую стоит обсуждать на уровне команды, а не пытаться перебороть силой воли в одиночку.

Частые вопросы

Значит ли это, что писать меньше кода — это нормально?

Да, в том смысле, что объём написанного кода за день — плохой самостоятельный индикатор того, была ли работа сделана: код-ревью, отладка, чтение чужого кода и обсуждения на встречах — такая же часть инженерной работы, просто она не оставляет пропорционального следа в diff’е. Один день с малым количеством новых строк и один день с большим их количеством оба могут быть одинаково содержательными в зависимости от того, что именно происходило помимо написания кода.

Почему код-ревью и встречи иногда занимают больше времени, чем сама разработка?

Обычно это связано с ролью и этапом проекта, а не с личной неэффективностью. Более опытные разработчики и тимлиды закономерно тратят больше времени на ревью чужого кода и синхронизацию с командой, потому что часть их вклада — это помощь другим двигаться быстрее, а не только собственный код. На этапе активного проектирования или интеграции нескольких команд доля встреч также закономерно растёт по сравнению с этапом самостоятельной реализации уже согласованного решения.

Как понять свою личную структуру дня, а не общие рассуждения о разработчиках вообще?

Общие наблюдения из этой статьи показывают логику и категории, но не заменяют взгляд на собственные данные — у каждой команды, роли и периода проекта пропорция своя. Практический способ — посмотреть разбивку своего дня по категориям и ленту дня по часам за несколько недель подряд в инструменте вроде DevPace и сравнить это с собственным ощущением дня, а не с усреднённой цифрой по чужим командам.

Итог

Рабочий день разработчика редко сводится к одному сплошному блоку написания кода — он складывается из шести переплетающихся частей: кода, код-ревью, встреч, отладки, чтения чужого кода и документации, коммуникаций. Каждая из них — не отвлечение от “настоящей” работы, а её содержательная часть, что подтверждают и полевые исследования вроде Xia et al. (2018) про долю времени на понимание кода, и Meyer et al. (2014) про связь ощущения продуктивного дня с непрерывными блоками времени, а не с объёмом написанного. Более широкий разбор того, какие метрики продуктивности разработчика вообще имеют смысл с учётом этой структуры дня, — в хабе “Продуктивность разработчика: какие метрики имеют смысл”.

Честная структура собственного дня — не абстракция и не чужая статистика, а то, что можно увидеть по своим собственным данным, если фоновый трекер честно фиксирует категорию и длительность активности, а не пытается угадать, чем именно был занят каждый час.

Читайте также

Посмотреть демо