Переоценен ли инженерный процесс?

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

Эта статья – краткое напоминание о том, что действительно важно, и на что менеджеры инженеров (Engineering Manager) должны тратить свое время и силы.

За время своей работы я провел интервью со множеством людей. И каждый раз неизбежно вставал вопрос: “Как устроен ваш инженерный процесс? Вы agile-команда?” На текущий момент термины agile, scrum, спринт используются очень свободно, и я осмелюсь утверждать, что врядли мы все одинаково понимаем их значение. Как мы пришли от первоначального Agile-манифеста к тому, что имеем сейчас?

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

Что действительно важно

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

Что необходимо для достижения этого?

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

  • Возможности:
    • Инженеры должны иметь представление о технологии, которая используется для создания продукта.
    • Инженеры должны быть заинтересованы в том типе проблем, которые им предстоит решать.
    • Инженеры должны иметь возможность оценивать технические преимущества нескольких приоритетных инициатив, чтобы оптимизировать соотношение затрат и результатов, а также определять этапы.
    • Инженеры должны понимать систему, с которой они работают, достаточно хорошо, чтобы определить области требующие обслуживания и сокращения технического долга, так чтобы это не влияло на будущую скорость.
    • Инженеры должны сотрудничать и хорошо общаться между собой.
  • Как выполняется работа:
    • Команда должна понимать желания клиентов и следовательно иметь возможность расставлять приоритеты инициативам (с помощью аналитика и менеджера по продукту).
    • Инженеры должны быть вовлечены в свою работу, чтобы обеспечить максимальную производительность. Обычно это требует понимания влияния их работы, а также некоторую степень творческой свободы.
    • Инженеры должны иметь достаточно времени чтобы сосредоточиться
    • Инженеры должны быть в курсе деталей того что они делают. Им нужен вызов и ответственность за результат.
    • Команда должна чувствовать импульс. Частое предоставление ценности в сочетании с анализом влияния работы команды с помощью показателей очень важный аспект мотивации. Импульс лучше всего достигается при итеративной реализации проекта.
    • Команда должна иметь ограниченную зависимость от других частей организации, чтобы выполнять свою работу.

Что может сделать технический руководитель чтобы удовлетворить эти требования?

  • Проводить качественные найм и отбор в команду. Многие из перечисленных выше пунктов требуют сильных индивидуальныз способностей. Состав команды имеет большое значение. В сильной команде сочетаются инженеры с разным опытом работы, которым нравится работать вместе. Благодаря этому команда может брать себе задади разной степени сложности.
  • Контекстуализация работы, выполняемой командой по отношению к большему продукту и организации.
  • Определение небольших объемов работ с измеримыми результатами. Сохранение объемов небольшими – лучший способ достижения поставленных целей.
  • Создание рабочей среды с ограниченным количеством отвлекающих факторов.
  • Предоставление инженерам возможности тратить некоторую часть времени на работу, которую они считают важной. Это позволит им устранять технический долг, а также использовать их творческий потенциал в развитии продукта.
  • Предоставление инженерам возможности участия в планировании своей работы и устанавлении контрольных точек, с ограниченной предечей ответственности за результат.
  • Выявление и устранение зависимостей команды от остальной организации.

Может ли процесс в этом помочь?

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

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

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

Вывод

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

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