I've been up and down this ramp hundreds of times over the years. I don't have straight answers, but I have some insights:
We just agreed on an estimate of hrs and a rate to develop a finished component.
See, this confuses me. Was the
written agreement for a transaction at an hourly rate or was it a project fee? If it were a flat project fee, I'd have no recourse to b***h and complain about how many hours it took, or how many more it's taking. UNLESS . . . . .
Specifics about what would be considered billable hrs where not discussed.
BANG. Bad, bad, bad, for both parties. The proposal should clarify what IS and what is not "beyond project scope and billable at an hourly rate," and define the project functions and tasks entirely. If these weren't present and clear to you, you should have asked for a rewrite.
Even if it's hourly, if I'm taking longer than what I expected, it's on me. Learn for next time: estimate what you think it will take, then triple it. Seriously. Double it never works out, triple might break even.
But this is now complicated by this:
I fully understand that reworks due to changes i instigate would be billable...
My proposals always stated clearly how much is changeable. Reformatting output of a layout, for example, should be part of the game. Adding functionality is something else entirely, and it means one thing: stop the project now and rewrite the proposal. Which leads us to . . . .
i question billing the client for hunting down programming mistakes during development.
Bugs do not always equate to "mistakes in programming." Look at an example: write me a CMS to edit five pages." So we do that, it works. "Oh if you could add one thing: I want to be able to upload pictures." The picture uploads are one project, the page edits are another. Getting them to integrate may produce
bugs. Would you have me scrap the project, and start over
knowing we'll be doing picture uploads? Because if you did, I'd have done the CMS part in a completely different way, rather than "patching" the uploads onto something else that was never intended to do uploads.
Is this making sense to you now? Many see the web as as series of drop-in elements that can be collected by observation: "take that effect from this web site, add this other thingy from another web site, integrate this do-hickey into it all, and as you can see what I want is really quite simple."
(Often finished by "should be easy for someone who knows what they're doing." :-) ) Often there are conflicts between the widgets and programming across areas of server side programming, Javascript, and CSS, and what do we call these conflicts that we need to resolve?
Bugs.
An opinion, it sounds like the proposal was too loose, which allowed you the room to modify the agreement on the fly, and now both sides are getting frustrated with what's shaking down. Put the brakes on everything and communicate, and take what is learned to the next project.
[edited by: rocknbil at 6:00 pm (utc) on Apr 25, 2012]