tl;dr: never surprise. Keep the communication going at all times, even if it's one-way. Deliver the agreed upon and hold them to their [financial] responsibilities. Never, ever work without a signed contract or billing authorization.

It's been my experience that clients come in many shapes and forms, levels of availability and interest along with disparate motivations to pay or not pay their bills. There's no one answer to client as they range from laid back and easy to completely schizo, but my practice has been to over-deliver in both the product and the project administration side. It doesn't always work out they way one would hope, but small improvements over time can lead to less project-related headaches in the future.

Scope is probably the most important part of freelancing. What am I building, how long do I have to build it and what are the assumed costs involved? Each of those items needs to be hashed out prior to the start of the project and the quicker you do that, the earlier the work starts.

Contract. Never start work without a contract. Not even with family. Without a legally binding, signed agreement, you surrender most of your rights, and work, to the client. Aside form the scoping of the project, which is usually unpaid, not a lick of work starts.

Milestones. Establish achievable milestones with the client prior to starting the work. If it's 80 hours of work, milestone what you can achieve at 30 and 60 hours and make sure the client is happy with the work being done and if not use the contract and scope to keep the work on track. Generally speaking, clients have no imagination and will only remember details or think of new shit once someone else has started the work. Much like a product manager. Treat them as such: yes you want that, but it's out of scope for this release; write a story and put it in the backlog.

Documentation. You need to document everything. Every email, phone call, tweet, design or requirement that the client sends you. Summarize all conversations you have with the client over the phone or in person, write them up in an email and ask the client to confirm your assumptions. It takes five minutes here and there, it's billable time and it keeps everyone honest.

Communication. Don't disappear off the radar and surface weeks later with a working prototype. Chances are requirements or timelines have changed and clients don't like to be ignored. Send daily updates until they tell you to stop, then send two during the week and one on Friday summarizing tasks accomplished. Ask for their input and approval as you need constant buy-in. Clients get excited in the early stages of a project but then get bored/confused and may decide they no longer need or want the work, becoming reluctant to participate or pay. Keep selling them the project every day.

Bill them on time. If you're on time with your code, then you should be on time with your billing and be firm about it. I use Freshbooks (http://www.freshbooks.com/) to keep the clients up to date with all of my tasks and hours and I know if they've looked at the current invoice or not. If they've already paid for most of the project and don't look at the final invoice, I don't worry too much. If they're in arrears and aren't looking at the invoice, chances are they have a pile of unopened bills on their desk. Negotiate this part diplomatically, but don't deliver anything until payment milestones have been achieved from the client.

Always be delivering. If the client has no/weak technical background, get ahead of them by under-promising and over-delivering. A client that can get ahead of you will [reluctantly] become your boss. A client who is always one or two steps behind you but awed by your production will want to be partner and that makes for a better client experience and future work.

Be human. Ignoring the agenda that they client may have in relation to the project, keep in mind that the client is human and will have fears, anxieties or misplaced excitement or expectations related to the outcome. In some cases, a client could be asking you to build them something that they think will eliminate their position. That's very scary to a lot of people. You'll need to get into their mindset to visualize what a success for them will look like and then strive towards that, reassuring them that together you're going to succeed. That's collaboration over contract negotiation.

On a small project you won't need to dedicate much time to these activities as long as you're able to consistently communicate a good attitude. On longer projects you might as well pretend you're a partner and lifelong friend as the client will often look for you for support. And then tere are some clients who are just jerks, but knowing that you're only going to be giving them 80 hours of your time will help assuage your heartburn.

I hope this rant helps you or anyone else reading it.