Говнокод не пишет только тот, кто не пишет код вообще. Все остальные — хоть раз, да оставляли после себя что-то, за что потом стыдно. Сроки, бардак, «пофиг, потом поправим» — и вот ты уже сидишь среди костылей, где любое движение может всё сломать. Разберём, почему так происходит, сколько это стоит и что с этим делать, пока проект ещё жив.

Говнокод есть почти в каждом проекте - в маленьких, средних, больших. Он появляется не потому, что кто-то тупой, а потому что:

  • сроки поджимали
  • ТЗ не было
  • заказчик хотел ещё вчера
  • джун кодил как умел
  • техлид свалил посреди спринта
  • «потом всё обязательно рефакторим».

Спойлер: не рефакторят.

А потом наступает момент, когда даже добавить кнопку — всё равно что вырезать аппендицит без наркоза: больно, долго и с риском убить пациента.

Что происходит в проекте с говнокодом

1. Любое изменение ломает что-то ещё
Починил форму — отвалилась корзина. Обновил библиотеку — лег весь раздел. В итоге разработчики боятся трогать код. Это не трусость, а инстинкт самосохранения.

2. Каждая фича превращается в баг
Код непредсказуемый, держится на костылях и древних if’ах, которые «нельзя трогать, иначе всё рухнет».

3. Никто ничего не понимает — даже автор
Особенно автор. Прошло три месяца — и всё, ты не понимаешь, что сам написал. Документации нет, архитектуры нет — всё на удаче.

Почему это дорого

1. Нет документации — всё методом тыка
Разработчик тратит часы, чтобы понять, откуда берётся $x и почему оно пустое. Каждый новый сотрудник начинает с нуля. Всё, что не задокументировано, умирает с увольнением последнего девелопера.

2. Код не читается — выглядит как преступление
Нет стиля, всё в куче, табы дерутся с пробелами, имена переменных как кошка по клавиатуре: $a, $tmp, $x1. Понять, что делает getData2, проще переписать.

3. Код красивый, но тупой
Форматирование есть — смысла нет. Всё связано жёстко, функции знают слишком много, алгоритмы кривые.

4. База данных — это свалка
Таблицы temp3, old_backup, users__copy2. Поля висят мёртвым грузом. Миграция — как мини-переворот: чем закончится — одному богу известно.

5. Нет бэкапов — живём на удаче
Один сервер на всё: и работает, и падает. Никаких dev-серверов, никаких резервных копий. «Я внёс пару правок — почему всё легло?»

6. Архитектура = анархия
Компоненты зависят друг от друга, как токсичные родственники. Протестировать кусок нельзя — надо поднимать всё. Меняешь одно — ломается пять других.

7. Нет тестов — всё тестирует продакшен
Новые фичи сразу в бой. Пусть пользователи проверят.

8. Нет git — ад для команды
FTP, как в 2007-м. Два программиста затирают код друг друга. 

«Ты зачем удалил мою функцию?» 

— «Думал, не нужна». 

— «Я её только что писал!»

9. Нет таск-трекера — все всё забывают
Баги — устно или в голове. История изменений — миф. Кто что делает — никто не понимает.

Что делать

  • Не пытаться лечить всё сразу. Говнокод вытравливают по частям — с самого больного.
  • Пиши документацию. Любую. Даже README.md — уже польза.
  • Переходи на git. Даже если ты один.
  • Заводи трекер задач, dev-окружение, тесты. Это не понты, это спасение.
  • Рефакторь по кусочкам. Не переписывай всё с нуля — перепиши хотя бы UserService.

Итог

Говнокод стоит дорого — бизнес платит деньгами, сроками, нервами. Никто не требует идеального кода, но между «идеально» и «невозможно поддерживать» — целая пропасть. 

Хочешь, чтобы проект жил — убирай говнокод. Хочешь, чтобы проект умирал — прикрывай костылями. Выбор за тобой.