Продолжаю выгружать в паблик свои старые заметки. На этот раз — таймбоксинг и итеративная разработка.
Agile-подходы имеют одну общую важную черту, квинтэссенцию отличий – разработка производится путем создания небольших кусков кода в таймбоксе (то есть в фиксированные временные промежутки). Этот навык разработки является ключевым для Agile-команды и если команда сможет ему научиться, многие прочие вещи сами встанут на свои места.
При разработке продукта мы всегда работаем с системой переменных, определяющих конечный срок завершения итерации, релиза, проекта. Эти переменные – продолжительность, скоуп, количество участников, качество.
В большинстве проектов требуемый функционал, он же скоуп, имеет высокий уровень неопределенности на ранних стадиях разработки и постоянно меняется на более поздних. В этой ситуации нам помогает практика, именуемая Time Boxing, иначе – равные по продолжительности итерации или итерации фиксированной длины. Суть заключается в том, что мы полагаем константой параметр «продолжительность» из исходной системы параметров. То есть, все итерации (спринты в Scrum), имеют одинаковую продолжительность и объединяют функционал (скоуп), который обязательно должен быть реализован и проверен в рамках итерации.
Примеры таймбоксинга:
- Таймбоксинг итераций (итеративная разработка)
- Таймбоксинг релизов
- Таймбоксинг митингов
Преимущества таймбоксинга
Во-первых, появляется возможность планирования и прогнозирования сроков завершения проекта. В каскадных/водопадных моделях управления разработкой фиксированным является скоуп, из-за неизбежных изменений в котором сроки проекта расплываются, что делает прогнозирование времени выхода очередной el viagra hace crecer el pen viagra para mujeres usa free viagra sex offenders click https://www.cuea.edu/cueapress/?paper=ap-government-questions-essay source url https://ardelyx.com/news-releases/best-natural-viagra-fruits/197/ online pharmacy for prednisone viagra, tijuana cialis sans ordonnance 24h suisse https://easternpropane.com/savings/happy-birthday-viagra-target/87/ importance of educational research https://stonecottagegardens.com/fda/prescriptions-men-viagra-rxtobuy/14/ cialis 5 vs 10 go here aid taiwan summer program essay go to site quando foi inventado o viagra see url buying viagra boots source url research work source site follow site medicaid colorado viagra https://astro.umbc.edu/blog/do-you-require-prescription-viagra/199/ the importance of being earnest analysis essay https://complextruths.org/case/edwin-morgan-in-the-snack-bar-critical-essay/68/ https://surgicalimpex.com/product/viagra-levitra-cialis-preise/194/ https://iaace.com/annual/in-the-why-college-essay-do-you-have-to-mention-a-specific-professor/92/ viagra begley watch стабильной версии продукта практически невозможным.
Во-вторых, зафиксировав длительность итерации участники команды «подписываются» под скоупом, который сами же оценили и посчитали реальным выполнить в этой итерации. У команды появляется ощущение владения выполняемым объемом работы. Сроки, о которых вы договорились заранее, не будут нарушаться (точнее, не должны если все сделать по науке), поскольку длительность итерации зафиксирована и заказчику добавить в нее нового функционала будет не так просто (знаменитое Дорофеевское «попытка впихнуть невпихуемое приводит к выпихиванию впихнутого ранее»).
В-третьих, задается определенный ритм разработки, то есть теперь вся команда получает больше положительных эмоций от завершения одно- двух-недельной итерации, нежели от завершения полугодовой, особенно если она оказалась неудачной. Более того – процесс разработки становится более формальным, каждая итерация – это однотипные действия: разработка, тестирование/стабилизация, передача клиенту готового результата. Клиент видит прогресс!
И наконец, существенно снижаются риски недооценки проекта. По итогам каждой итерации проводится анализ того, почему не успели ту или иную функциональность и производится настройка команды и процесса на достижение конечной цели. Эта практика называется ретроспективой и о ней мы поговорим когда-нибудь потом.
Еще раз, таймбоксинг – в отличие от общепринятого подхода, при котором вы выполняете некоторую работу до тех пор, пока конечная цель не будет достигнута, после чего подсчитывает затраченное время (и прочие ресурсы), с этой техникой вы прекращаете работу по истечении некоторого заранее оговоренного периода времени и смотрите, что было выполнено.
Что еще можно таймбоксить?
К примеру, таймбоксинг позволяет избежать такого, достаточно распространенного недуга, как analysis paralysis (over thinking). Это когда вы растекаетесь мыслью по древу, очень долго – час за часом, день за днем, размышляете о чем-то, переосмысливаете, и так и не можете завершить анализ.
Схожая проблема – перфекционизм. Не ограничив себя по времени в реализации некоторого функционала вполне вероятна ситуация, при которой мы будем улучшать некоторый алгоритм или проводить рефакторинг, в общем случае, бесконечное время. Здесь подходит фраза “лучшее – враг хорошего” – постоянно улучшая мы тратим деньги, время, хотя, казалось бы, “хорошо” – это вполне достаточно и больше и не надо.
Как начать использовать?
Небольшой общий гайдлайн:
Определить, что таймбоксить
Помимо процессных, рабочих вещей – итерации, митинги, можете поэкспериментировать со внерабочими активностями. Очень здорово подходят таски с низким ROI – серфинг и прочее)) Пример – чтение новостей.
Определить цели
Например – соблюсти deadline, показать инкрементальный результат, добавиться инкрементального результата в решении большой проблемы
Определить сам таймбокс
30 минут, день, неделя. Величина зависит от области, определенной на первом шаге и целей на втором. Поставьте на чтение новостей временное ограничение в 10-20 минут, увидите, как меняются приоритеты, как вы начнете выбирать посты, по каким ссылкам переходите.
Начать пользоваться.
И остановиться по истечении таймбокса. На этом этапе вы уже сможете прочувствовать чувство сфокусированности на решении задачи, как использовать время как ограниченный ресурс. Большая ошибка – поставить часовой таймбокс, проработать два часа и сделать вывод о том, как отлично работает система. Нет, это не та система) Поставили час – через час остановились, проанализировали, может быть увеличили или ужали таймбокс, заимпрувили что-то, но никак не вышли за него. Выход за пределы таймбокса – это иная техника, так называемые, открытые таймбоксы. Отлично помогает при прокрастинации. Поставили себе таймер – вот поделаю что-то 20 минут, 20 минут – совсем не страшно, втянулись и дальше до победного.
Инструменты
Я использую Flow. Отличная реализация под технику Pomodoro, тот самый таймбоксинг и есть.
Итеративная разработка и небольшие релизы
Мы поговорили о TimeBoxing’е и как с его помощью можно облегчить себе жизнь, теперь более подробно обсудим итеративную разработку. Сама по себе итеративная разработка появилась в результате естественной эволюции водопадной модели. Весь процесс итеративной разработки состоит из серии повторяющихся итераций, количество которых зависит от конкретного проекта, а для продуктовой разработки число итераций не ограничено ничем. Каждая же итерация фактически является полноценным мини-проектом. Таким образом, в результате очередной итерации продукт приобретает новую функциональность или улучшения в существующей функциональности. Полный набор требований, зафиксированный границами проекта, оказывается реализованным после завершения финальной итерации, ну или никогда если разработка продуктовая и продукт находится в постоянном развитии.
Обычная длина итерации – от одной до шести недель.
Более длинные итерации снижают скорость и вредны для бизнеса, ведь в году целых 52 недели и лишь 12 месяцев. Если учесть, что не все шаги будут верными то лучше сделать больше шагов, чем меньше. Но не стоит забывать, что на оптимальную длительность одной итерации влияет множество факторов: это и характер проекта (веб-приложение или мобильное приложение), и состояние рынка и т.д.
К слову, не каждый итеративный процесс – инкрементальный. Одна из разновидностей итеративного процесса, “build it twice” – это когда на первой итерации разрабатывается прототип, а на следующей, в соответствии с пожеланиями пользователей и полученным опытом, разрабатывается боевой функционал.
Таким образом, итерации могут отличаться по достигаемым по их окончании целям:
- Разработка полноценной, готовой к использованию системы;
- Разработка функциональных и архитектурных прототипов с целью оценить функциональный дизайн, пользовательский интерфейс, производительность и т.д.
Преимущества в сравнении с водопадом:
- Реализация наиболее важных функций может быть завершена в ходе нескольких первых итераций. После их реализации (то есть значительно раньше полного завершения проекта), заказчик сможет начать промышленную эксплуатацию системы (“работающий продукт”);
- Уже в начале проекта пользователи получают возможность оценить функциональность системы и ее соответствие своим требованиям. Необходимые изменения и дополнения могут быть сделаны в последующих итерациях (“ранняя обратная связь (фидбек), сотрудничество с заказчиком, готовность к изменениям”);
- Основные проектные риски могут и должны быть разрешены на ранних итерациях. Например, архитектурное решение приводящее к неприемлемой производительности может быть обнаружено и исправлено уже в первой итерации. Вообще, для Agile-команды вполне типично сделать в первую итерацию треть от запланированной работы. Причины могут быть разными – ошиблись в оценках, технические сложности и т.д. и результаты первой итерации немедленно продемонстрируют риски, какими бы ни были их причины.
Естественным следствием из использования коротких итераций являются регулярные небольшие релизы. Небольшие релизы позволяют:
- Улушить качество (кода и работы в целом)
- Увеличить прозрачность всех процессов
- Сократить затраты на выход на рынок
- Собирать обратную связь по мере реализации нового функционала
- Отслеживать прогресс (определение рассинхронизации между командами)
Очень важный момент заключается в том, что agile не гарантируют успех – вы будете продолжать ошибаться. Но таймбоксинг и итеративная разработка позволят находить проблемные места значительно раньше и работать над ними. Не бойтесь ошибаться и экспериментировать. Научитесь совершать промахи грамотно и формируйте культуру, в рамках которой вы будете учиться на собственных ошибках.
Ну и, конечно, в agile прогресс и удовлетворение от работы являются постоянными, частыми и происходят в реальном времени. Показ ваших успехов заказчику, коллеге или заинтересованным лицам произойдет в крайнем случае через неделю или около того.