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.

I recently got into home-based hours-based programming work and one of the problems I am having is that deadlines I say to my clients are not often met. Some factors come into play:

  1. I run into a coding problem that requires research time, which adds a couple of time to my specified deadline.
  2. There are times when my internet is down for half a day or even a whole day.
  3. There are some inquiries left unanswered (via email)

and many other factors. I was wondering how I can specify deadlines which will take into consideration any unexpected factors that might delay it or something like that, which of course, will not put a frown into my clients' face, hehe.

By the way, a client asked me to develop a site from scratch using Django in which I have not much experience of. He knew that and he consented to me doing some research while in development. I said I would finish the project in about 3 weeks yet I did not expect Django to be such a massive nerve-wracking framework, my internet was down during some days, and I only worked less than 10 hours on the holy week.

Thanks in advance!

share|improve this question

3 Answers 3

Generally speaking you have two choices (and can take an intermediate position between them.)

One is to accept a "hard" deadline. If you do this I would always add a very large fudge factor. Unless the job is simple and you have done something almost exactly like it before you should estimate at least 3x what you think it should take, at first, if the deadline must be met. Maybe more. As you gain experience you might find that you can drop that a bit but the fudge factor should always be there. If you do this you will have to be quite rigid about not accepting changes without extending the deadline.

Another option is to be very honest with your client. The truth is that software estimates are very difficult to make accurately. So you can simply say "I believe it will be X days before this is done. But I could be wrong. It might take significantly longer than that. And if you want changes as the work goes on it will make the whole thing take longer." Then you can work with them in terms of schedule. Even then you should apply a fudge factor but it can be smaller, since you have not absolutely promised to finish by a certain date.

I'd also say that having your internet down/computer problems/etc. is not a very good excuse in most cases. You are a professional, so you are responsible for making sure you have internet access, and making sure you have a backup plan (I've done client work on a laptop at an internet cafe before, and I remember once seeing a developer pay someone $200.00 USD to use their internet connection overnight in order to respond to a client emergency when they were too far from home to get back in a timely enough manner.)

I've done some very rush jobs, with hard deadlines in the past. I always charged a lot for it because it often meant days with little to no sleep. That can be lucrative, but it's not something I want to do very much, so when I freelance I tend to be generous with my time estimates, and leave myself some leeway. If I lose a job I lose a job- that is better than failing to keep an impossible promise.

share|improve this answer

I was wondering how I can specify deadlines which will take into consideration any unexpected factors that might delay it or something like that, which of course, will not put a frown into my clients' face

Yes. You must actually predict the unknowable future with limited information.

If you find you cannot accurately predict the actual future with limited information, you cannot make deadlines.

I run into a coding problem that requires research time,

This is a logical consequence of doing something new.

If you want to avoid doing things which are new, stop building software and only sell proven, downloadable solutions for which all the "new" work has already been done by someone else.

Most of us cannot predict the future. So we make "estimates" and we make "changes" to those estimates.

Also, some of us use Agile methods and build the most important parts first.

share|improve this answer

I said I would finish the project in about 3 weeks yet I did not expect Django to be such a massive nerve-wracking framework, my internet was down during some days, and I only worked less than 10 hours on the holy week.

It seems that you're biting off more than you can chew. Even though the client may have agreed, you must be able to know what you're capable of and say no when you cannot do it.

As for the other problems that are causing delays, you can only prevent what you can control. If your internet keeps going down either switch to a more reliable ISP or there will be a lot of uncertainty to your estimates. And as responding to emails with unanswered inquiries, you need to work on communicating the requirements and specs better with your clients if you are losing too much time to e-mails.

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.