1.) Be picky with your clients. Clients typically fall into a few categories: easily impressed, too picky, or ignorant of the technology. The best clients to work with are those who have some sort of technology background, and have a FIRM vision in mind. In this way, you can build to the specs they want, and they can give you helpful, and valuable feedback. Clients who are too easily impressed will often give you ambiguous feedback that will never help you best finish the app or project. Clients who are too picky often cause a huge amount of unneeded stress and (in my experience) lead to rushed, un-polished work. Clients who are ignorant of the technology involved completely are VERY difficult to work with. For example, they may expect an Android version of an iOS app you built in a matter of days and for no extra cost since you are a “mobile” developer.
2.) Reuse code. Each project, there should be generic portions of the code that you could reuse between projects. For example, if you wrote a web services class for one project, you could probably use large portions of this web services class in a different project.
3.) Always ask for at least half the cost of the project up front. This gives you some confidence that the client will pay you for your time and work, and that they are serious about getting their project done.
4.) Keep communication consistent, but don’t allow clients to be obsessive. In my experience, daily contact is overkill. Freelancing is not necessarily a full time, everyday job. The client you are working for needs to realize this. They need to give you space to work. However, as a developer you are responsible for keeping the client up to date on what work you have done, and what amount of work is remaining. In previous projects, I have been poor at anticipating how busy I would be in the upcoming weeks and months, and have missed deadlines. So, I strongly suggest that you always expect to have half the time you think you will have in the next week, month, etc and communicate this clearly.
5.) Anticipate the worst. Always expect that the project will go awry. Spell out clearly in a contract initially what you are and what you are not responsible for. Make sure clients know small things like a potential for a 2 week approval process into the app store.