Одна частина відповіді - Рефакторинг .
По-перше, починайте писати одиничні тести, щоб переконатися, що ви випадково нічого не порушите зі своїми змінами. Тоді починайте вдосконалювати дизайн, видаляючи дублікації і т. Д. Невеликими кроками, запускайте тести своїх пристроїв після кожного кроку, виправляйте будь-які проблеми, якщо будь-який з тестів виходить з ладу, або повертайте негайно, якщо ви зіткнулися з більшою проблемою, ніж ви можете легко вирішити.
Інша частина - освіта .
Людей треба вчити не залишати поганий код позаду. Це, безумовно, тривалий бій, оскільки звички та мислені процеси важко (іноді навіть неможливо) змінити . Однак без цього ви просто продовжуватимете отримувати нескінченний запас поганого коду, який кричить, щоб його відновити.
Ви можете зробити огляд групового коду, щоб відкрити дискусію про добрі та погані звички кодування та поширити переваги перших. Мало сказати, що "ви повинні (не) писати такий код", вам потрібно переконати людей у логіці та важких фактах. На кшталт "якщо у вас є цей фрагмент методу, дубльований через кодову базу n разів, як ви вважаєте, що шанси на те, що якщо помилка буде знайдена в цьому методі, вона буде виправлена у кожній копії коду методу?"
Можливо, Вашій компанії також доведеться переглянути стимули та критерії прийняття консультантів - якщо вони зможуть уникнути написання неохайного коду, вони неодмінно продовжуватимуть обирати більш простий шлях. Якщо компанія продовжує оцінювати "швидку доставку" протягом довгострокової ремонтоздатності, нічого не зміниться :-( Тож вам може знадобитися обговорити це також з керівництвом. Один із способів дати їм зрозуміти, це такий: рефакторинг означає зберегти код чистим, легко розуміти і підтримувати. Пропуск рефакторингу - це як накопичення боргу на вашій кредитній картці. Ви можете піти з цим на деякий час, але якщо ви активно не керуєте своїми звичками і боргами з покупки, це неминуче одного дня спаде на ваші плечі. В житті програмного проекту банкрутство - це коли проект стає неможливим: переписати його з нуля стає легше, ніж додати нову функцію до існуючої бази коду. Або користувачі настільки втомилися від нижчого рівня підтримки та можливостей, що вони просто переходять на конкуренцію.