Как быстрое прототипирование вписывается в гибкую методологию?

12

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

Специальная инженерная группа, в которой я работаю, традиционно не разрабатывает программное обеспечение (вместо этого мы помогаем управлять проектами с гораздо более широкой точки зрения), но это меняется. У нас есть широкий спектр предстоящих / планируемых программных проектов, которые в основном ориентированы на данные - например, мы будем заниматься мониторингом, сбором, агрегацией данных и некоторой отчетностью. Другие задачи включают автоматизацию со специализированным оборудованием и различными типами клиент-серверных (многоуровневых) архитектур. Я должен помочь в процессе найма нескольких человек и формулирования многих наших планов по продвижению вперед.

Мой вопрос заключается в том, вписывается ли быстрое создание прототипов (одноразовый код) в гибкую философию. Например, я люблю Python и его широкий ассортимент пакетов. Я вижу возможность очень быстро реализовать многие наши идеи с помощью рабочего процесса на основе Python. Тем не менее, я думаю, что будет много представлений о том, что Python не «корпоративного качества», и большая часть этой работы должна быть переписана на Java или, возможно, C ++.

Тем не менее, создание прототипов Python дало бы нам большую выгоду, позволив нам быстро добиться реальных результатов.

Удалось ли вам внедрить быстрое создание прототипов - надеюсь, в Python - в надежный гибкий рабочий процесс в корпоративной среде?

BobIsNotMyName
источник
3
Написание одноразового кода опасно. Если это работает, то почему бизнес должен заботиться о том, чтобы это «выбросить». Это всегда происходит, если вы им не показываете. Я никогда не ставлю под угрозу качество своего кода, даже когда я вхожу в хакатоны. Я мог бы поставить странный хак тут и там - но ничего, что было бы "выброшено". При создании прототипа сосредоточьтесь на историях, которые делают хорошую демонстрацию.
Дейв Хиллиер
3
«большая компания, которая диктует использование agile» - смешное сочетание слов «dictates» и «agile» как-то напомнило мне Half-Arsed Agile Manifesto . Люди и взаимодействия над процессами и инструментами ... и у нас есть обязательные процессы и инструменты, чтобы контролировать, как эти люди (мы предпочитаем термин «ресурсы») взаимодействуют
коммент

Ответы:

11

Концепция «прототипирования», как и предполагалось в RAD , немного чужда гибкой разработке. Это не значит, что это невозможно, но это необычно.

Существуют разные случаи, которые необходимо изучить:

  1. Является ли прототип «пустой оболочкой», макетом или демонстрацией, созданной, чтобы дать представление о том, как будет выглядеть продукт? Безусловно, вы можете сделать это с помощью одной или нескольких историй - однако вы создаете что-то из своего собственного воображения, а не создаете продукт из реальной обратной связи. Люди не оценивают демо, как они оценивают продукт. Например, посмотрите отзывы о нашем прототипе верхней панели и нашей реальной реализации верхней панели .

  2. Прототип - это что-то, что нужно построить, чтобы лучше понять проблемное пространство? Затем он должен быть покрыт как всплеск , и сохраняются только его результаты (исходный код временный).

  3. Является ли прототип версией 0.x? Mininimum жизнеспособный продукт ? Затем воспользуйтесь гибким процессом по вашему выбору. Если вам нужно перестроить его на другом языке, вам, скорее всего, будет лучше, если вы отнесетесь к этому другому продукту. Обратите внимание, что иногда это рассматривается как способ быстрого написания спецификации («он должен делать то же, что и прототип!»). Это действительно плохой способ документирования продукта, но это, вероятно, лучше объяснить отдельным вопросом и ответом :-)

Sklivvz
источник
На мой взгляд, это самый плохой ответ на данный момент, мне трудно понять, откуда взялись все эти возражения. Прототипирование для получения ранней обратной связи не является чем-то необычным, оно является родным для гибкой разработки.
Мартин Маат
@MartinMaat Под «прототипом» вы подразумеваете «раннюю версию продукта, поставляемую клиенту, которая постепенно эволюционирует в продукте»? В этом случае, конечно, вы правы в том, что он является родным для гибкой работы, и три пункта, которые я подчеркиваю, объясняют, как именно. Это не то, что люди намерены этим словом, хотя.
Sklivvz
8

Разве быстрое прототипирование (то есть итеративное и инкрементальное развитие) не является суть Agile?

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

И Python не является (если он когда-либо был) игрушечным языком. НАСА и его подрядчики используют Python , и если он достаточно хорош для меня, то он достаточно хорош для меня.

