Скажем, вы только что начали работать в очень маленькой команде над {в настоящее время относительно небольшим, но, надеюсь, еще большим, проектом}. Обратите внимание, что это реальный проект, предназначенный для использования другими разработчиками в реальном мире, а не какой-то академический проект, который должен быть отменен в конце семестра.
Тем не менее, код еще не передан другим, поэтому решение пока не принято.
Методологии
Одному из вас нравится начинать кодирование и собирать части по ходу, прежде чем вы обязательно получите четкое представление о том, как именно будут взаимодействовать все компоненты (дизайн снизу вверх). Еще один из вас любит сначала сделать весь дизайн и записать детали всех компонентов и коммуникаций, прежде чем кодировать решение.
Предположим, что вы работаете над новой системой, а не подражаете уже существующим, и поэтому не всегда очевидно, как должен выглядеть правильный конечный дизайн. Итак, в вашей команде разные члены команды иногда имеют разные представления о том, какие требования даже необходимы для конечного продукта, не говоря уже о том, как его разрабатывать.
Когда нисходящий разработчик пишет некоторый код, нисходящий разработчик отклоняет его из-за потенциальных будущих проблем, предусмотренных в проекте, несмотря на тот факт, что код может решить данную проблему, полагая, что более важно сделать проект правильным прежде чем пытаться закодировать решение проблемы.
Когда разработчик, работающий сверху вниз, пытается разработать полный дизайн и предполагаемые проблемы перед тем, как начать писать код, разработчик снизу вверх отклоняет его, потому что разработчик снизу вверх не думает, что некоторые проблемы действительно возникнут на практике. и считает, что дизайн может потребоваться изменить в будущем, когда требования и ограничения станут более понятными.
Проблема
Проблема, которая привела к этому, заключается в том, что разработчик снизу вверх теряет время, потому что разработчик сверху вниз часто решает, что решение, написанное разработчиком снизу вверх, должно быть отклонено из-за недостатка проекта, что приводит к необходимости -пишите код.
Нисходящий разработчик заканчивает тем, что тратит время, потому что вместо распараллеливания работы, нисходящий разработчик теперь часто садится за разработку правильного дизайна с нисходящим разработчиком, сериализовав два к точке, где это может быть даже быстрее на 1 человека, чтобы сделать работу, чем 2.
Оба разработчика хотят продолжать работать вместе, но не похоже, что комбинация на самом деле помогает кому-то из них на практике.
Цели
Общими целями, очевидно, являются максимизация эффективности кодирования (то есть минимизация потерь времени) и написание полезного программного обеспечения.
Вопрос
Проще говоря, как вы решаете эту проблему и справляетесь с этой ситуацией?
Единственное эффективное решение, которое я могу придумать, не тратит время - позволить каждому разработчику следовать своему стилю в дизайне. Но это сложнее, чем кажется, когда вы анализируете код и на самом деле должны одобрять изменения друг друга, и когда вы пытаетесь создать целостную структуру для использования другими.
Есть ли способ лучше?