Почему я выбираю парное программирование в удаленной команде
Привет. Я — Игорь, фулстек-разработчик с
На своем примере я готов доказать, что эти предрассудки беспочвенны и возникают по незнанию. Давайте погрузимся в эту тему и развеем несколько мифов о парном программировании.
Что такое парное программирование
Парное программирование — это активность, при которой два разработчика работают вместе над одной частью кода одновременно. Основная идея парного программирования — это обсудить, спланировать, обдумать и вдвоем реализовать лучшее решение, чем каждый из инженеров мог бы придумать в одиночку.
Первоначально определение термина также включало «необходимость совместно использовать один компьютер». Однако, современная реальность показывает, что онлайн сеансы парной работы могут быть столь же эффективными, как и работа в одном помещении.
Преимущества парного программирования
Так как команда Railsware была ориентирована на удаленную работу с самого начала, мы не понаслышке знаем, что такое дистанционное парное программирование и можем подтвердить его эффективность. Вот те плюсы, которые я выделил для себя за годы практики парных сессий.
Создание более качественного решения
Работая в паре, мы создаем решения лучшего качества:
- Код лучше упорядочен, так как два инженера сначала обсудили структуру, продумали ее, а затем приступили к ее реализации.
- Когда небольшой фрагмент кода написан, разработчики проверяют его, рефакторят и немедленно исправляют ошибки.
- Код или проблема постоянно рассматриваются двумя людьми у которых не только опыт разный, но и способ мышления.
Быстрый онбординг и обучение новых сотрудников
Сессия парного программирования создает идеальные условия для быстрой адаптации новых членов команды. Парное программирование помогает как новичкам, так и долгожителям команды быстрее получать новые знания под руководством опытного инженера.
Например, на парной сессии мы показываем ребятам, которые только пришли в компанию или на проект, выдержки из документации. Со временем документация растет, и ее трудно прочесть и запомнить за один подход. Во время парного программирования я могу рассказать им вкратце о самом важном, сэкономив и их и свое время.
Коллективное владение кодом
Когда несколько человек работают над одной задачей, они чувствуют себя вовлеченными и причастными к кодовой базе. Все задействованные инженеры знакомы с разными частями продукта, а не только с теми, которые они создали лично.
И если кто-то покидает проект, не возникает так называемого «Bus factor», когда определенным контекстом владеет только один человек в команде.
Это преимущество становится еще более очевидным, если инженеры в парах меняются, и больше людей участвует в работе над одной конкретной фичей.
Хороший инструмент для найма
При отборе кандидатов мы обычно проводим «full-day interview». В течение этого дня кандидат работает в паре с одним из наших инженеров над реальными задачами, комментирует и объясняет свою работу.
- Так мы можем увидеть, как кандидат взаимодействует с другими членами команды.
- Можем объективно оценить сильные и слабые стороны кандидата.
- Это дает нам представление о том, как кандидаты озвучивают свои идеи, возражения, как они реагируют на несовершенные требования, технический долг и т. д.
Полезный инструмент для удержания сотрудников
В сфере удаленной работы наличие хорошей пары может снизить вероятность ухода людей, поскольку они чувствуют себя более связанными с командой и, следовательно, с самой компанией.
Сессия парного программирования — это не только совместное написание кода, но беседы о том о сем, шутки, решенные проблемы, взаимопомощь, и многое другое. Все эти моменты создают связь с командой. Ротация напарников усиливает эту связь и создает командный дух, которого часто не хватает если работаешь из дома.
Более эффективная работа
Работая вместе и фокусируясь на одной задаче, разработчики не отвлекаются на Slack, почту, телефоны и прочее. Кроме того, у нас появляется возможность быстрее решать блокеры и сложные задачи.
Мне парное программирование помогает, когда я чувствую себя непродуктивным или когда у меня блокеры. Работа в паре дает мне больше энергии и мотивации для решения проблем. Я также считаю, что правильный баланс работы в паре и работы в одиночку может предотвратить выгорание.
Быстрый обмен знаниями и обучение
На сеансе парного программирования инженеры передают свой опыт и знания другим, а также могут и учиться у своего партнера. Это особенно полезно для удаленных команд, когда они не могут встречаться лично.
Недостатки парного программирования
Несмотря на все плюсы парной работы, нужно быть честными и поговорить о недостатках этой практики.
Требует больше ресурсов на решение одной задачи
Существует мнение, что два разработчика, работающие над одной и той же задачей, тратят больше времени, чем если бы они работали над разными задачами отдельно.
В одном исследование посчитали, что в паре разработчики тратят примерно на 15% больше времени, чем если бы задачу выполнял кто-то один. В то же время, Лори Уильямс и Роберта Кесслер, в их книге «Pair Programming Illuminated», утверждают, что пары создают более качественный код примерно вдвое быстрее, чем в одиночку.
Я считаю, что, даже если мы потратим немного больше времени работая в паре, мы сэкономим как минимум столько же времени на этапах QA и review. Так как качество создаваемого кода в паре намного выше, а дефектов намного меньше.
Больший стресс и быстрая утомляемость
Работа бок о бок, комментарии к каждому шагу, обсуждение всех деталей и объяснение хода наших мыслей требует больших усилий, чем более расслабленная работа в одиночку. После парного программирования в несколько часов многие часто чувствуют себя истощенными.
Также, высокая когнитивная нагрузка не только утомляет, но и провоцирует стресс. И это происходит не только из-за темпа работы и чрезвычайной концентрации, но и из-за необходимости открыто говорить о вещах, которых ты не знаешь.
Порог вхождения
Мы привыкли думать и работать в одиночку. Парное программирование требует, чтобы мы думали вслух и комментировали каждую идею. Чтобы к этому привыкнуть, нужно время и практика.
Как провести сессию в удаленной команде
Ниже я делюсь с несколькими советами, о которых нужно помнить в удаленной команде.
- Выберите инструменты. Перед сессией узнайте, какую среду разработки и другие инструменты использует ваш коллега в своей повседневной работе. Выберите то, что удобно использовать вам обоим. Перед сеансом настройте все программы и инструменты.
- Найдите удобное для сессии время. Парное программирование — очень энергозатратная практика, поэтому важно выбрать правильное время для сессии. Если вы находитесь в одном часовом поясе, обсудите со своим коллегой, когда вы наиболее продуктивны в течение дня. Если коллега находится в другом часовом поясе, найдите совпадающее часы и выберите временной интервал, свободный от звонков.
- Распланируйте работу заранее. Перед сеансом созвонитесь с коллегой и обсудите задачу. Убедитесь, что вы понимаете цель задачи одинаково. Разбейте работу на несколько этапов и расставьте приоритеты. Таким образом, вы создадите план действий и будете знать, с чего начать сеанс.
- Разговаривайте во время сессии. Да, парное программирование может быть для вас в новинку. Однако вашему партнеру необходимо понимать ход ваших мыслей. Долгое молчание во время парного программирования признак того, что что-то идет не так.
- Слушайте друг друга. Говорить недостаточно. Вам нужен диалог, поэтому прислушивайтесь к идеям и комментариям вашего партнера. Если вы не согласны со своим коллегой, сделайте паузу, чтобы обсудить это и принять решение сообща.
- Будьте открытым. Поначалу сессии парного программирования могут показаться необычными и некомфортными. Но нужно помнить зачем вы это делаете и какая у вас цель. Вам нужно завоевать доверие друг друга, чтобы работать в синергии.
- Будьте терпеливы. Ваш коллега может работать медленнее или быстрее вас. Если вам хочется перебить и/или поправить человека, используйте правило 5 секунд — подождите 5 секунд, если не передумали, можете комментировать.
- Не стесняйтесь задавать много вопросов. Ваша задача понять идеи друг друга. Спросите, почему ваш коллега предложил тот или иной подход, чтобы вы могли применить его в дальнейшем при смене ролей.
- Делайте перерывы. Писать код в паре сложно, поэтому делайте регулярные перерывы, чтобы отдохнуть. Я бы рекомендовал
50-минутное написание кода,5-минутное обсуждение, а затем 5-10-минутный перерыв. Отдохните какое-то время или прервите сеанс, если вы понимаете, что не можете продуктивно работать дальше. - Не сдавайтесь, если парное программирование — новый опыт для вас. Работать в парах труднее, чем в одиночку, и естественно, что вы чувствуете себя вне зоны комфорта. Единственное правило здесь — не сдаваться, оставаться позитивным и открытым.
- Не отвлекайтесь. Конечно, вы не можете гарантировать, что во время сеанса ваши мысли не потекут в другом направлении. В то же время вы можете свести к минимуму отвлекающие факторы, убедиться, что в вашем расписании нет предстоящих встреч, включить «режим не беспокоить» в мессенджерах на время сеанса и положить телефон куда-нибудь подальше.
- Не занимайтесь рефакторингом или другими задачами во время перерывов. Перерывы нужны, чтобы помочь вам снять напряжение, отвлечься, и набраться энергии перед следующим раундом.
- Не работайте в паре, если в этом нет необходимости. Есть много задач, которые лучше делать самостоятельно. Обычно это мелкие, рутинные, простые задачи.
- Не работайте весь день в парах. По своему опыту могу сказать, что для инженеров, которые только начали заниматься парным программированием,
3-4 часового занятия в день более чем достаточно.
Инструменты для удаленных командах
Railsware — это удаленная команда с инженерами, живущими в 10+ разных странах. Тем не менее мы регулярно практикуем парное программирование и в значительной степени полагаемся на эту практику при приеме на работу, онбординге новых сотрудников, обучении и обмене знаниями.
Для сеансов парного программирования мы с ребятами опробовали разные инструменты и остановили свой выбор на:
- Visual Studio Code с плагином Live Share. Эта комбинация инструментов для совместной работы, которая позволяет давать доступ к разным частям кода, но не ко всему репозиторию. Мы используем их во время «full-day interview» с кандидатами.
- RubyMine с плагином Code With Me. Это стандартный выбор для сеанса удаленного парного программирования при условии, что обе стороны привыкли работать в RubyMine
Для демонстрации экрана мы в основном используем:
- Slack call — это удобный инструмент, который позволяет выделять текст на демонстрируемом экране.
- Zoom хорошо подойдет, если интернет соединение не очень надежное.
В качестве editor/IDE agnostic решения могу порекомендовать приложение Tuple.
Кроме того, для работы с кодом, при которой не нужен открытый браузер, удобно использовать ssh с tmux, особенно при низкой скорости интернета.
Подведение итогов
В то время как некоторые инженеры продолжают игнорировать парное программирование, думая, что это не стоит их усилий, у нашей команды противоположное мнение.
Мы практикуем парное программирование, чтобы устранять блокеры в проектах, отбирать лучших кандидатов, онбордить новичков, делиться опытом и знаниями в команде. Эта практика также помогает оставаться социально активными и строить прочные межличностные отношения, живя в разных странах.
Найкращі коментарі пропустити