Наблюдения из эксперимента по совместной работе

В Optimizely неделя взлома - важная часть нашей инженерной культуры. Дважды в год мы ломаем рутину и прототипируем новые идеи; это прекрасное время для экспериментов как в техническом, так и в культурном плане. Во время Hacky Holidays 2018 команда, с которой я работал, решила попробовать новый стиль работы: моб-программирование.

Что вообще такое моб-программирование?

Парное программирование - это не то, с чем мы незнакомы; Фактически, это довольно обычное дело - работать вместе с другим инженером для выполнения работы. Mob-программирование - это расширение этой модели, где вместо одного водителя и одного навигатора у вас есть один водитель, а остальная часть команды - навигаторы (в нашем случае это были еще три инженера). Роль водителя чередуется по команде, поэтому у каждого есть возможность испытать вождение и навигацию.

Моб-программирование дает много преимуществ, а также некоторые не очень важные детали. Одним из этих недостатков, безусловно, является название; «Моб» чувствует себя очень хаотичным, жестоким и негативным - все это характерно для толпы. Еще до того, как мы начали опробовать моб-программирование, мы решили изменить то, как мы его называли: групповое программирование.

«Группа», по крайней мере, более нейтральна, чем «мафия», даже если у вас могут не быть хороших воспоминаний о групповых проектах в школе.

В отличие от школьных проектов, когда мы начали групповое программирование, мы не хотели останавливаться. Это был очень интересный способ работать вместе над одной проблемой в одном месте с командой.

Групповое программирование вас не тормозит

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

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

Когда водитель не знал, как решить конкретную проблему, коллективный разум команды позволял нам всегда двигаться вперед.

Групповое программирование помогает строить отношения

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

Команда состояла из трех инженеров из Сан-Франциско и одного инженера из Остина. С помощью Zoom мы могли демонстрировать экран водителя, а навигаторы с легкостью могли смотреть и вносить свой вклад.

Групповое программирование вместе развивает команду

В то время как мы занимались бизнесом в команде, мы также заметили рост количества вопросов, которые могли бы не задаваться, если бы мы все работали независимо. Например, мы создаем зависимости для нашего проекта, когда запускаем «docker build» и во время разработки мы забыли пересобрать образ; это дало возможность одному из членов команды спросить, почему нам пришлось запускать «docker-compose build», а не просто «docker-compose up». Вместо того, чтобы искать в Slack ответ для решения проблемы ImportError, мы смогли научить, когда использовать разные команды Docker и почему вам нужно запускать те или иные команды для нашего приложения.

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

Привнесение группового программирования в вашу команду

Спросите, как вы хотите работать вместе

Мы не осознавали, насколько легко было начать работать с этим стилем работы. Фактически, все, что потребовалось, это вопрос в начале недели: как бы мы хотели работать в команде? Хотим ли мы разделить работу и работать независимо, или мы хотим добиться прогресса, когда мы все вместе?

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

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

Определите «простую» и «сложную» работу

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

В нашем случае наша простая / исследовательская работа выглядела так:

  • Создайте ветку, над которой мы все будем работать
  • Добавить колбу как зависимость к стеку приложения
  • Выберите фреймворк Flask REST API

Наша сложная работа выглядела так:

  • Внедрить механизм аутентификации
  • Реализуйте ресурс для обработки запросов (наш уровень представления)
  • Создайте модель SQLAlchemy и схему SQL
  • Напишите тесты для нового ресурса

Общайтесь, общайтесь, общайтесь

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

Попробуйте групповое программирование со своей командой

Мы обнаружили, что групповое программирование - это увлекательная смена темпа, когда мы можем решать проблемы и писать код вместе, как команда. В конце недели у нас был демонстрационный проект, и мы почувствовали, что улучшились как члены команды, сотрудники и инженеры. В 2019 попробуйте групповое программирование со своей командой; все, что нужно, - это один-единственный вопрос. С Новым Годом!

Спасибо Lauren Pappone, Sid Kakarla и Jessica Ross за опробование группового программирования! Это была супер веселая неделя хакеров.