Цикл, який ви описуєте, є нормальним. Спосіб вдосконалення речей - не уникнути цього циклу, а впорядкувати його. Перший крок - це прийняти:
- У перший день проекту майже неможливо знати все .
- Навіть якщо ви якось все знаєте, до того часу, коли ви закінчите проект, тоді щось (вимоги клієнта, ринок, на якому вони є, технологія, з якою ви працюєте, побажання своїх клієнтів) буде змінено і виконано на принаймні частина того, що ви знали, невірно чи невірно.
Тому неможливо планувати все наперед, і навіть якби ви могли, дотримуючись цього плану, ви призведете до того, щоб побудувати щось недосконале або застаріле. Знаючи це, ми інтегруємо зміни в наше планування. Давайте розглянемо ваші кроки:
- Почніть з кількох випадків використання
- Почніть кодування
- Зрозумійте кілька речей, з якими я не впорався, і не вписується в поточну базу коду.
- Перепишіть більшу частину коду
Це насправді чудова відправна точка. Ось як я підійшов би до цього:
1. Почніть з кількох випадків використання
Добре. Говорячи «прецедентів», ви фокусуєтеся на те, що програмне забезпечення для . Сказавши "кілька", ви не намагаєтесь розкрити все; ви дотримуєтеся керованого обсягу роботи. Все, що я тут додаю, - це надати їм пріоритет. З вашим клієнтом або кінцевим користувачем розробіть відповідь на це питання:
Яке найменше, найпростіше програмне забезпечення, яке я можу вам надати, покращить вашу ситуацію?
Це ваш мінімально життєздатний продукт - все, що менше, ніж це, не корисне для вашого користувача, але щось велике ризикує запланувати занадто рано. Отримайте достатньо інформації, щоб створити це, а потім рухайтеся далі. Майте на увазі, що в цьому моменті ви все не будете знати.
2. Почніть кодування.
Чудово. Ви працюєте якнайшвидше. Поки ви не написали код, ваші клієнти не отримали нульову пільгу. Чим більше часу ви витрачаєте на планування, тим довше клієнт витрачав на очікування без окупності.
Тут я б додав нагадування, щоб написати хороший код. Запам’ятайте та дотримуйтесь принципів SOLID , пишіть гідні одиничні тести навколо чогось крихкого чи складного, робіть примітки до всього, що ви, ймовірно, забудете або що може спричинити проблеми пізніше. Ви хочете структурувати свій код, щоб зміни не спричинили проблем. Для цього кожен раз, коли ви приймаєте рішення про побудову чогось цього способу замість цього , ви структуруєте свій код так, щоб на це рішення впливало якомога менше коду. Загалом, хороший спосіб зробити це - відокремити свій код:
- використовуйте прості, дискретні компоненти (залежно від вашої мови та ситуації, цей компонент може бути функцією, класом, збіркою, модулем, службою тощо. Можливо, ви також маєте великий компонент, який складається з менших, наприклад клас з великою кількістю функцій або збірка з великою кількістю класів.)
- кожен компонент виконує одну роботу або завдання, що стосуються однієї речі
- зміни в тому, як один компонент виконує свою внутрішню роботу, не повинні спричиняти зміни інших компонентів
- компоненти повинні бути приведені речі , які вони використовують або залежать, а не витяг або створення їх
- компоненти повинні надавати інформацію іншим компонентам і просити їх виконувати роботу, а не отримувати інформацію та виконувати роботу самі
- компоненти не повинні мати доступ, використовувати або залежати від внутрішніх функцій інших компонентів - використовувати лише їхні загальнодоступні функції
Тим самим ви виділяєте наслідки змін, щоб у більшості випадків виправити проблему в одному місці, а решта вашого коду не помітити.
3. Зустрічайте проблеми або недоліки в дизайні.
Це станеться. Це неминуче. Прийміть це. Коли ви потрапили на одну з цих проблем, вирішіть, що це за проблема.
Деякі проблеми - це проблеми у вашому коді чи дизайні, які ускладнюють виконання програмного забезпечення. Для цих проблем вам потрібно повернутися та змінити дизайн, щоб вирішити проблему.
Деякі проблеми викликані недостатньою інформацією або наявністю чогось, про що ви не думали раніше. Для цих проблем вам потрібно повернутися до свого користувача або клієнта і запитати їх, як вони хочуть вирішити цю проблему. Коли у вас є відповідь, ви переходите та оновлюєте свій дизайн, щоб впоратися з ним.
В обох випадках слід звернути увагу на те, які частини коду довелося змінити, і, як ви пишете більше коду, вам слід задуматися про те, які частини, можливо, доведеться змінити в майбутньому. Це полегшує розбір, які деталі можуть бути занадто взаємопов’язаними, а які частини, можливо, потребують більш ізольованої форми.
4. Перепишіть частину коду
Визначивши, як потрібно змінити код, ви можете перейти та внести зміни. Якщо ви добре структурували свій код, то це, як правило, передбачає зміну лише одного компонента, але в деяких випадках це може включати і додавання деяких компонентів. Якщо ви виявите, що вам потрібно змінити багато речей у багатьох місцях, то подумайте, чому це так. Чи можете ви додати компонент, який зберігає весь цей код всередині себе, а потім усі ці місця просто використовують цей компонент? Якщо ви можете, зробіть це, і наступного разу, коли вам доведеться змінити цю функцію, ви зможете зробити це в одному місці.
5. Тест
Поширена причина проблем у програмному забезпеченні - недостатньо добре знати вимоги. Це часто не з вини розробників - часто користувач не впевнений, що їм теж потрібно. Найпростіший спосіб вирішити це - перевернути питання. Замість того, щоб запитувати "для чого потрібно це програмне забезпечення?", Кожен раз, проходячи ці кроки, дайте користувачеві те, що ви створили до цього часу, і запитайте їх: "Я створив це - чи робить це те, що вам потрібно?". Якщо вони скажуть так, то ви побудували щось, що вирішує їхню проблему, і ви можете перестати працювати! Якщо вони скажуть "ні", вони зможуть точніше сказати вам, що з вашим програмним забезпеченням не так, і ви можете піти вдосконалити цю конкретну річ і повернутися для отримання більш зворотного зв'язку.
6. Вчіться
Проходячи цей цикл, зверніть увагу на проблеми, які ви знайдете, та на зміни, які ви вносите. Чи є візерунки? Чи можете ви покращитись?
Деякі приклади:
- Якщо ви продовжуєте знаходити, що ви не помітили певної точки зору користувача, чи зможете ви залучити цього користувача до участі у розробці?
- Якщо вам все-таки потрібно змінювати речі, щоб вони були сумісні з технологією, чи зможете ви створити щось для інтерфейсу між вашим кодом та цією технологією, щоб змінити інтерфейс?
- Якщо користувач продовжує змінювати свою думку щодо слів, кольорів, малюнків чи інших речей в інтерфейсі, чи можете ви створити компонент, який надає решті програми ті, щоб вони були в одному місці?
- Якщо ви виявите, що багато ваших змін є одним і тим же компонентом, ви впевнені, що компонент дотримується лише однієї роботи? Не могли б ви поділити його на кілька менших шматочків? Чи можете ви змінити цей компонент, не торкаючись інших?
Будьте спритними
Що ви рухаєтесь до цього стилю, це стиль роботи, відомий як Agile. Agile - це не методологія, це сімейство методологій, що включає цілий набір речей (Scrum, XP, Kanban, якщо назвати декілька), але все, що у них є спільне, - це ідея, що все змінюється, і ми як розробники програмного забезпечення ми слід планувати пристосовуватися до змін, а не уникати або ігнорувати їх. Деякі її основні принципи - зокрема, ті, що стосуються вашої ситуації - такі:
- Не плануйте далі заздалегідь, ніж ви можете впевнено передбачити
- Зробіть припущення, щоб речі мінялися по мірі руху
- Замість того, щоб будувати щось велике за один раз, побудуйте щось маленьке, а потім поступово вдосконалюйте його
- Залишайте кінцевого користувача, який бере участь у процесі, та отримуйте швидкий, регулярний зворотній зв'язок
- Вивчіть власну роботу та прогрес, і вчіться на своїх помилках