I've done a lot of fixed-price projects, and rarely had trouble making everybody happy. Here's how:<p>1. Break the project down into small, easily-estimated features, and estimate the time required for each. Most estimates should be a day or two.<p>2. Allow the customer to select those features which have the best return on investment.<p>3. Strongly encourage the customer to budget an extra 25% to 50% for unanticipated features. There will always be a few!<p>4. Allow the customer to add new features, or to cancel features you haven't started.<p>5. Work with high-quality clients who know enough about their business to make intelligent decisions. Then, focus hard on helping them earn money. This removes a <i>lot</i> of stress from the relationship.<p>This approach only works if you take pride in your work, if you know how to estimate, and if you don't mind occasionally spending an extra day or two on a feature that proved trickier than expected.<p>Fixed-price projects have two great advantages: They encourage clients to think about which features will earn them the most money, and they reward programmers for good time management. Hourly projects reward you for being a slower developer, and where's the fun in that?