IT-инфраструктура для бизнеса и творчества
Разработка
Dmitry Derbenev

Ретроспектива: проводим быстро и результативно с помощью funretro

Если ваши ретро не приносят результата, а только тратят время и раздражают команду разработки есть два выхода — отказаться от ретро вообще или сделать нормально. Знакомая боль и выбираете второй вариант? Тогда статья для вас

TL;DR: Краткий чек-лист проведения хорошего ретро

Советы для проведения продуктивной ретроспективы:

  • Используем сервис funretro.io (знаете сервис лучше? — напишите в комментариях)
  • Приходим подготовленными
  • Начинаем с разминки
  • Ограничиваем время
  • Убираем влияние авторитетов
  • Убираем перекрестное влияние
  • Фокусируемся только на самых важных проблемах
  • Формируем задачи с ответственными
  • Назначаем точку контроля выполнения действий

Что такое ретро и что может пойти не так?

Не углубляясь в Scrum/Agile — ретроспективу проводим в конце каждого спринта (так говорит теория) для того чтобы найти боли команды/блокеры в проекте. На практике можно придерживаться более экономичного подхода — проводим, когда чувствуем что нужно/объединяем несколько спринтов в одно ретро (например, ретро раз в 2-3 спринта)

За несколько лет работы в командах разработки я выделил для себя топ-5 болей ретро, которые превращают его из эффективного инструмента в бессмысленную трату времени, демотивирующую команду:

  • Зачем это нужно?
  • Почему так долго?
  • Меня не слушают, высказываться не буду
  • Что делать?
  • Почему ничего не меняется?

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

1. Выбор инструмента

Google docs/confluence и другие редакторы - привычная среда для большинства. Каждый пишет свои мысли или все говорят — ответственный записывает. В первом случае получаем влияние мнений более опытных членов команды на остальных, во втором — растянутый тайминг и усталость команды.

Trello/Jira - аналогично прошлому, чуть более удобное и привычное восприятие, возможность сразу отправлять задачи в работу

Funretro - сервис создан специально для проведения ретро. Плюсы — решает проблему анонимности, есть механизм голосования, много шаблонов ретро и тд. Из минусов — только 3 доски в бесплатной версии.

Все интуитивно понятно, просьбы перехода на платную версию не раздражают​ Дмитрий Дербенев​

Попробовав несколько вариантов, остановился на funretro, он решил почти все боли. Инструмент выбран — начинаем подготовку к ретро

2. Подготовка команды и доски

Подготовка — половина успеха в любом деле, ретро не исключение.

  • объявите дату и время ретро заранее, оповестите всех участников. Хорошая практика — попросить заранее подумать о вопросах ретроспективы, это сэкономит время команды
  • установите контекст ретроспективы — проговорите его в начале и пусть он будет всегда перед глазами. Например — обсуждаем прошлые 2 спринта проекта %Project_name%
  • выберите опцию hide cards в настройках — так каждый будет видеть только свои идеи (в тч создатель доски) до момента изменения настройки
  • не показывайте автора карточки (Show card’s author) — нам нужно максимально независимое мнение от всех
  • установите число голосов на человека. Исходя из личного опыта 3±1 голоса на человека — оптимально
  • поставьте таймер — ограничение заставляет думать и очень сильно повышает продуктивность. Для каждого раздела ретро — своя продолжительность
Для самых искушенных есть выбор шаблона ретро. Актуально когда классический вариант надоел и не приносит результатов​ Дмитрий Дербенев

Настроили доску? Стартуем

3. Ice breaker

Расскажите о цели ретро, проговорите базовые правила — говорить/писать честно, не винить в ошибках людей и тд

Первый раздел ретро обычно вызывает самые большие затруднения. Чем он проще, тем быстрее команда включится в работу. Например, это может быть описание спринта/проекта/настроения одним словом. Вообщем что угодно, но очень коротко. Ограничение времени — 1 минута. Ставьте таймер и не давайте выйти за лимит.

Как показывает практика - этот раздел самый сложный​ Дмитрий Дербенев

Когда время закончилось/все участники отписались — откройте карточки и зачитайте их. Поступайте так в конце каждого раздела ретро

4. Что хорошего?

Не забываем озвучивать хорошее, но без фанатизма, 3-4 минуты должно хватить

Попробуйте провести ретро без таймера и сравнить траты времени​ Дмитрий Дербенев

Сделали, зачитали, обрадовались и поехали дальше, к главным разделам

5. Что можно сделать лучше?

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

  • обеспечить безопасную среду
  • не дать забить эфир одному человеку
  • не дать влиять на участников команды PO/teamlead/PM и тд
  • не искать виновных

