I've been consulting for 12 years in a variety of business settings including Manufacturing, Finance, Education, and Health Care.
Experience has shown that careful initial analysis is critical to success, particularly with the client who has not previously been involved with custom software development. I believe in a phased approached to writing software. This means careful listening to a client's requirements to understand their view of the job at hand while asking the questions that will prompt a deeper understanding and identify potential problem areas in advance.
The use of form and report mock-ups helps the client to visualize the overall system reducing the need for costly re-writing of code. As the process continues the project moves from a generalized description to a details fully functioning system.