Some web development projects don't turn out. The blame falls on both the web developer's and client's shoulders, though most developers will pine about the 'Worst Client Experience Ever'. It doesn't matter if the project is related to a full-time position or a one-time contract... things don't always work out. A combination of misunderstanding and miscommunication can ruin the best of working relationships, pushing back deadlines and frustrating both parties. There are two main causes for why this happens.
Web Development is New
Web Development is Abstract
Most other jobs create a physical service or good. When you pay a carpenter to install new cabinets, a plumber to fix a leak, or the kid down the street to mow your lawn you can observe the progress and final product. Web programming still results in a visible product, with front-end interfaces and content management, but it's more difficult for the client to see the work involved. For most clients, it doesn't matter if you plop Joomla or spend countless hours crafting your own content management system, as long as it works.
The success of a project is solely dependent on how the people involved deal with them. It's up to the developer to break things down for the client and guide the project smoothly. The client needs to push the developer for testable interfaces during the process and provide regular, honest feedback.
For example, if you were about to pay a contractor to build your new house, you'd want to be deeply involved in certain aspects. The contractor should have you involved during the major decisions, discussing them in terms you both could understand, but would handle most of the decisions and day-to-day work themselves. You would probably want regular checkups to make sure everything is going smoothly and discuss any changes or thoughts for the final product. If the house is several weeks from being finished and you decided to have both bathrooms upstairs, the contractor would have some choice words for you.
It's easy to maintain a healthy relationship. By laying out a plan, maintaining constant communication, and rolling out pieces rather than a single final product, a web developer can keep the project moving and the client involved. An important piece to keeping on schedule, which is where many projects tend to fall by, is to alert the client when their feedback will change the scope and affect the deadline. With an engaged client and an active developer, there's no reason why the relationship has to suck.