Take the 2-minute tour ×
Programmers Stack Exchange is a question and answer site for professional programmers interested in conceptual questions about software development. It's 100% free, no registration required.

After developing a website for a client, I've realized that the load time is too extreme, and some changes need to be made. The extreme load times are attributed to the bloated css/js frameworks that I've been using. Much of the code that was included with these frameworks is not even being used and is slowing the site load time. My plan is to get rid of the css framework and just use a bare bones responsive css framework which is only like 1kb in size, and just add only the code needed. So my question is, should I charge the client for back-stepping and fixing this mistake?

share|improve this question
6  
This would depend almost entirely I think on the contract that you signed with the client. Was it a fixed price contract for a specific project? If so was there a clause that stated what kinds of bug fixes you would be responsible for? Was it a pure hourly contract? –  maple_shaft Jul 25 '12 at 15:46
1  
Did the client accept your first draft, or was this change prompted by them rejecting your deliverable? –  Daenyth Jul 25 '12 at 15:47
    
@maple_shaft I'm actually doing this for a family member so there really is no formal contract, just an hourly wage. Because I'm developing it for a family member, I feel obligated to give them the best performing website possible. –  MikeTheCoder Jul 25 '12 at 15:53
9  
@MikeTheCoder Doing business with family is always a recipe for disaster. If you draw up a contract then they resent you for not trusting them. If you charge them for additional work then they resent you for being so unreasonable. If you do the work anyway then you get taken advantage of then probably end up resenting them for it. Unless it is for charity you should never do development for family. Too much can go wrong, too much can be lost. –  maple_shaft Jul 25 '12 at 16:01
2  
@maple_shaft : Mixing Money and family can work - but the priority must be family, not money. For instance, lending money to family members - you may or may not get it back. Better to think of it a gift that is likely to be returned than a loan (just don't tell them!) –  mattnz Jul 25 '12 at 22:50

7 Answers 7

up vote 15 down vote accepted

In my opinion, and please don't take this as being a criticism of you - after all I have not a clue who you are, what this website is etc etc:

You can't charge for this and to highlight the work to your client, even charging with 100% discount runs the risk of making you look amateurish; and that's not what someone pays you for.

From the client's point of view, you are paid for your expertise and to make decisions that they wouldn't be able to make. Use of third party libraries should be done with suitability in mind - and a key element of that has to be performance (stress-testing can be done to a point in the lab). Therefore you have to take responsibility for not having chosen the correct technology.

Okay, if this is pre-existing technology, or a mandated technology (i.e. pre-chosen by the client, like the time I went to a company and they'd already spent tens of thousands on a couple of BizTalk licenses they didn't need, but wanted to use anyway to justify the cost. :'( ) then this might not be the case. I think the key is if it was your choice.

So I think you need to take it on the chin. If you can, just fix it without telling the client (avoiding the conversation), but if you need to you can probably tell them that you are doing it for free because of unforeseen problems with the library(ies) and that you 'won't be using those things again' yada yada.

share|improve this answer

You could but I wouldn't. Fix it and send a bill with the actual cost and with a 100% discount so the client can appreciate the value. You will keep a good professional relationship and reputation.

share|improve this answer
5  
Good idea about charging then giving discount, but if this responsibility is not explicitly stated of you in the contract then you are setting a dangerous precedent that most companies will viciously take advantage of. Before you know it, implied features will be bugs in their eyes and they will continue to keep coming back until you sever ties or build them a fully scalable ERP system. –  maple_shaft Jul 25 '12 at 15:51
    
@maple_shaft - the OP stated a very specific and solvable issue and to me he transpires as being willing to do the right thing. It is not a feature or bug, rather it is the proper usage of a css/js library. No one is asking to add features. –  Otávio Décio Jul 25 '12 at 15:52
5  
I disagree. Improved performance is a feature unless specific performance metrics exist as a requirement. –  maple_shaft Jul 25 '12 at 15:55
1  
Has to be very careful because what happens if he introduces a bug when he makes the change or a bug just happens to arise at the same time, you can argue all you like but it is a dangerous precedent and the client will blame your latest change. As maple_shaft says, peformance is a feature. –  G3D Jul 25 '12 at 16:20

If the choice of framework/libraries was entirely yours, you need to own that. Customers (especially family) don't want to pay you for the job twice. If there was a better way to do it and you missed that, as a professional you have the responsibility to do the right thing.

There are certain assumptions about the level of quality that the client expects from any job. For example, suppose you had a carpenter build a flight of stairs and because of warpage in the wood, the stairs are uneven. Since he was responsible for the wood, and stairs being level is a fair expectation, whether in writing or not, you would expect the carpenter to fix the problem and you wouldn't want to pay.

If your problem was that the app worked fine for 2000 users but not for 5000, that might be something you could argue based on contracted levels of load on the site. From your description it sounds like a single user would have problems, and that falls back on your development choice. I think you should just fix it and let them know you identified a performance problem and took care of it. That will build good will which could be way more valuable then the amount you would bill for the work.

share|improve this answer

It's better to have something you are proud of and can use to sell yourself in the future. You can offset your own additional costs in fixing the issue as an investment into your own learning.

share|improve this answer

Depends if you have a fixed-amount contract or an hourly contract.

If you have a fixed-amount contract then, no, typically you only modify or charge additional to fixed-amount contracts when the functionality requested is changed. Fixed amount contracts protect the developer against scope-creep at the expense of just such a problem you are describing, one where you end up having to do large refactors (that you won't be compensated for) so that your software meets the contract requirements.

If you have an hourly contract, then things become more muddled. Typically, the hourly rate that freelancers charge is in direct proportion to their knowledge and skill. I started out charging $50/hr when I was first freelancing and junior to the software world. I charge $95/hr now and that reflects that I'm a much better programmer and get things done generally in less time. (That ends up balancing the cost for the client) Because you didn't foresee the potential error in your approach, you need to spend more time. If I were billing hourly I wouldn't feel bad about billing the time you spend refactoring. It's part of the exploration that goes into non-fixed-rate development, and hopefully your rate reflects that kind of potential issue.

share|improve this answer
    
@MikeTheCoder - For family it depends greatly on your family dynamic, but in general hourly means hourly. If you get it done in half the expected time they won't pay extra. Most people want an hourly rate unless you run over estimate, then they want fixed price. If you want to take on all the risk and none of the surplus you can, but do it with your eyes open when you agree on terms. You might make an exception if you feel you made a mistake no one getting paid your rate should really ever make. Or as a business decision to placate a customer, at a price. Or for family. –  psr Jul 25 '12 at 16:58

As with most cases, it depends (relation, project, etc.).

If the customer wants the slow performance to be fixed, you can send a bill in my opinion. It's your fault the performance is this slow, true, but every developer makes mistakes and customers most of the time pay for it. They could have hired a big company with lots of (experienced?) developers who probably wouldn't have made this mistake, but the initial costs would have been much higher. Those devs would have made other mistakes and the customer would also have to suffer for that.

You've delivered a piece of software and they have probably agreed on it. Now they want it changed, well, that's a request for change, which will cost money. If you initially hadn't used these (bloated) frameworks, the job would have taken a lot more time/money.

If it's a fixed price project, it'll be a fixed in a new (minor) version. Depending on the contract, people can pay for upgrades.

In a different scenario/example, you've chosen a certain IoC/DI framework in your project. After a few months you discover it's performing very slow compared to a different framework. What would you do? I'd let the customer know that I can speed up the system by changing some internals of the system which will cost X dollar. They can decide if they want it or not.

In short: I'd say they have to pay for upgrades on the system, but it really depends on the situation.

share|improve this answer

I don't know as I'd classify this as a "mistake", unless the site is practically unusable due to the performance. Almost everybody has "post-implementation remorse" at some point, especially when working with new technology. Since it appears you have a good relationship with the client, I'd suggest just telling them "Hey, I had some ideas that might make the site work a little faster, would you mind if I tweaked it a bit?"

Unless there were stated or understood performance goals that you missed, you're perfectly entitled to charge for any improvements or enhancements. However, since you're getting the benefit of a hands-on learning experience with some new tools, I'd suggest a nominal "final adjustment" charge (say two hours worth). And in any further projects, be sure to have a "performance tuning" phase, so you'll have something definite to charge this kind of work to.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.