Что является основной причиной говнокода?
Тут как посмотреть. Непосредственных причин, которые приводят к говнокоду, может быть очень много:
1. Отсутствие внятной аналитики и архитектуры
2. Низкая квалификация исполнителей (он может и хотел бы сделать хорошо, но не знает и не умеет)
3. Говнокодеры по складу характера (есть такие люди, которым даже если создать все условия, все равно сделают на от****сь, потому что и так сойдет)
4. Недопонимание и сложные отношения в команде
5. Сроки (бывают заведомо нереалистичные, а бывают просранные в процессе)
6. Меняющиеся требования
7. Плохо выстроенные процессы (документация, тесты и пр)
8. Текучка кадров
9. Политика руководства
И тд и тп... Можно придумать ещё много пунктов.
Но в конечном итоге все эти причины можно свести к одной первопричине - плохой менеджмент. Хороший менеджмент это такой непонятный зверь...  Трудно сформулировать, понять, организовать. Косяки не сразу видны и ощутимы, но потом выливаются в проблемы. Если у вас есть хороший менеджер проекта - он на вес золота.
В английском это называется duct tape programming - программирование "изолентой". 
Это значит мы записываем в код первое пришедшее в голову решение, не раздумывая, не задумываясь о последствиях и пр. Главное чтобы было "сделано".  
Еще указывают на проблему такого подхода, что человек который делает тяп-ляп, но быстро в глазах заказчика или менеджера будет незаслуженно выглядеть героем.