Тримайте це просто зараз чи програмуйте з майбутнім на увазі?


21

На даний момент я кодую нову програму для своєї компанії, яка досить задіяна. Щоб дотриматись терміну, функціональність була скорочена, так що ми можемо мати щось готове до запуску.

Я отримав завдання підготувати версію 1 та запустити її до кінця місяця. Я приблизно на півдорозі розвитку, і я дійшов до того, що видно кінець.

Вчора я провів деякий час, придумавши дуже приємне просте рішення однієї з вимог, і я дуже пишаюся тим, як це вийшло. Сьогодні вранці був відправлений документ версії 2, і там є вимога, яка вимагає, щоб код, про який я написав вчора, був або вичерпаний, або сильно змінений. Це вимагатиме багато роботи в майбутньому, якщо я залишу його таким, яким він є. Зараз я можу взяти додатковий день, щоб зробити своє поточне рішення більш надійним, щоб функція v2 змогла бути додана з набагато меншими зусиллями, але це дозволить мені трохи відстати від додаткового кодування, яке потрібно.

Я не знаю, чи буду робити v2. Це я, може, я, або співпрацівник, або навіть стажер.

Якби ви були в моєму взутті, чи витратили б ви час зараз, щоб полегшити його в майбутньому, чи ви залишите своє рішення і попрацюєте з ним, коли настане час?



Наступне посилання було корисним для мене: elegantcode.com/2012/01/16/marines-vs-boy-scouts
QuanhD

Відповіді:


18

Якщо термін закінчується вирізаним каменем, просто закінчіть те, що вам доведеться виконати. Переконайтеся, що ви надули оцінки для v2, щоб відповідати змінам коду для нової вимоги. Також не забудьте коротко задокументувати те, що, на вашу думку, потрібно змінити для нових функцій v2, щоб колега міг забрати його, якщо вам призначено щось інше.

Якщо в крайній термін є достатня гнучкість (1 день, за звуком цього, тому прагніть продовжити на 2,5 дня), тоді обов'язково продовжуйте і кодуйте відоме майбутнє!


1
+1 за пропозицію документувати більш надійне рішення. Ця функція може бути, а може бути, не реалізована так, як ви планували, але, безумовно, хороша ідея повідомити майбутнього виконавця про свої думки щодо змін.
Майк Партрідж

2
Я фактично почав виписувати заглушки методу для очікування v2 сьогодні вранці, прочитавши документ. Думаю, я залишу це на цьому і в деяких коментарях, щоб сказати, як вони будуть грати в майбутньому. Дякую :)
Тянья

1
Слідкуйте за м'ячем .... мій досвід - це погано, щоб потурбуватися про щось, що стосується V2, коли у вас є термін V1, який повинен бити вас між очима. Якщо він гнучкий, це не термін. Якщо в розробці пропущений термін, винна розробникам.
mattnz

13

Уникайте потрапляння здобичі (рано) до Другого системного впливу . Ось кілька хороших методик застосування:

  1. Безумовно, уникайте де-рейлінгової версії 1 лише тому, що ви бачите у версії 2. Планування заздалегідь чудово, але творець специфікацій v2 повинен відповідати за збій v2, а не v1.
  2. (Якщо можливо) подивіться, чи зможете ви творця переробити вимоги до версії 2, які зараз не потребуватимуть більших змін - а потім плануйте їх пізніше, можливо, для v3.
  3. Майте на увазі YAGNI , але намагайтеся кодувати розширюваність на увазі - уникайте магічних чисел, твердо кодованих значень, пишіть хороші одиничні тести чи контракти з кодом тощо. Застосування хороших методів на початку зробить рефакторинг та зміни коду менш болісними на цьому шляху.

Більшість програмних проектів, які зростають як міста, є успішними в довгостроковій перспективі. Еволюційне планування лише в обмеженому майбутньому дозволяє випускати програмне забезпечення вчасно та з необхідними функціями при випуску - і не більше. Дивіться цей уривок Карла Сагана:

