Записи с метками команда

А вы завершили свою задачу?

Я думаю, что вопрос «А ты завершил свою задачу?» вы слышали и сами задавали неоднократно. К сожалению, понятие завершенности у всех разное. Это может причинить большие проблемы в процессе разработки. Задачи, закрытые с разным уровнем завершенности, зачастую становятся причиной найденных ошибок, проблемного кода, неверных дизайнерских решений и других неприятностей. Чтобы избежать такого рода ситуаций команде стоит собраться и обсудить командное определение завершенности (Definition of Done). Для разного типа задач такое определение может отличаться. Лучше всего оформить определение завершенности и поместить его в общедоступное место: на доску задач, на WiKi, на стол каждому члену команды. После определения критерия завершенности задача может считаться законченной только в случае полного удовлетворения всем пунктам критерия. Каждая команда может включать свои пункты, которые зависят от языка программирования, специфики проекта, состава команды и других факторов. Вот один из примеров определения завершенности:

  • Код написан и добавлен в систему контроля версий
  • Все части задачи выполнены и логика работы кода соответствует требованиям
  • Весь код прошел обязательную процедуру Code Review
  • Код не имеет проблем, найденных статическими анализаторами кода
  • Unit-тесты для кода написаны в полном объеме
  • Код и тесты прошли процедуру Refactoring и не содержат явных проблем
  • Интеграционные тесты написаны
  • Сборка с запуском всех тестов на Continuous Integration сервере завершилась успешно

Но это еще далеко не все! В Agile подходах используется итеративный и инкрементальный стили разработки. Это значит, что заказчик в праве ожидать некоего набора завершенной функциональности к концу каждой итерации. Но ваше понимание завершенности может очень сильно отличаться от понимания заказчика. Чем больше разница, тем больше накапливается недоделанной работы. Очень хорошо, если вы демонстрируете завершенные задачи в конце каждой итерации, причем демонстрируете так, как просит вас заказчик. В этом случае проблема очень быстро вылезет наружу. Для того, чтобы избежать проблем, нужно добавить в определение завершенности пункты от заказчика (синхронизировать список с ним). В этом случае заказчик знает чего он в праве ожидать и как он может проверить готовность функционала.

Давайте рассмотрим небольшой пример. Ваша команда имеет отличный, продуманный критерий завершенности задач, но туда не входит интеграция и установка задач на рабочий сервер, а также регрессионное тестирование. Итерация заканчивается и вы радостно показываете новый функционал заказчику на специальном тестовом сервере. Все проходит отлично и заказчик задает вопрос: «Ну что с завтрашнего дня пользователи смогут оценить новую функциональность, а мы – получить больше прибыли?». В ответ вы чешете голову и отвечаете, что нужно еще неделю для того, чтобы установить все на рабочий сервер, написать скрипты обновления базы данный, мигрировать данные с нескольких старых табличек, прогнать все регрессионные тесты. Естественно это может расстроить вашего заказчика и обмануть его ожидания. Синхронизация критерия завершенности на ранних этапах разработки поможет построить доверительные отношения и убережет от многих неприятностей.

Критерий завершенности можно использовать еще для одной интересной цели – выделение стадий, через которые проходит ваша задача. Это позволяет построить более правильную Kanban доску задач и расставить ограничения на объем работ, выполняемый одновременно. К примеру, можно придти к таким колонкам: «Написание приемочных тестов», «Реализация», «Code Review», «Тестирование», «Установка на сервер». В этом случае у команды и заказчика будет общее понимание почему нужны все эти стадии и как далеко конкретная задача находится от состояния завершения. Гораздо легче отслеживать прогресс и анализировать проблемы.

Всегда старайтесь закончить задачу так, чтобы вы могли собой гордиться!

«Выходные разработчика» 17-18 июля в Киеве

В продолжение запланированных на начало июля «выходных тестировщика» мы решили организовать подобное мероприятие и для разработчиков. Назвали его по аналогии – «выходные разработчика». Мероприятие состоится 17-18 июля и будет посвящено различным инженерным практикам.

В субботу 17 июля будет проведен тренинг «Инженерные практики в Agile», на котором участники за 8 часов познакомятся с 6 инженерными практиками (Continuous Integration, Code Review, TDD, приемочное тестирование, парное программирование, рефакторинг), пообщаются с профессионалами отрасли на тему их внедрения и поддержки, а также смогут получить ответы на наболевшие вопросы из жизни разработчика в Agile проекте.

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

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

Регистрация на тренинги мероприятия уже открыта и продлится до 10 июля. Торопитесь, количество мест ограничено! Присоединяйтесь к нам, эти выходные принесут вам немало пользы в будущем!

Зарегистрироваться на тренинги можно на нашем сайте. Стоимость участия 800 гривен за каждый из тренингов. В оплату любого тренинга входит обед и кофе-паузы. При регистрации сразу нескольких участников (не менее 3) скидка 10%.

Ждем вас на наших тренингах!

Первый открытый тренинг по Agile разработке от Асхата Уразбаева 3 июля в Киеве

