Віктор Турський про програмування / навігатор

концепції / technical-debt

Технічний борг

Формулювання, що запало Віктору, — цитата, яку він переказує далі: «якщо ти просто пишеш код — ти накопичуєш технічний борг» (випуск про код-ревʼю в Google). Його приклад: систему спроєктували під 10 модулів, а тепер їх 300. Кожен новий модуль написано точно так само, як попередні, поревʼюєно, як попередні, і в диффі він виглядає чудово — але архітектура в цілому вже не працює. У цьому суть погляду каналу: борг — це не неохайний код, що прослизнув повз ревʼю; це консистентний код, який накопичується всупереч дизайну, що тихо втратив актуальність, — і саме тому він невидимий для пре-сабміт код-ревʼю.

Той самий механізм — у його історіях про абстракції: віджет-прототип на ~100 рядків виростає в один файл на 5000 рядків саме тому, що кожна зміна лишалася консистентною з навколишньою структурою — «нас же ТИ так навчив», сказала йому команда (голосове про страшні абстракції). Ліки, які він описує, — структурні, а не на рівні диффа: у Google — post-launch проходи по вже змердженому коду, у WebbyLab — періодичні архітектурні ревʼю з чеклістами, C4-діаграмою та планом дій, який повторно перевіряють за ~2 місяці (випуск про код-ревʼю в Google). Мікросервіси роблять цей борг унікально дорогим: хибна межа в моноліті — дешевий рефакторинг, а між сервісами різними мовами й у різних командах її виправити неймовірно важко (головна проблема мікросервісів).

Розібрано у відео

Повʼязане

Код-ревʼю — ревʼю окремих PR не бачить цей клас боргу; архітектурне ревʼю — бачить Якість коду — якість як код, що й далі дозволяє себе розширювати Абстракції — не виділяти нові абстракції, коли відповідальності ростуть, — саме так борг і накопичується Мікросервіси — розподілені системи заморожують погані рішення намертво