Здається, нечастий, але поширений досвід, коли іноді ти працюєш над проектом і раптом щось з'являється несподівано, кидає на роботу величезний ключ і збільшує всю складність.
Наприклад, я працював над додатком, який спілкувався зі службами SOAP на різних інших машинах. Я підхопив прототип, який працював чудово, потім продовжував розробляти звичайний передній кінець і, як правило, отримувати все вгору та працювати в хорошій, досить простій і легко слідувати моді. Це спрацювало чудово, поки ми не розпочали тестування в ширшій мережі, і раптом сторінки почали відмічатися, оскільки затримка з'єднань і час, необхідний для виконання розрахунків на віддалених машинах, призвели до тимчасових запитів до мильних служб. З'ясувалося, що нам потрібно змінити архітектуру, щоб розподіляти запити на власні потоки та кешувати повернені дані, щоб вони могли поступово оновлюватися у фоновому режимі, а не виконувати обчислення за запитом на основі запиту.
Деталі цього сценарію не надто важливі - дійсно, це не чудовий приклад, оскільки це було досить передбачувано, і люди, які написали багато додатків такого типу для цього типу середовища, могли б цього передбачити - за винятком того, що він ілюструє спосіб, який можна починати з простої передумови та моделі та раптом мати складність в процесі розвитку проекту.
Які стратегії у вас є для боротьби з цими типами функціональних змін, потреба яких виникає - частіше внаслідок факторів навколишнього середовища, а не зміни специфікацій - пізніше в процесі розробки або в результаті тестування? Як ви балансуєте між уникненням передчасної оптимізації / YAGNI / надмірного ризику розробки рішення, яке пом'якшує можливі, але не обов'язково ймовірні проблеми, на відміну від розробки більш простого та легшого рішення, яке, ймовірно, буде настільки ж ефективним, але не містить готовності до будь-яка можлива подія?
Редагувати: Відповідь божевільного Едді включає в себе "ви висмоктуєте це і знаходите найменш дорогий спосіб втілення нової складності". Це змусило мене думати про щось, що було неявним у питанні, але я конкретно не піднімав.
Як тільки ви натиснете на цю шишку, і ви внесете необхідні зміни. Ви робите те, що буде тримати проект максимально наближеним до графіку, але це може вплинути на ремонтопридатність, або ви повернетесь до своєї архітектури та переробляєте її на більш детальному рівні, який може бути більш ретельним, але підштовхне все назад під час розробки?