Welcome to WebmasterWorld Guest from 188.8.131.52
I have a very good client that is constantly adding new functionality to their web site. The programming is all built with .NET on a MS SQL server back-end. It is all customized reports and database applications. This group knows what functionality they want, but have no technical understanding of what it takes to build it or what it should cost, time it takes, etc.
When they propose a new project I send them an email that outlines the exact functionality it needs to include and ask them to look it over and make corrections. Once we have agreed on the exact functionality I quote them a price. They almost always approve it and we get started on the work. So far so good.
The problem comes in when they suddenly realize that they want/need this or that type of additional functionality and as a usual thing just casually toss it in an email. I know they aren't trying to pull a fast one, they just don't understand that what they perceive as a simple add on actually takes a lot time and additional programming.
Sometimes if it isn't over the top I will just do it and not change the price. However sometimes I have to tell them this is outside the scope and it will cost $X to add it, which they again almost always approve. They love the work, but on some projects we have had to charge them 4-5 times for out of scope work. They get frustrated because they don't understand why it keeps going out of scope for what they perceive as small changes.
On the most recent project they asked me to "build in" padding to cover these changes. I explained I have no way to building in padding for changes that I have no idea what they might be or how extensive.
I need some advice on how to handle clients like this as I want to keep them happy, but I can't keep doing projects the way we are doing them or both us will keep getting frustrated.
Trying to think of an example...
Okay, let's say you write a letter and drop it off at the post office for delivery. You get home and realize you put the wrong address ("123 Main Street" instead of "321 Main Street"). So you go back to the post office and ask the clerk to get your letter so you can change the address. It's such a simple request and you can't understand why the clerk refuses to do it. So then you call the post office in the city where the letter is being delivered and ask them to change the address when they get the letter. You can't understand why the guy hung up on you- it's just a little change!
Sometimes the best way to try to explain it is that the "little" functionality can not just be added on- the entire code must be entirely rewritten to account for the change. (But they most likely won't understand that either.)
Sometimes if it isn't over the top I will just do it and not change the price.
This is my (and your) first mistake. Learn to stop it now - OR - make it overly, abundantly CLEAR what this is costing you in terms of time and money and that they are getting a FREEBIE. Put it in your invoices: "added X feature (.5 hrs) no charge." Constantly making them aware of this helps.
However sometimes I have to tell them this is outside the scope and it will cost $X to add it....they get frustrated because they don't understand why it keeps going out of scope for what they perceive as small changes.
And, what's worse, they don't want to take the time to read through your extended explanation - which ALSO sucks more of your valuable time that you can't bill for. I don't have a great answer for this one, but what I do is write out a full explanation, kick myself in the arse because I know they won't understand it, and condense, condense, condense.
However, with a running history, you can look at past examples:
"Remember the mailing list function you asked for? When complete, that was X hours, 3500 lines of code, a cron job to run the mailings, and two new database tables. It only looks simple because I program it to look simple, what goes on in the programming is very complex. This is similar."
Part of it is salesmanship, I suppose.
The other part is to separate emotions and impressions from the equation. Your client is a nice guy. When you chat, you talk about sports scores, kids, family, it's almost like you're buddies. But the truth of truths, it's all about the money and even the nicest client will take whatever they can get for free. So it's not your job to cure them of their ignorance of what you do. Don't make it your job, charge for your time, if they can find someone else to do it for less, LET THEM.
Don't worry, they won't, they know what they have in your court and humans fear the unknown most of all.
So you go back to the post office and ask the clerk to get your letter so you can change the address.
I think I am going to try this with all of those Christmas cards I just dropped in the mail :) Seriously, this is a good suggestion. I just have to come up with an example that works in their industry, which might be hard for me to do.
Put it in your invoices: "added X feature (.5 hrs) no charge."
This is a great suggestion. I have heard this before, but I am not the best at remembering to actually do it. I will have to get better at that, especially with this client.
You need to look at your requirements engineering, and pricing processes and make them more agile. It sounds like ypou jump too quickly from requirements to implementation without doing scoping and boundary properly, or maybe not seeing the actual business value in the solution - if you see this you will pre-emp the changes to spec
Have a look at this
If you are doing big projects then it wont work maybe something like Prince2 will help instead.
Personally I dont charge for any enhancements, everything is included for a fixed fee.
I do this as well. Once the project is fleshed out I offer a quote and stick to it unless the scope changes, which is the problem here.
It sounds like ypou jump too quickly from requirements to implementation without doing scoping and boundary properly
I am not sure how I could do this differently. First, these aren't huge projects. We are talking in 2-5K range. Second, we scope it out in detail and have a lot of conversations about how it should work. However once actual implementation starts they begin using it and seeing enhancements and changes they want, but if you asked them if they knew about this before they would say no. This client is simply not sophisticated enough to see farther than the initial scope. I may be missing something in your comment, but outside of the suggestions above I am not sure what I can do differently in this case.
Obviously you can't foresee in advance how much work you might need for unforeseen changes ;) but you can build in 'x' hours of extra work. Just make a guess. Explain to them that you're including a buffer for 5 days extra work (or whatever) as they've requested, but if changes go over that then they'll need to sign a change request.
Sounds to me like they just don't want to be bothered with a bunch of small change requests / purchase orders / separate invoices or whatever - which is fair enough - so why not sell them a bundle of hours in advance? - if that's what they want.