Every new project starts with a planning. Or it should. And the future of the new venture depends on how much efforts you put at this stage, depends on how are you picky to details and are you able to think forward.
As you contact with a customer, you get his vision of the final product he awaits to get done. But a threat, for my mind, is that your client (at 90% of cases) has no experience with web and he names you just his feeling, not the guide for action. Well, may I say that it’s the same as explain a painter how he is to paint – the idea is clear, but there are so many pictures you get as many artists will work.
Long story short, my conclusion – a customer doesn’t know what he wants. Just after getting an ‘alive’ prototype of the project (which he can try at action) your customer understands what exactly he had needed before )). So the client asks you to remove this part and add that one, then replace those places and do over a little bit more.. The more you work on the project, the more amends you get, the more these changes look as endless process.
Working this way is able to destroy your venture, because every project has timescales and costs.
I see the only one chance to avoid the situation as above – writing the documentation. That’s a must. Although everything is discussed verbally, although it takes time – well, I do prefer to spend some my time before start to code then spend a lot of time to do over. At the perfect life you have to code after being agreed with your customer about the documentation (that means: additional improvements – additional money are involved).
The next snare touches on the lifecycle of a project, it has the start – and it has the end. You can’t add new functionality nonstop and try to build something perfect in all respects. You should go live with what you have according to the documentation; then – re-factoring of the source code and new documentation. And the next version of the product.
The well organized development cycle contains:
– Functional Design
– Technical Design
– Quality Assurance & Testing
(Well, for simple projects Functional Design, Coding and Testing are enough.)
In conclusion of my story let me say a couple of words about testing. That’s the necessary stage for any product, but if for small and simple projects you (a developer) can do it yourself, for big projects with the business logic it doesn’t work. May be sometimes such solution is not evident, but you can’t expect the great results at testing from the same person who wrote the code. Professional testers use special methodology and test technology to deliver you the best results.. and that’s the separate occupation.
See also ‘Being a Team Player’