When a team is composed of multi disciplined personnel, who sign up together to deliver solutions in iterative steps, the conclusion more clearly reflects the desired result and there is less blame on the way.
Test Driven Development
Gives you a set of requirements that defines the behaviour of the system and provides an invaluable buffer by which a project can embrace change without fear.
Keeping the solution from becoming over complicated, refactoring when necessary or leaving alone code, is to some degree, an art. Constant judgements have to be made but the breakdown of the complex into the straightforward is not something that should be brushed aside in favour of the headlong gallop to completion.
Releasing code that works now, when everyone who has written it is around and changes have to be made is easy. What happens when all the knowledgeable people have moved on? Keeping the code so that each component is responsible for one task and has a set of tests that provide the requirements for that component is key. Future developers will thank you for it.
Enterprise solutions require scalability built in, single user systems less so. Picking appropriate technologies in each case is vital to allowing future growth.
Projects, at some point, come to an end. Being honest about progression allows the team as a whole to adapt and plan, bringing a successful conclusion.