Анонимность, самостоятельная работа и установленные в начале правила успешно решают эти задачи

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

Не забывайте мержить карточки с одинаковыми проблемами (а они точно будут), иначе голоса размажутся. В funtretro для этого есть механизм drag’n'drop тикетов

Что нам нужно для объективного голосования?

  • скрыть число голосов до объявления результатов
  • голосовать можно за свои карточки и карточки других
  • 1 голос на одну карточку
Команда обеспокоена сменой дизайна после выполнения задачи и хочет скорее выйти в бета-тест. Вопрос про соотношение скорости разработки серверной/клиентской части сейчас менее важен, его можно обсудить на следующем ретро или решить позже​ Дмитрий Дербенев

Когда все проголосовали — выбираем топ-3(±1) проблем и начинаем заключительный этап

6. Что делать?

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

Важно:

  • высказываются все
  • задачи распределяются не директивно, каждый сам берет на себя ответственность
  • у задачи есть исполнитель
  • если к задаче нельзя сформировать критерий приемки — это не задача, нужно менять формулировку
  • сформулированные задачи переносятся в таск-трекер проекта (Jira/Trello и тд)
  • задачи распределены между участниками команды. Если все задачи достались кому-то одному — у вас что-то не так

Типичная ошибка формулировки решения:

Проблема — заказчик недоволен скоростью работы команды

Решение — давайте работать быстрее!

Это не конкретное действие, а лозунг. Не надо так

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

7. Profit!

Благодарим участников встречи, проговариваем что нужно сделать и примерные даты следующего ретро.

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

Признаки хорошего ретро

  • время проведения не превысило времени одного школьного урока (45 минут, в идеале нужно стремиться к 30 при любом размере команды). Человеческое внимание устроено таким образом, что дольше быть сфокусированным на работе без перерыва сложно, продуктивность резко падает.
  • все в команде дали фидбэк. Люди разные — кто-то любит болтать, кто-то молчать. Эфирное время при обсуждении решений проблем должно быть распределено относительно равномерно.
  • после окончания ретро есть четкие и понятные действия с ответственными. В идеале с дедлайнами (без фанатизма, приоритизация с текущими задачами обязательна)
  • к следующему ретро проект стал чуть лучше благодаря вашим действиям

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

Тратьте время ретро с умом и приносите пользу своей команде

PS если статья получит положительный отклик — я подготовлю аналогичный материал про проведение демо спринта