Упорядкування [міста] може бути ефективнішим, якби всі громадянські системи будувались паралельно і періодично замінювалися (саме тому катастрофічні пожежі - наприклад, великі пожежі Лондона та Чикаго - іноді допомагають у плануванні міста). Але повільне нарощування нових функцій дозволяє місту працювати більш-менш безперервно протягом століть.


Мені подобається ідея поговорити з дизайнером та керівництвом, щоб побачити, чи вони одружені з цією особливістю. Я бачу це скоріше як марний дзвінок, який спричинить більше роботи, ніж варто ... але тоді я підкреслив розробку. :)
Тянья

2
+1: Уникайте спроб передбачити майбутнє. Коли він прибуде, це буде дивно.
С.Лотт

7

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


Це правда, але це правда лише в тому випадку, якщо у вас є час наперед, щоб дуже ретельно спланувати її на передній план, і у вас є необхідні ділові знання, щоб передбачити характер різних змін. З огляду на більшість бізнес-ситуацій, хоча (зараз дешевше, менше) я повністю згоден з вашими твердженнями. У мене є кілька прикладів, якщо ви справжній невіруючий :)
Джоел Етертон

@JoelEtherton: Навіть якщо ти маєш бізнес-знання, передбачити зміни дуже важко, до того, що часто не варто намагатися ... просто мій досвід.
sleske

@sleske: Іноді можливо, але мій досвід був в обох напрямках. На моїй теперішній роботі вдале планування та передбачуваність врятували мені тону зайвих головних болів.
Джоел Етертон

6

Залиште так, як є.

Розробники насправді ВІДПОВІДАЮТЬ старий проект, який робить те, що потрібно робити, і не більше того.

Що сьогодні може здатися гарною ідеєю для "постановки" кодової бази для задоволення вимоги "майбутнього", швидше за все, буде перешкодою для розуміння коду в майбутньому. Ніхто не любить мати справу з частково реалізованою функціональністю та залишками забутих фантомних вимог. Я не кажу, що так буде, але часто все виходить таким чином, незважаючи на найкращі наміри.


+1 за "відсутність наполовину реалізованої функціональності". Бажаю, щоб я міг більше підкреслити.
sleske

1

Гарні відповіді. Я хотів би лише додати - те, що я роблю у такому випадку, - це добре розходитись, щоб я міг захопити те, що я зробив, і вивітри його в безпечному місці. Тоді якщо з’явиться можливість зробити це ще раз у наступній версії, це буде легко.

Взагалі, хороший розробник передбачає майбутні вимоги, але коли настає термін, настав час реагувати на помилки у тому, що ви вже отримали, а не «качати човен».


Гарна ідея про те, щоб змінити окремі зміни. Замість відмінності, гілка - це, мабуть, краща ідея (видима, легша для злиття тощо). Ви завжди можете її видалити пізніше.
sleske

1

Це залежить. Існує хороше старомодне правило: поводьтеся з іншими людьми, як ви хочете, щоб до них ставились самі. Що б ви зробили, якби це був ваш власний проект, і ви знали всі пріоритети?

Якщо v2, безумовно, потрібен, а термін - це лише бажання, а не суттєва необхідність, тоді не створюйте технічної заборгованості і не поправляйте вітрила, поки погода хороша. Навіть якщо хтось інший зробить v2, вони оцінять передбачення.

Якщо є сумніви щодо необхідності v2, тоді дотримуйтесь YAGNI. Крім того, якщо ви з іншого боку спектру і маєте одного з тих клієнтів, які постійно розсипають вас своїми ідеями до того, як вони формуються, то перевіряйте ваші електронні листи лише 2 або 3 рази на день і не поспішайте з дією, ви здивуєтеся скільки "проблем" і запитів стають неактуальними, перш ніж ви навіть прочитали їх.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.