36

This question already has an answer here:

I'm working on some bug fixes on web project for a client/friend. He has everything set up and working, but called me to fix a handful of bugs.

I've never used his system, I barely know how it runs, how it's organized etc and how everything works together. I'm going to need some time to understand this.

All this has to be paid for by him, generally how much time should be expected to understand his system? Is it uncommon to bill him for say a day or two if all I'm doing is understanding his system?

marked as duplicate by gnat, Thomas Owens, scaaahu, yochannah, IDrinkandIKnowThings May 19 '15 at 21:50

This question has been asked before and already has an answer. If those answers do not fully address your question, please ask a new question.

migrated from programmers.stackexchange.com May 18 '15 at 12:37

This question came from our site for professionals, academics, and students working within the systems development life cycle.

  • 6
    @Ewan I disagree tbh. I have worked at a blue chip where I was given 2 months to understand their system. There is so many variables to consider. However, you are right to say that OP needs to charge for his time. – ham-sandwich May 18 '15 at 11:57
  • 5
    "how much time should be expected to understand his system" - do you really expect the community here to give you an answer about a system unknown to them? It could be anything between an hour or a lifetime. – Doc Brown May 18 '15 at 12:09
  • 2
    You can (Should?) bill for everything the client is willing to pay for. Though it might be better to hide your "time spent learning how to program" inside something that looks better in the eyes of a paying customer... – AK_ May 18 '15 at 12:18
  • 7
    @Yannis I would say there is a slight, but important, difference. The linked question is asking about time to learn certain generic technologies (like a coding language), whereas this question is asking about time to learn how to use a client-specific system. The former should not always be charged for, but the latter most certainly should be charged for. – David K May 18 '15 at 12:54
  • 3
    @TheWanderingDevManager Probably someone who, like me, had no idea that there was a freelancing SE. – reirab May 18 '15 at 20:41
68

If it costs time, it costs money. The client should provide all the information needed to get started, including documentation of their system if it exists. From experience, it doesn't usually.

There are a number of variables here that both the client and the programmer need to take into account, although this list isn't exhaustive:

  • Quality of the code base (inc source code comments)
  • The size of the system
  • Test Cases covered

However, if it is only small bug fixes, you shouldn't need to learn the system. I would discuss the complexity of using unfamiliar systems and explain that you would need to time to investigate and debug the code that you would need to charge for. Your friend, who is in the business of managing a website, should definitely understand this.

  • Yeah, you're right. There isn't really too much to understand. This is the first project I've worked on freelancing. Had to do it, or end up homeless. Anyway, I sort of feared it would be some huge system. It is, but there's only one repo I need to work on and I've pretty much found where a few of the bugs are happening. Thank you for your reply :) – Torra May 18 '15 at 12:16
  • 7
    If there are source code comments, the next question is - are they up-to-date with the code itself? The only way to really know is to analyze it. This is why few/no comments (but great naming and well-crafted code) may be preferable. – Michael Durrant May 18 '15 at 12:26
  • @MichaelDurrant Good point! Thank you for your contribution. – ham-sandwich May 18 '15 at 13:10
  • 3
    `if it is only small bug fixes, you shouldn't need to learn the system. "shouldn't need to" means "will not have to if the system is well written," not "will not have to." There are many instances where small bug fixes requiring understanding significant parts of the system. If ham-sandwich agrees and modifies the answer I'll upvote, since the rest of the answer is excellent. – Gordon Gustafson May 19 '15 at 2:28
  • 2
    @MichaelDurrant: This is why I prefer detailed commit messages to comments - you know the context of when they're added in the sequence of changes. – R.. May 19 '15 at 2:42
33

All this has to be paid for by him, generally how much time should be expected to understand his system? Is it uncommon to bill him for say a day or two if all I'm doing is understanding his system?

In order to fix the bugs, you need to understand the system. (Or at least you should understand the system.) In order to understand the system, you need to spend time. You deserve compensation for that time.

You need to carefully craft your estimate/contract so that both you and the client understand these assumptions, and come to a mutual agreement on the compensation.

You need to do this before you start working.

  • 3
    Potential caveat: not if you could be reasonably expected to be familiar with the system (because it's so common, whatever). e.g. You call the computer repair guy to sort out some flashy-cursor malware issues; you don't expect to be billed for his time becoming accustomed to your OS. – OJFord May 18 '15 at 15:50
  • @OllieFord The system isn't common. It's bespoke. 2 of the systems use a framework, which has made it easier, but the main one is a bespoke system and pretty large - and not a very well developed one at that. – Torra May 20 '15 at 9:50
11

I don't see this anywhere but in comments, so I'll flesh it out:

You should bill for time understanding his specific system. The installation, how the applications interact, etc.; things that are specific to his company or project.

You shouldn't bill time for learning general things - like, say, how to program in C#.NET - unless it's discussed ahead of time. Things that you would normally be expected to know before being selected for the project, for example.

Since you say it's a friend, you might reasonably undertake to do something that's a bit outside of your normal skillset to help a friend out; I would consider then what things the average developer would know in order to be qualified to be hired for the position, and either make it clear to him that you're going to be spending time (and billing time) to learn new protocols or languages, or that you decide to consider it a learning opportunity and not charge for it.

  • I took the job because I am competent with the given languages. That side of things there's no issue. But to be given a lump of bespoke code, with no documentation, or code comments, and asked to "figure it out" is really the challenge. I'm making moves though, much of the code has been documented and I'm understanding it much more than I did yesterday. – Torra May 20 '15 at 9:52
  • @Torra - One I have been given far to many times myself. I feel your pain. And too often its a dead language that I never put on my resume to avoid getting tasks like this. – IDrinkandIKnowThings May 21 '15 at 21:57
3

So in my experience there are two parts to this:

  1. Spend some time with the client, allowing him to take you through the bugs, taking as many notes as you can (steps to reproduce, functional areas etc). This could be charged, but I'd maybe give this as a freebie.
  2. Investigation time. Agree a set time (say a few hours/half day) paid, that you use to investigate the issues. From this you can get a handle on how much KT/further investigation you need, so can prepare a real costing for rest of the work. You could (if practical) fix small issues whilst doing this if it's obvious which will show you aren't just charging time for the sake of it.

You probably won't need full KT for bug fixing (new work may be different), but don't be afraid to pad estimates for risk, unknowns, lack of tests etc, the cost is likely to be much higher to both of you if you get it wrong.

  • Like @JoeStrazzere's answer alludes to, this emphasizes the need for establishing a good working relationship with the client. – mskfisher May 18 '15 at 13:43
2

The answer is "yes", but how you charge that time is a more complicated question.

If you're charging them by the hour already, the simplest solution is to include the hours needed to familiarize yourself with the system. Be upfront about this, and ask them for any documentation or help they can provide to make this part go more quickly. Set up a schedule with your friend, with the understanding that everything on the schedule will be billed. Document this as well - especially if you're going to be reporting it on your tax return for this year.

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