Роберт Харви
источник
Согласен, Python не является игрушечным языком ... Тем не менее, многие организации в моей компании широко используют Java, и нам нужно будет взаимодействовать с их кодом, и поэтому мы обязаны привлекать людей с сильным Java-опытом. , Плюс, это не столько восприятие людей, которые понимают программное обеспечение, а проблема - это восприятие тех, кто не понимает. Это люди, которым нужно имя, которое они слышали раньше, и это имя «Java» ... Я хотел бы, чтобы мы создали команду, приверженную Python как основному языку, но это будет сложно.
BobIsNotMyName
1
Даже если вы создаете прототип на Python и переписываете часть или все на Java, это не обязательно плохо (Python не имеет профиля производительности, который нужен некоторым приложениям). «Слышать» о каком-то языке - это не совсем одобрение. Если бы у меня был выбор, я бы лично выбрал какой-то другой язык, кроме Java, но другие силы часто диктуют выбор языка.
Роберт Харви
@ Роберт Харви: «Разве быстрое прототипирование (то есть итеративное и инкрементальное развитие) не является суть Agile?»: Насколько я понимаю, быстрое прототипирование означает создание быстрого, одноразового прототипа и, после клиента одобрил его, чтобы построить реальный продукт (с надлежащим дизайном и т. д.). В Agile у вас есть компромисс между двумя: у вас всегда есть прототип, который технически «достаточно хорош» (вероятно, не так хорош, как система, которая была разработана заранее, но достаточно хороша для производства), так что он может быть доставлен как Продукт, как только клиент удовлетворен им.
Джорджио
1
@ Джорджио: Это нормально, но клиенты не знают, чего они хотят, пока вы им не покажете, и они скажут: «Нет, это не то, что я хочу, я хочу этого». Делаете ли вы это в коде или на листе бумаги не имеет значения для меня, пока он определяет, что хочет клиент.
Роберт Харви
2

В экстремальном программировании существует довольно устойчивая практика под названием « Спайк» . Это означает, что это одноразовый код. В этом нет ничего особенного. Это просто Спринт, в котором ожидаемый результат - знание об одноразовом коде.

Приведенная выше ссылка содержит достаточно информации о передовой практике, ловушках спайков.

Ваш конкретный пример использования кажется хорошим примером: может быть полезно разработать интерфейс, проверить утилиту и показать ее некоторым пользователям.

Borjab
источник
1

Вы собираетесь выбросить код и не запускать его в производство (сделайте это абсолютно понятным КАЖДОМУ), поэтому быть гибким или нет не имеет большого значения. Любые гибкие методы являются необязательными для прототипов: спринты, выгорания, тестирование, парное программирование или все, что вы планируете использовать.

Если вы собираетесь в основном создавать функциональные модели в Python, чтобы помочь владельцам продуктов и другим лицам, принимающим решения, концептуализировать проект, вам не нужно быть готовым к работе. Однако, если вы создаете подтверждение концепции или пытаетесь понять, сможете ли вы справиться с определенными уровнями производительности, вам, вероятно, следует придерживаться производственного языка. Это не значит, что вы не можете попробовать это в Python.

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

JeffO
источник
1

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

Мелисса
источник
0

Что касается обучения, я бы добавил, что создание прототипов ускоряет процесс обучения. Таким образом, вы можете проверить, заботятся ли люди даже о проблеме, которую вы пытаетесь решить, - и если задуманное вами решение - это то, что им нужно, - не тратя много времени на создание полного решения, которое может , в конце концов, не решить достаточно болезненную проблему или не решить ее правильным способом.

Этан Тен
источник
0

Истинный дух Agile - это взаимодействие и общение. Я бы сказал, что если прототип работает как инструмент, помогающий общаться, нет ничего плохого в том, чтобы использовать его в Agile мире. В нашей команде (мы занимаемся Agile более 5 лет) мы время от времени использовали его. И есть некоторые преимущества, которые я вижу из этого

1) Помочь общению

2) Вовлеките пользователей в собеседования и получите раннюю обратную связь

Предостережение:

Прямая связь между UX и инженерами НИКОГДА не должна заменяться какими-либо артефактами прототипирования. Если возможно, соединение с инженером работает лучше, чем общение через посредника (прототип).

Huimin
источник
0

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

Один из столпов гибкой разработки - распознавать сложные части и проверять концепции, посмотреть, сможете ли вы вообще это сделать. Классический способ прохождения всех задач в некотором «логическом» порядке может оказаться очень дорогим, если вы обнаружите, что не можете что-то сделать поздно в проекте. Все, что сделано до сих пор, может быть пустой тратой.

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

Мартин Маат
источник