Если вы инженер-программист или занимаетесь разработкой программного обеспечения, вы наверняка слышали что-то об «Agile».
Также вы, вероятно, заметили, что существует примерно столько же мнений о том, что такое «Agile», сколько людей, а некоторые и больше.
В этой статье я буду утверждать, что agile-процесс на самом деле (или, по крайней мере, должен быть) таким же, как и научный процесс.
Научный процесс
Научный процесс в своей базовой форме довольно прост и включает следующие шаги:
- Сформулировать гипотезу
- Разработать эксперимент
- Построить эксперимент
- Провести эксперимент
- Сбор данных
- Проанализируйте данные и сделайте выводы
- Промыть и повторить
Конечно, могут быть и подэтапы. Например, чтобы сформулировать правильную гипотезу, вам придется начать с вопроса и провести предварительное исследование. Но мы рассматриваем здесь основную идею процесса.
Процесс agile
Процесс agile выглядит довольно похоже:
- Определите цель итерации (также называемой спринтом).
- Написать истории, требования и критерии приемки
- Разработка определенных функций
- Развертывание функции
- Сбор данных и обратной связи
- Проанализируйте данные и сделайте выводы
- Промыть и повторить
Думаю, вы начинаете видеть сходство. Давайте рассмотрим этапы научного процесса и посмотрим, как они соотносятся с agile-процессом.
Сформулируйте гипотезу
Формулирование гипотезы означает, что вы начинаете с вопроса, собираете существующую информацию и исследования и приходите к идее, которую хотите проверить. То же самое должно быть верно и для цели этой итерации: посмотрите, на каком этапе проекта вы находитесь, соберите информацию о потребностях заинтересованных сторон и определите цель.
Разработать эксперимент
Разработка эксперимента означает, что вы берете свою гипотезу и думаете о последствиях, если она окажется верной. Какие проверяемые предсказания вы можете сделать? Как вы можете это проверить? Что вам нужно построить и как убедиться, что вы действительно проверяете свою гипотезу, а не что-то другое? Это одна из самых трудных частей научного процесса. Правильно провести эксперимент, как известно, очень сложно, и вы должны быть точны. Вам нужно не только построить сам эксперимент, но и знать, какие данные и как нужно собрать.
Это очень похоже на определение требований к функции (сюжету, задаче или как бы вы это ни называли). Очень важно точно знать, чего вы хотите добиться, и быть конкретным. Вы должны определить критерии приемки. В конце вы должны точно знать, что делает функция, и как измерить ее успешность (в отличие от «она просто работает»).
Постройте эксперимент
Построение эксперимента может быть как простым — напечатать несколько анкет, так и сложным — построить такую машину, как БАК в ЦЕРНе. Самое главное — знать, что вы строите, исходя из плана эксперимента.
Именно на этом этапе создается программное обеспечение. На основе спецификаций и критериев приемки ваша команда создает функции. Как и в случае с научным экспериментом, это может быть как простое добавление кнопки, так и сложное внедрение нового алгоритма ML/AI.
Запуск эксперимента
Этот шаг не требует много слов. Проведите эксперимент и убедитесь, что вы получили все данные, которые вы определили в дизайне.
То же самое верно и в agile-процессе: Разверните его и убедитесь, что вы получили обратную связь и данные, необходимые для оценки влияния и успеха функции.
Соберите данные
После проведения эксперимента у вас должна быть куча данных для сбора. Сбор и систематизация данных для последующих выводов — важный этап. Исходя из плана эксперимента, вы должны убедиться, что все данные на месте и готовы к анализу.
То же самое вы должны сделать и в гибком процессе. Соберите данные, которые расскажут вам о результатах разработки функции. Получите обратную связь от заинтересованных сторон и извлеките аналитические данные, которые вы надеялись развернуть вместе с функцией. В конце концов, вы же определили их в требованиях, верно?
Проанализируйте данные и сделайте выводы
Данные необходимо проанализировать и на основе полученных данных сделать выводы. Это этап анализа в процессе agile, и, если быть откровенным, именно это делает «Agile» agile. Только когда у вас есть хорошие данные, и вы тщательно делаете выводы на основе фактов, вы можете быть уверены, что не отклоняетесь от намеченного пути. В научном процессе этот шаг делает или разрушает вашу гипотезу. Вы узнаете, верна ли ваша гипотеза (или хотя бы может быть верна) и нужно ли вам попробовать что-то другое. Возможно, вам придется решить, что этот эксперимент не дал вам нужных данных и вам придется вернуться к чертежной доске. То же самое вы должны делать и в процессе agile-разработки.
Промыть и повторить
После того как вы прошли все этапы, вы готовы вернуться к началу и сделать то же самое заново. Таким образом, вы будете постепенно улучшать знания, сотрудничество и результат того, над чем вы работаете.
Какие шаги пропускаются довольно часто?
По моему опыту, компании пропускают некоторые из самых важных этапов. Требования часто бывают весьма расплывчатыми, и часто кажется, что они рассматривают «Agile» как способ просто переложить ответственность за дизайн проекта на разработчиков. Никогда не существует только одного способа подхода к новой функции, поэтому ожиданий будет столько же, сколько людей в проекте. Без определения требований практически неизбежно, что хотя бы одна важная заинтересованная сторона будет недовольна результатом.
Кроме того, без детальных требований и критериев приемки невозможно сказать, закончена ли функция, работает ли она правильно или мы даже получили достаточно информации, чтобы измерить влияние этой функции.
Другие шаги, которые, по моим наблюдениям, часто упускаются в проекте, — это развертывание, а когда что-то уже развернуто, сбором информации пренебрегают.
Довольно часто обзор спринта состоит только из демонстрации и обзора спринта, и ничего больше. Кажется, нет ничего необычного в том, чтобы не увидеть никаких действий, предпринятых на основе обзора спринта. Так что же тогда является agile в этом процессе?
Я думаю, что важно собирать информацию — что также требует создания среды и культуры, позволяющей каждому свободно высказывать свое мнение — анализировать данные и принимать меры на их основе.
Изображение: Фото Hans Reniers on Unsplash