Some programmers are surprised when I explain that I always charge by the project and never hourly. There are many reasons why I think project based fees are superior to hourly fees, but I want to focus a bit on the psychology of it.
When I quote a fixed fee for a project, I am subtly telling my customer the following:
I understand that each project has a certain value to you, be it in potential increased revenues or in decreased operational costs. If I charge more than that value, the project is no longer worth it the cost and will become a net loss for your business. I care about your business and I want you to be successful. Also I trust you to not demand a bunch of changes without additional compensation. I'm an experienced professional, and I'm confident in my ability to correctly estimate the effort involved for this project. My service is to provide you a software solution to your business problem.
If I were to charge by the hour, I would be subtly telling my customer this:
The time I put into building your software is more important to me than the value it provides to you. I don't trust you. I fear you will change your mind in the middle of the project and expect me to change everything for free. Also I don't feel confident in my estimates, and I think YOU should assume the risk for that lack of confidence. I provide programming services, not business solutions.
What message do you think these pricing models send to a customer?