Я хотел знать, насколько хорошо люди обычно определяют программный продукт перед тем, как начать программировать, и насколько хорошо он работает для них? Я имею в виду определение вариантов использования, анализ риска, рисование диаграмм классов и т. Д.
Я знаю, что было бы неплохо иметь достаточно четкое представление о том, каким будет конечный продукт, чтобы избежать рисков в будущем, но также важно не определять продукт так хорошо, чтобы его было трудно адаптировать к сдача.
Другие более конкретные вопросы, вероятно, будут:
Какой процент времени проекта обычно расходуется на этапах планирования до разработки?
У вас есть определенные измеримые критерии, которым вы пытаетесь соответствовать, прежде чем начинать кодировать, или это более интуитивно?
Вы рисуете все классы перед тем, как начинать кодировать, или в основном пытаетесь создать динамический дизайн с самого начала, ожидая, что все изменится?
Любой опыт, которым вы готовы поделиться, будет потрясающим!
Если ваш клиент активно присоединяется к проекту в качестве члена команды проекта, который доступен для разработчиков для вопросов и принятия быстрых решений о функциональности. Тогда спецификация может быть менее подробной.
Если ваш клиент находится далеко и не доступен для обратной связи в течение длительного периода времени, то ваша спецификация должна быть очень подробной.
В нашей компании мы создаем истории пользователей и играем в Planning Poker с разработчиками проекта. Это дает нам точное представление о часах, которые нужно потратить на историю пользователя.
источник
Насколько четко определен проект, должно быть достаточно, чтобы вы начали и знали, куда вы собираетесь двигаться в течение следующих двух недель.
Как Scrum Master, я бы просто сказал, что вам нужно определить общие характеристики вашего продукта в листе Excel или где-то еще, только чтобы отслеживать ваши функции. Создание пользовательских историй помогает много думать о том, что вам нужно дальше. Затем расставьте приоритеты для них: «Важнейшая или обязательная особенность сверху» и «Наименее снизу».
После того, как вы перечислили некоторые из наиболее важных функций, выберите функции, которые, по вашему мнению, вы можете разработать, приведите их в состояние Готово через две недели или месяц, если вы предпочитаете. Затем, взорвите эти выбранные функции, чтобы вы могли начать кодирование в несколько.
При кодировании вы наверняка будете думать о других элементах, которые необходимо разработать, чтобы привести выбранные функции в состояние «Готово». Готово означает, что вам больше нечего делать, то есть тестирование, кодирование, сборка, документирование выполнено!
В любое время список выбранных вами функций может расширяться, если вы достигаете поставленной цели, то есть вы можете разрабатывать все, о чем вы говорили в течение данного периода.
Короче говоря, ничто не должно быть идеальным. Добавьте некоторые идеи, поделитесь с товарищами и посмотрите, имеет ли смысл то, что написано, чтобы удовлетворить требования требуемого продукта. Если это так, то вы в! Чтобы было понятно, я пойду с простым продуктом управления клиентами. Что нужно?
Ваш первый черновик может быть таким простым! Затем мы видим, что безопасность является важной частью нашей системы, достаточно ли она важна, чтобы сделать конечный приоритет (Д / Н)? Это будет зависеть от требований, которым вы должны соответствовать. Допустим, что управление клиентами является наиболее важной вещью здесь. Итак, в следующем спринте мы должны быть в состоянии управлять клиентами простым, но приемлемым способом. Что такое управление клиентами?
Это уже иллюстрирует достаточные функциональные возможности, чтобы можно было начать разработку приложения. Если вашим программистам нужны дальнейшие инструкции, то, возможно, один разработчик, который знаком с диаграммами классов, может спроектировать класс Customer, его свойства и методы! Но, насколько я понимаю, с этими немногими, которые я написал, у меня будет достаточно, чтобы начать. Некоторые функции могут быть добавлены или изменены по пути. Важно сосредоточиться на том, что, как вы сказали, будет сделано. В нашем примере это вещь управления клиентами. На данный момент нам не нужно заботиться об аутентификации пользователей. Это будет позже в следующем спринте.
Надеюсь, это поможет! знак равно
источник
Хорошо, что прекрасно работает для меня, это то, что функциональность «довольно хорошо» указана, а архитектура программного обеспечения очень слабо специфицирована.
Чтобы начать работать, мне нужно знать, над чем я работаю. Это не работает для меня, когда я просто понимаю потребности клиента. Даже если я пишу инструмент для собственного использования, я рисую экраны, описываю функциональность, что делает каждая кнопка, все. Иначе я не смогу начать.
С другой стороны, я разочаровался в том, чтобы действительно рисовать, как именно буду разрабатывать код. Может быть, это худшая практика, но она работает для меня. Я мог бы определить набор таблиц базы данных, которые я буду создавать, но не то, какие столбцы есть в каждой. Я мог бы подумать, какие объекты и классы мне нужны, но я определенно не рисую диаграммы.
Черт, иногда я даже не знаю, как сделать это правильно, пока я не сделал это неправильно. Я строю это однажды, срываю, и делаю это снова, теперь, когда я знаю как. На этом этапе я могу нарисовать довольно подробную дорожную карту и перезапустить.
источник
Какой язык и методологию вы используете?
Некоторые языки, такие как Java и C ++, требуют большей исходной структуры, чем языки, такие как Common Lisp или Python (C ++ больше, чем Java, потому что рефакторинг проще в Java). Лео Броди (я думаю, что в «Thinking Forth») дал два совета о том, когда начинать кодирование: раньше, чем вам будет удобно в Forth, позже, чем вы хотите на другом языке.
Методология водопада (особенно когда ранний дизайн является результатом) потребует больше предварительной работы, чем гибкой (хотя вы и не хотите пренебрегать ранним планированием в гибких методах). Наличие хорошего набора автоматических тестов делает более безопасным изменение более крупных вещей и, следовательно, позволяет вам обходиться с меньшими затратами на предварительную работу.
Кроме того, это зависит от людей и их знания о типе программного обеспечения, которое будет создано. В какой-то момент, работая в основном с CRUD-приложениями, я мог написать целую программу, начиная с нескольких спецификаций и листа бумаги размером 3 x 5 дюймов. Я не могу написать то, что пишу сейчас, вот так.
источник
Здесь используются два полезных термина: MVP (минимальный жизнеспособный продукт) и MMF (минимальный товарный признак). MMF - это самая маленькая версия функции, которая обеспечивает ценность для бизнеса. MVP - это наименьшее количество MMF, которые являются жизнеспособными в качестве продукта. При запуске проекта лучше всего определить MMF и MVP и начать с этого.
Выпустите свой продукт, как только он станет жизнеспособным, а затем продолжайте постепенно улучшать его.
источник