The first thing that people often butt heads about is compensation.
Programmers: Although each project is different and prices will vary, you should have an idea of about how much you should be making per hour and about how many hours a project will take you to do. Try to provide a detailed estimate up front, so there is no surprises for the customer. If you're doing something new and learning as you go, be sure you aren't charging for your learning curve.
Clients: Expect to pay about $75/hour for good programming work. Some people will be slightly less because they are establishing a portfolio or are giving you a friends & family discount... others will charge more than this because they may be busy with lots of other work and feel their time is worth more. Seventy five is a good number to keep in your head when doing an estimate to see how much website you can afford. If you think it will take a week to complete your project and two people will be working on it then 2 * 40 (hours) * $75 = $6000. Obviously the time required for different projects can vary greatly. If the price is out of your ballpark, try starting with a scaled down version of the website and expanding on it as you get funds.
Once you work out the details of compensation it's time to get down to creating the website, program, or script.
Programmers: Remember that we programmers sometimes speak a different language than normal people. When you are describing what you need from a client, try to break it down into non technical terms. What I personally do is to try to imagine I am explaining how to do something, or what to send me, to my mother. Mom is intelligent, but doesn't know much about computers. If I think what I say my mom could understand, then I know that any of my clients could also understand it. You can usually tell form a single conversation how comfortable a client is with computers.
Clients: Remember that a programmer or web developer isn't a copywriter. You are still responsible for providing them with the written content for web pages. They create the page, but you provide what it says. Also remember that the programmer understands programming. They can collect data, store your data, process your data, make pretty charts from your data.... but you have to tell them what that data will be. Let's say (for example) you wanted to collect information about your customers. Well you have to tell your programmer that you want to collect their name, their favorite color, their birthdate, and their favorite type of potato chip. You can't just say "Let's collect data!" because that just doesn't cut it. Be ready to be specific.
Keeping a realistic timeline.
Programmers: When I am giving a time frame for a project, I like to estimate long. Nobody is ever annoyed that their project is done before you said it would be... but they can get very annoyed if you don't get it done on time. Even though some projects seem easy, it is inevitable that you will sometimes hit snags. Whether it's a stubborn bit of code that takes longer than you expect, or a flash flood that takes your internet out for two days, things happen. Don't make unrealistic predictions about how quickly you can complete a project.
Clients: Often times we need information from you before we can do our job. If you want us to meet our deadlines, you have to do your part and get information we request to us in a timely manner. If you take three days to get us something, then expect to add those days on to the end of the project. Try to have as much information as you can ready to go before you even contact the programmer. Trust me when I say you can never be too specific. The more you tell us, the less time we have to spend asking for (and waiting for) stuff later on, and the quicker your project will go.
Both: Communication is one of those tuff things to write about. Sometimes you just 'click' and understand each other... its only when this doesn't happen that it becomes an issue.
As a computer-nerd person, with limited people skills...I love e-mail. I would much rather get e-mails from clients than any other form of communication. I can refer back to an email, double check everything is done, and archive it when it is. I can express my thoughts in a thought out way, giving care to explain everything in easy to understand terms, and making sure that what I say is clear and to the point.
I love e-mail...but not all clients do, some would much rather make phone calls and visits. I think both clients and programmers need to be flexible on this issue. I think the best we can hope for is to find a compromise. All I can say is, good luck!