Як оцінити, керувати та уникнути технічних боргів
Якщо технічний борг звучить як щось взяте з підручника з фінансів, це тому, що цей термін пов’язаний з фінансами. Однак у справжньому розумінні технічний борг пов’язаний із програмуванням. Це ідея, що під час розробки програмного проекту певні необхідні кроки пропускаються або просто відкидаються в спробі вкластися в кінцевий термін.
Прагнучи розробити ідеальну програму чи програмне забезпечення, розробникам часто бракує часу — так само, як і будь-якій випадковій людині, яка виконує будь-яке довільне завдання. Таким чином, зазвичай має сенс знайти певний компроміс між наданням ідеального продукту з ідеальним кодом і максимізацією часу.
Тоді виникає питання: чи є межа цим компромісам? Чи існує невід’ємна шкода, яка може виникнути в результаті цього компромісу? Нарешті, чи справді розробнику краще в довгостроковій перспективі? У цьому матеріалі про технічні борги я спробую відповісти на всі ці запитання.
Що таке технічний борг?
Визначаючи технічний борг, ми повинні будемо посилатися на людину, якій приписують створення цього терміну в першу чергу: Уорда Каннінгема. Згідно з Каннінгемом, технічна заборгованість стосується додаткової роботи над розробкою програмування коду, щоб компенсувати дефіцит, що виникає внаслідок його програмування протягом короткого періоду часу.
Щоб зробити це більш наочним, уявіть, що вам доручено прибрати брудну кімнату, і ви запізнюєтеся на урок. Щоб переконатися, що ви виконуєте інструкції та вчасно прибуваєте на урок, ви швидко прибираєте, вимітаючи більшість сміття під диваном. Наслідком цього є те, що врешті-решт вам доведеться витратити час на розбирання безладу. У розробці програмного забезпечення, коли ви пропускаєте необхідні кроки та йдете легшим шляхом із «не дуже чистими» кодами, пізніше в майбутньому буде важче очистити код. Існує кілька етапів доміно проекту програмного забезпечення, і чим довше ви ігноруєте існуючу проблему, тим більше часу потрібно для її вирішення.
Види технічної заборгованості
Технічні борги бувають різних типів, у тому числі:
Запланована технічна заборгованість
Це трапляється в ситуаціях, коли організації навмисно вирішують потрапити в технічні борги. Це, як обговорювалося раніше, зазвичай для того, щоб випередити встановлені терміни та досягти конкретної мети. Взявши участь у запланованих технічних боргах, організація повинна чітко розуміти, від чого вона готова відмовитися, а від чого не може. Ви повинні вести точні записи, маючи на увазі, що з часом вам доведеться повернутися та виправити помилки, які ви пропустили на початку.
Цей вид технічного боргу є прямою протилежністю першого. Він виникає, коли організація не передбачає або не планує технічний борг. Причиною цього зазвичай є порушення зв’язку між різними підрозділами в організації або погана практика роботи між підрозділами.
Неминучі технічні борги
Це вид технічної заборгованості, якій жодні дії з боку організації не змогли б запобігти. Наприклад, з огляду на швидкі зміни, які відбуваються в технологіях, має сенс, що деякі коди, написані в минулому, не відповідатимуть поточним прогнозованим стандартам.
Крім того, такий технічний борг може виникнути, коли зміни запитуються, коли код вже записується. Якщо в середині розробки програмного забезпечення, введені певні зміни, це може зіпсувати динаміку, роблячи старий код застарілим або непотрібним.
Причини технічної заборгованості
Деякі з причин технічної заборгованості обговорювалися вище, але я просто виберу їх одну за одною, щоб зробити їх більш зрозумілими.
Поспіх
Найчастішою причиною технічної заборгованості є поспіх. Розробники часто встановлюють жорсткі терміни, деякі з яких включають терміни запуску певного програмного забезпечення. У подібних ситуаціях часто зрозуміло (і очікувано), що розробник може отримати технічні борги. Цей тип технічної заборгованості часто є навмисним і може призвести до проблем, які можуть варіюватися від наявності помилок у коді або виникнення спагетті-кодів.
Недогляд/помилка
Іноді програмісти просто пишуть погані коди, що в кінцевому підсумку призводить до технічних боргів. Незалежно від того, чи існує поганий код в результаті помилки кодера чи ні, факт полягає в тому, що помилки призводять до технічних боргів, і оскільки вони не підлягають масштабуванню, їх зрештою доведеться виправляти.
Відсутність обізнаності про наслідки
Іноді технічні борги виникають через те, що кодер не усвідомлює або не визнає, наскільки шкідливими є технічні борги в довгостроковій перспективі. Це може бути наслідком законного незнання шкідливих наслідків використання ярликів під час програмування, або це може бути навмисне ігнорування наслідків.
Намір
Технічні борги можуть виникнути навмисно через навмисні дії кодера або організації.
Відсутність модульності
Це відбувається здебільшого через те, що один код може обслуговувати різну бізнес-логіку одночасно. Така ситуація значно ускладнює роботу з програмним забезпеченням. З кожним кодом, який пише розробник, тим більше шансів, що він зіткнеться з проблемами модульності.
Оцінка технічної заборгованості
Технічну заборгованість ніколи не слід розраховувати вручну, оскільки це було б досить важко. Це означало б необхідність вручну вводити код, щоб визначити поточні проблеми та можливі майбутні. Крім того, наскільки марно витрачається час на ручний процес, існує ймовірність того, що коди змінили б форму в кінці ручного процесу.
Один із способів проведення оцінки — це статичний аналіз за допомогою деяких інструментів, які його підтримують. Серед інструментів, якими можна скористатися, є Coverity, SonarQube, Check Style і Closure Compiler.
Як правило, існує два способи розрахунку технічної заборгованості. У першому підході його можна отримати шляхом розрахунку коефіцієнта технічної заборгованості за кодовим співвідношенням. Тут початкова оцінка або загальний час, необхідний для розробки програми, буде використано для визначення часу, необхідного для усунення технічної заборгованості.
У другому підході ви можете безпосередньо використовувати оцінки, надані різними інструментами, такими як SonarQube. Це буде об’єднано зі списками технічних боргів, а також їхніми довідковими кодами. За допомогою інструментів ви можете отримати точну оцінку тривалості часу, необхідного для виправлення.
Оцінка технічної заборгованості дасть вам уявлення про те, скільки днів знадобиться для усунення технічної заборгованості. Чим більше боргів, тим довше вам знадобиться їх виправити.
Вирішення технічної заборгованості
Що робити, якщо виникла технічна заборгованість і ви не знаєте, що робити? Є певні кроки, які ви можете вжити, щоб управляти технічними боргами.
По-перше, ви повинні визнати наявність технічної заборгованості та повідомити про це своїй команді. Спілкуючись, ви повинні чітко розуміти, що сталося і що потрібно зробити, щоб це виправити. Ви повинні переконатися, що ви чітко повідомляєте про необхідність подбати про технічну заборгованість якнайшвидше.
Після інформування вашої команди про технічні борги, ви можете застосувати три підходи. У першому підході ви можете вирішити продовжити систему як є. У цьому сценарії програма використовуватиметься як є.
Крім того, ви можете вирішити змінити програму. Рефакторинг виконується з метою зменшення складності програми, а також очищення структури програми. З рефакторингом поведінка програмного забезпечення не зміниться; єдиною постраждалою частиною буде внутрішня структура.
Нарешті, якщо два обговорені вище варіанти не працюють, вам доведеться повністю замінити код. Одна з проблем цього полягає в тому, що це може призвести до нових технічних боргів, але це може бути кращим компромісом у довгостроковій перспективі.
Як уникнути технічних боргів у майбутньому
Зрозуміло, що уникати технічних боргів розумніше, ніж намагатися виправити їх, коли вони виникають. Крім того факту, що це економить ваш час і стрес, це також гарантує, що залишкові наслідки, які виникають від наявності технічної заборгованості з самого початку, відсутні.
Можна стверджувати, що технічні борги самі по собі непогані. Вони зазвичай проблематичні, тому що це борги, які потрібно повернути, а люди не є найвідповідальнішим видом на землі. Постійний вибір слабшого варіанту загалом послабить міцність вашого програмного забезпечення та ускладнить подальше вдосконалення функцій. Загалом, уникнути технічних боргів – найкращий варіант для будь-кого.
Отже, як запобігти виникненню технічної заборгованості:
Створіть Бэклог проекту
Ідея полягає в тому, щоб тримати всіх у курсі процесу та пришвидшити їх виконання вимог до будь-якого завдання, яке виконується. Створення резерву дозволяє кожному бачити завдання, які залишилися невиконаними, і шляхи їх досягнення.
Віддавайте пріоритет якості, а не швидкості
Якщо ви самі програміст, вам слід навчитися віддавати перевагу якісній роботі над великою кількістю роботи. Переконайтеся, що ваші коди чисті, а ваші програми та інше програмне забезпечення розроблено до досконалості. Зрозумійте, що спокуса йти короткими шляхами не вартує того, тому що врешті-решт вам все одно доведеться виконувати завдання, які ви відкинули.
Якщо ви очолюєте команду, ви повинні донести ті самі цінності до членів команди. Членів слід навчити створювати рішення, орієнтовані на результат, і уникати ярликів.
Створення обізнаності
Як правило, глибоке знання того, що таке технічний борг і як його уникнути, може бути корисним для запобігання його виникненню. Якщо ви озброїте своїх розробників необхідними знаннями, їм буде краще уникати пасток, які створюють технічні борги.
Ознайомтеся з належною практикою кодування
Деякі практики кодування роблять більш ймовірним, що ви потрапите в технічні борги. Таким чином, було б чудово уникнути тісного зв’язку, використовувати абстракцію та рефакторинг.
Представляємо оновлену технологію
Регулярні оновлення технологій можуть бути чудовим засобом попередження технічних боргів. Під час оновлення ви повинні переконатися, що використовується найновіша структура, бази даних і прикладне програмне забезпечення.
Висновок
У переважній більшості випадків технічних боргів не уникнути, якщо ви продовжуєте розробляти програми та писати коди. Проте ймовірність їх появи можна значно зменшити, якщо виконати перелічені вище дії. Крім того, в разі виникнення технічних боргів не втрачається вся надія. Зберігайте спокій, будьте впевнені, дійте відповідно.