Скажімо, ви щойно почали працювати в дуже маленькій команді над {наразі відносно невеликим, хоча, сподіваємось, більшим згодом проектом). Зауважте, що це фактичний проект, призначений для використання іншими розробниками в реальному світі, а не якийсь академічний проект, який передбачається брати в кінці семестру.
Однак код ще не надано для інших, тому рішення ще не встановлено в камені.
Методології
Один із вас любить починати кодування та з’єднувати шматки, коли ви йдете, перш ніж обов’язково мати чітке уявлення про те, як саме будуть взаємодіяти всі компоненти (дизайн знизу вгору). Ще один із вас любить спочатку виконати весь дизайн та прибити деталі всіх компонентів та комунікацій, перш ніж кодувати рішення.
Припустимо, що ви працюєте над новою системою, а не імітуєте існуючу, і тому не завжди очевидно, як повинен виглядати правильний кінцевий дизайн. Отже, у вашій команді різні члени команди іноді мають різні уявлення про те, які вимоги навіть необхідні для кінцевого продукту, не кажучи вже про те, як його розробляти.
Коли розробник знизу вгору пише якийсь код, розробник зверху вниз відхиляє його через можливі майбутні проблеми, передбачені дизайном, незважаючи на те, що код може вирішити проблему, вважаючи, що важливіше правильно виправити дизайн перш ніж спробувати кодувати рішення проблеми.
Коли розробник зверху вниз намагається розробити повний дизайн та передбачені проблеми перед тим, як почати писати код, розробник знизу вгору відкидає його, оскільки розробник знизу вгору не вважає, що деякі проблеми насправді виникнуть на практиці , і вважає, що дизайн, можливо, буде потрібно змінити в майбутньому, коли вимоги та обмеження стануть зрозумілішими.
Проблема
Проблема, внаслідок якої це призвело, полягає в тому, що розробник знизу вгору закінчує витрачати час, оскільки розробник зверху вниз часто вирішує рішення, яке написав розробник знизу вгору, через те, що проект має бути вичерпаний через недоліки дизайну. -записати код.
Розробник зверху вниз закінчує витрачати час, тому що замість того, щоб паралелізувати роботу, розробник зверху вниз часто сідає, щоб розробити правильний дизайн з розробником знизу вгору, серіалізуючи їх до тієї точки, де це може бути навіть швидше на роботу 1 людина, ніж 2.
Обидва розробники хочуть продовжувати працювати разом, але не здається, що комбінація насправді допомагає жодному з них на практиці.
Цілі
Загальні цілі, очевидно, - максимізувати ефективність кодування (тобто мінімізувати витрату часу) та написати корисне програмне забезпечення.
Питання
Простіше кажучи, як ви вирішуєте цю проблему і справляєтесь із цією ситуацією?
Єдине ефективне рішення, на яке я думаю, не витрачає часу - це дозволити кожному розробнику слідувати своєму стилю дизайну. Але це складніше, ніж це звучить, коли ви переглядаєте код і насправді потрібно схвалювати зміни один одного, і коли ви намагаєтесь створити цілісну основу для використання іншими.
Чи є кращий спосіб?