I think part of the problem is that without some sort of deadline most software developers will waste way too much time on one of the following things:
1) Building Frameworks 2) Making ambitious technology decisions (lets modify NHibernate to work with web services as the persistence layer!) 3) Constantly switch technologies to whatever is "hot" (Lets rewrite our 2000 tests to use mbUnit because we like it better) 4) Over-engineer (we need an abstract factory factory!)
Of course there is a balance, overly ambitious deadlines usually cause equally bad decisions to be made to meet the date⦠but not having some sort of deadlines is not the answer.