In my experience, the following principles seem to consistently produce good outcomes for both devs and customers alike:
Use all or some aspects of Agile development methodologies. One of the pillars is that the customer is involved in the planning process, and can thus immediately see the affect on the progress of the project, and the deliverables, when he changes his mind.
Use Design Patterns and generally accepted Good Design Principles.
My second points bears directly to the issue of code. There are many ways of solving problems. One is to bulldoze ahead and use ad hoc programming, dealing with bugs and design issues cropping up everywhere as you go along. Another one is to leverage other people's experience in the forms of design patterns and good design principles.
I used to use OOA/D and ad hoc programming. Code would work, but defect repair and adding new features would most of the time take a huge effort. I now realize that good OOA/D skills alone isn't enough. Without the aid of design patterns and good design principles, I would be much worse off (no, there's no kool-aid involved.)
In my experience, the following principles seem to consistently produce good outcomes for both devs and customers alike:
The first point mainly addresses issues at the project/team level. You can find more information on Agile at http://www.objectmentor.com/resources/articles/Agile_Methods_-_The_Bottom_Line.pdf
My second points bears directly to the issue of code. There are many ways of solving problems. One is to bulldoze ahead and use ad hoc programming, dealing with bugs and design issues cropping up everywhere as you go along. Another one is to leverage other people's experience in the forms of design patterns and good design principles.
I used to use OOA/D and ad hoc programming. Code would work, but defect repair and adding new features would most of the time take a huge effort. I now realize that good OOA/D skills alone isn't enough. Without the aid of design patterns and good design principles, I would be much worse off (no, there's no kool-aid involved.)
The Object Mentor website ( http://www.objectmentor.com/resources/publishedArticles.html ) is a great resource. The Wikipedia project has a lot of pretty good programming related topics ( http://en.wikipedia.org/wiki/Design_pattern_(computer_science) ). Good luck!