(function () { let cdnUrl = `https://specialsf378ef5-a.akamaihd.net/SelectelBranding/images/` let previousArticleNumber = null let currentArticleNumber = 0 let platform = 'Desktop' let articles = [ { name: 'camera', url: `${cdnUrl}CameraCat`, text: 'умную камеру для\u00A0наблюдения за\u00A0котиками', link: 'https://vc.ru/selectel/306690', num: 3 }, { name: 'chill', url: `${cdnUrl}ChillCat`, text: 'трекер, который подскажет, когда пора отдохнуть', link: 'https://vc.ru/promo/288561-eye-tracker', num: 1 }, { name: 'cloud', url: `${cdnUrl}CloudCat`, text: 'котика: даёшь ему «пять», а\u00A0он делает бэкап в облако', link: 'https://vc.ru/dev/294799-maneki-neko', num: 2 } ] let buttonCycle = document.querySelector('.button--cycle') let buttonChoose = document.querySelector('.button--choose') let buttonMobile = document.querySelector('.button--mobile') let textField = document.querySelector('.selectel-footer-subtitle') let imageAgent = document.querySelector('.image--agent') let banner = document.querySelector('.selectel-footer') buttonCycle.addEventListener('click', cycleClick) buttonChoose.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) buttonMobile.addEventListener('click', () => sendEvent(`Promo ${articles[currentArticleNumber].num} Left`, 'Click')) let media = window.matchMedia("(max-width: 570px)") media.addEventListener('change', matchMedia) function matchMedia() { if (media.matches) { platform = 'Mobile' } else { platform = 'Desktop' } update() } matchMedia() function cycleClick(event) { sendEvent(`Promo ${articles[currentArticleNumber].num} Right`, 'Click') if (event) { event.preventDefault() event.stopPropagation() } window.open('https://vc.ru/tag/selectelDIY', '_blank') //cycle(event) } function cycle(event) { // incrementArticleNumber() textField.innerHTML = generatedText() imageAgent.src = articles[currentArticleNumber].url + platform + '.svg?3' imageAgent.setAttribute("class", "") imageAgent.classList.add('image--agent', articles[currentArticleNumber].name) banner.href = articles[currentArticleNumber].link } function update() { banner.href = articles[currentArticleNumber].link imageAgent.src = articles[currentArticleNumber].url + platform + '.svg' textField.innerHTML = generatedText() } function incrementArticleNumber() { previousArticleNumber = currentArticleNumber if (currentArticleNumber >= articles.length - 1) { currentArticleNumber = 0 } else { currentArticleNumber++ } } const sendEvent = (label, action = 'Click') => { const value = `SelectelDIY — loc: Footer — ${label} — ${action}`; if (window.dataLayer !== undefined) { window.dataLayer.push({ event: 'data_event', data_description: value, }); } }; function generatedText() { let defaultText if (platform === 'Desktop') { defaultText = `Мы тут собрали %text%. Хотите научим?` } else { defaultText = `Мы тут собрали %text%.` } return defaultText.replace('%text%', articles[currentArticleNumber].text) } function getRandom(min, max) { min = Math.ceil(min) max = Math.floor(max) return Math.floor(Math.random() * (max - min + 1)) + min } (function create() { currentArticleNumber = getRandom(0, articles.length - 1) cycle() let page = document.querySelector('.page--entry') if (page) { function insertAfter() { let parents = page.querySelectorAll('[data-id="7"]') let referenceNode = parents[0] referenceNode.parentNode.insertBefore(banner, referenceNode.nextSibling); loaded() } setTimeout(() => insertAfter(), 0) } }()) function loaded() { banner.classList.add('loaded') } loadImages([ `${cdnUrl}CameraCatDesktop.svg`, `${cdnUrl}ChillCatDesktop.svg`, `${cdnUrl}CloudCatDesktop.svg`, `${cdnUrl}CameraCatMobile.svg`, `${cdnUrl}ChillCatMobile.svg`, `${cdnUrl}CloudCatMobile.svg?3`, ]) function loadImages(urls) { return Promise.all(urls.map(function (url) { return new Promise(function (resolve) { var img = document.createElement('img'); img.onload = resolve; img.onerror = resolve; img.src = url; }); })); } }())
0
4 комментария
Популярные
По порядку
Ксения Нестеренко

спасибо, очень полезная статья, попробую этот инструмент

Ответить
1
Развернуть ветку
Alexey Korsun Questoria

Отличная статья. Спасибо большое за инструмент. Буду рекомендовать своим клиентам :)

Ответить
1
Развернуть ветку
Dmitry Bitsak

Отличная гайд, проведу с командой завтра. Было бы круто получить такой же по демо) 

Ответить
1
Развернуть ветку
Kirill Voronov

если статья получит положительный отклик — я подготовлю аналогичный материал про проведение демо спринта

Пора бы уже.

Ответить
1
Развернуть ветку
Читать все 4 комментария

Постоянно вылетает аккаунт,нужно снова логиниться

——————————

Axelar Network

Axelar, a decentralized interoperability network that links blockchain communities, applications, and users. Axelar’s interoperability procedure is decentralized, protected, versatile, and developed to link all blockchain communities that speak various languages. The procedure makes it possible for designers to construct on any blockchain…

Wildberries лично ответил на обвинения покупателей о вранье с платным возвратом. Мы провели блиц-опрос с площадкой
No-code подход в мобильной разработке: будущее или мелкая ниша?

Меня зовут Алексей Жилин, я основатель агентства мобильной разработки SMD Agency, а также сооснователь стартапа Wiby, размышления о котором и натолкнули меня на написание этой статьи. Wiby - это сервис, в котором рестораны и доставки еды могут получить нативное мобильное приложение с бэк-офисом и интеграциями с основными CRM этой отрасли для…

Кейс Таргет. Как привлечь 379 заявок на покупку мужских костюмов и предотвратить закрытие ателье

Как я за 4 месяца привлек 379 заявок по 350 рублей на покупку мужских костюмов при среднем чеке 80 000 рублей

Мощные сервисы для быстрого машинного обучения: от GPU SuperCloud до суперкомпьютера

В последние три года мы видим рост спроса на технологии искусственного интеллекта (ИИ) и машинного обучения. Они проникли практически во все сферы нашей жизни, начиная от различных колл-центров и городских систем видеонаблюдения, заканчивая системами медицинского скрининга и диагностики заболеваний. Даже для оплаты проезда в столичной подземке…

Как сделать работу компаний и фрилансеров удобной

С помощью сервиса «Рокет Ворк».

Новый дизайн «Секрета фирмы» учтёт пользовательские сценарии потребления и поиска контента

О трендах бизнеса и экономики можно прочесть коротко и ясно в удобных форматах

«Купи сейчас, плати потом»: новая классика или мимолетная мода

Сервис рассрочек рассказывает о новом финтех-тренде.

null