S>А я вот думаю, что программирование давно не похоже на науку — это должне быть чёткий и отлаженный производственный процесс в большинстве случаев (я, конечно, не беру в расчёт тех, кто занимается исключительно "наукой программирования"). Большинство задач решаются типовым набором способов, причём набор способов конечен. На тюнинг каждого способа решения для конкретной задачи должно тратиться не очень болшое время (по оч грубым оценкам — до 20%).
Есть у разработки ПО такая приятная черта — большая часть рутинной работы может быть автоматизирована. И если у вас есть стандартная задача разработки сводного отчета из таблицы операций, выполняемая квалифицированным кодером на 2 дня, то скорее всего при использованнии надлежащего инструментария (OLAP и MS Excel к примеру), она может быть выполнена за 2 часа.

И тут для разработчика мало что остается. Это работа скорее внедренца/аналитика/бухгалтера. Хотя, отсутствие инструментария и нежелание его покупать вносят свои коррективы.
Опять же, это только если откинуть такая "незначительные" вещи, как унаследованный код, сложность дискретных систем, использования упрощенных моделей при проектировании и атмосферу на рабочем месте.
Если у вас к примеру одна и таже задача периодически решается с небольшими вариациями, то почему бы ее решение не реиспользовать каждый раз? Или сделать универсальный инструмент, для ее решения?
С другой стороны, сложность создания универсального инструментария на порядок выше. И вот тут то начинается главное веселье. Поэтому комании занимающиеся инновационными разработками, гораздо свободнее относятся к срокам.