Managing Expectations - Keeping Clients Happy

Rules to Follow
Communicate clearly and often
As web developers we provide a service to our clients, and similar to many different types of relationships, communication is key. Because we are stewards of our clients funds, it is of utmost important the client is kept aware of progress, items blocking progress, and any other issues that may impact the product/service they are paying for. In my experience, timely responses to all communication (even if the news is not positive) is the best way to keep small issues from snowballing into a situation where both parties are frustrated, unhappy, and ultimately dissatisfied with the finished product.
Be patient
Not all clients are available to answer your questions immediately or answer them to your ideal level of satisfaction - that is okay. Respect a client’s time and involvement level, if they are perpetually slow/incomplete with their responses, let them know the successful completion of the project hinges on additional information from their side and you are unable to continue until additional information/clarification is provided.
With busy clients (or those who are perpetually slow to respond), I have found the best way to get the answers/information needed is to give the client a list of options to choose from, or provide a solution in which they simply have to agree/disagree. Avoid open ended requests where they may have to spend a lot of time offering feedback (obviously this won’t work well for things like server credentials).
Before the project begins set clearly defined goals that outline what deliverables/action items the client will be responsible for and what you will be responsible for
Going back to point number 2 (be patient), if a client is slow to respond or provides incomplete information, it is important to make sure they know any delays with the project at this point are a result of their inaction.
In order for both parties to be happy (we should enjoy working for our clients in the same way they should enjoy utilizing our services!) the project should be clearly defined with items delineated which clearly mention what the developer is responsible for, what the client is responsible for, and what happens if there is a delay on either side.
Communication is also something I have found that is often overlooked when budgeting for time. For example, if it takes 1 hour of phone calls to plan a project that takes 1 hour to develop, then that is a 2 hour project. In order to prevent confusion/misunderstandings, I have found it is also helpful to explicitly mention things the client may assume will be included in the scope but are more than likely not (setting up an analytics profile with goal completions on a website build project for example).
Be available
Clients are rarely on the same schedule as you, period. Make yourself available to communicate with them. Don’t take on a client if availability may be an issue (remember the importance of communication), make sure both you and your client are aware of each others time zones and working hours — no one likes a 4am call to discuss button colors!
Recognize when you are being taken advantage of and take steps to mitigate it
This one is much more difficult to discuss. Sometimes client’s don’t realize the complexity of their requests, I have found that if you encounter this issue, it can be helpful to briefly give them an overview of why the request is complex, and give them a brief breakdown of all the various intermediate tasks that must be accomplished in order to execute their request successfully and to their satisfaction.
Occasionally, you may also encounter a client who is looking for the absolute lowest priced service possible, there is not anything wrong with that. It is up to you to know your worth and simply pass on the opportunity if you are unable to accept the rate/price offered. It doesn’t help either party to waste time or spend unnecessary effort to justify your cost when the overall budget or ideologies don’t align.
Be honest & upfront
This one is straightforward! Do not mislead a client, if you encounter an issue that could impact the overall delivery time, let the client know right away. Did the client ask about progress? Let them know, even if things may be derailed at the moment.
Don’t overcomplicate concepts unless the client is curious
More often than not clients (or most people in general!) don’t enjoy being preached at with multitudes of technobabble. Break down any concepts into simple terms, if the client is curious - then go into more detail. Remember a client’s time is valuable and we have to respect that in all our communications with them.
Don’t be afraid to ask the client for clarification
Often times as a project progresses, new issues may arise that require further clarification. Hopefully these are kept to a minimum because everything was laid out in the planning stage. In the event an unforeseen item arises, instead of guessing on larger conceptual questions (which may result in the client being confused/frustrated why an action was done a particular way), ask the client for clarification or approval. This doesn’t mean ask them if they prefer 10px of padding or 15px of padding on a button, remember time is valuable and should be spent wisely.
Acknowledge mistakes when on your end accept mistakes on clients end (within reason)
Everyone makes mistakes, own up to yours. Similar to “be honest,” talking around issues or misleading the client does not do either side any favors. Acknowledge your mistakes in order to come up with a plan to address and fix them quicker.
Clients make mistakes as well, be accepting of that. Don’t get frustrated or discouraged, work with the client to come up with a solution — maybe that solution is outside of the original scope of the project, no problem — communicate with the client possible solutions and options so both parties can agree on the best solution.
Don’t work outside of the original scope unless you have discussed it with the client
Let’s say you have a client with a simple project, you complete the project but notice something you can dramatically improve with a quick adjustment — resist the urge! Always discuss with the client any additional changes you make (even if there is no extra charge!) things may have been done a way for a particular reason we are unaware of, and extra work reverting what you may have done is never enjoyable (or profitable)!
There you have it! These are ten rules/bits of advice I have learned over my years working with clients across a variety of industries, budgets, and technical knowledge. I hope this improves your professional relationships with your clients. Happy coding!