Мы рады сообщить о том, что наши возможности по проведению тренингов и состав доступных тренеров расширились благодаря сотрудничеству с российским тренинг-центром ScrumTrek. Многие отлично знают по выступлениям на различных конференциях Асхата Уразбаева и Никиту Филлипова. На последней конференции Agile Base Camp в Киеве Асхат выступил с докладом «Применение Lean в Offshore разработке», а Никита – с мастер-классом «Формируем и Приоритезируем бэклог используя StoryMapping». Мы слышали очень много положительных отзывов от участников и решили организовать первый открытый тренинг Асхата Уразбаева в Киеве. Состоится мероприятие 3 июля и посвящено будет разработке с использованием Scrum («Agile Development with Scrum»).

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

Принципы Agile

  • Причины, по которым Agile приносит деньги компаниям.
  • Итеративность и инкрементальность разработки.
  • Легковесность процесса или отсутствие документации?
  • Самоорганизующаяся команда—ключ к успеху продукт.
  • Границы применимости Agile.

Командные практики Agile

  • Методы построения эффективной команды.
  • Методологии Scrum и Extreme Programming. Какие практики вам нужны?
  • Роли и обязанности в Scrum.
  • Как сформировать самоорганизующуюся команду? Практики. Типичные ошибки.
  • Как планировать в Agile?
  • Ежедневный scrum, использование Task Board и другие практики работы в итерации.
  • Закрытие итерации. Демонстрация и ретроспектива.

Инженерные практики Agile

  • Как обеспечить высочайшее качество?
  • Обзор инженерных практик Agile.
  • Что такое совместное владение кодом и как его добиться?
  • Парное программирование: как ускорить разработку.

Внедрение Agile

  • Подходы к внедрению Agile.
  • Как внедрять практики Agile? Примеры внедрений.
  • Примеры Agile в распределенной разработке.
  • Примеры Agile в офшорной разработке.
  • Примеры Agile в больших проектах.

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

Регистрация на тренинг уже открыта и продлится продлится до 28 июня. Стоимость участия: при регистрации до 20 июня – 1000 гривен, после 20 июня – 1200 гривен. Торопитесь, количество мест ограничено! Если у вас есть вопросы по организации тренинга, то мы с радостью ответим на них. Для этого отправьте свой вопрос на support@xpinjection.com.

Agile в больших командах

Очень часто поднимается вопрос о применении Agile в больших командах размером более 30 человек. Как известно, Agile методологии рекомендуют работать небольшой командой, желательно расположенной в одном месте. Это очень сильно упрощает коммуникации и позволяет успешно применять большую часть Agile практик. Но при разработке действительно большой системы не всегда можно справиться маленькой командой. Есть проекты с командами более 100 человек. Можно провести аналогию с программированием больших систем. Если у нас есть небольшая по функциональности система, к которой нет жестких требований по расширяемости и отказоустойчивости, то логично реализовать ее единым модулем. При этом возможно разделение на слои для облегчения тестирования и разделения логики. Архитектуры подобных систем очень простые и похожи друг на друга. Это очень напоминает работу небольшой команды. Когда же нам нужно разработать систему с серьезной бизнес логикой, работающую с внешними сервисами, имеющую высокие требования к расширяемости и отказоустойчивости, интегрирующуюся с различными устройствами и обрабатывающую огромные потоки информации, то все значительно усложняется. Тут на помощь приходит компонентная архитектура, асинхронное общение между компонентами, сервисно-ориентированный подход и т.д. Архитектура такого рода систем достаточно непроста и требует тщательного анализа, чтобы не только удовлетворять текущим требованиям, но быть достаточно гибкой и расширяемой. Именно из такого рода архитектур можно позаимствовать приемы организации работы больших команд.

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

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

Второй прием – это обеспечение коммуникации между компонентами. Компоненты в архитектуре должны общаться только со своими ближайшими соседями, причем протокол может быть синхронный или асинхронный. В случае с синхронным протоколом (когда компоненты достаточно сильно зависят друг от друга) может применяться совместное планирование итерации, ежедневная синхронизация посредством проведения собрания представителей команд (Scrum of Scrum в методологии Scrum). В случае асинхронного протокола можно использовать Kanban подход. Если одной подкоманде необходимо, чтобы определенный функционал был реализован другой подкомандой, она помещает запрос на эту функциональность в очередь ожидания. Эта очередь может позволять управление приоритетами. Статус заявки можно отслеживать на Kanban доске по мере прохождения всех стадий разработки. Замеряя время цикла от постановки задачи в очередь до ее выполнения, можно добиться более точного планирования для зависимых задач.

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

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

Пример построения Agile процесса в большой команде

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

Видео с Agileee 2009 уже доступно

Видео презентация «People factor as failure reason of Agile adoption» от Алименкова Николая с конференции Agileee 2009 доступна в видео секции.

Презентации с IT Jam уже доступны

Презентации «Kanban VS Scrum» от Алименкова Николая и «XP Injection» от Алименкова Николая и Алексея Солнцева опубликованы в разделе ресурсов.