Lessons Learnt from Freelancing as a Coder
This is a guest post by Mansoor Adenwala. Mansoor is a blogger, corporate trainer, process advisor, and generally a solution-finder in the world of ICT. He currently works for Business Beam Pvt. Ltd in the capacity of Managing Advisor and is based in Islamabad, Pakistan.
Osama wrote about how he discovered there were 1173 freelancers on oDesk, which set off a pretty lively discussion on freelancing in Pakistan. I thought I’d add my two cents to the discussion, and maybe encourage some new people to join up the freelancing world.
I’ve been associated with Rentacoder.com for the last 5 years and done around 9 projects in this time. Though I’ve stopped earning through these means, its still a healthy backup to fall on incase there are ever hard times. I became a member of rentacoder in my university days, when lulls in study time were threatening to rust my coding skills. Also back then, I wanted to make some extra money and since my parents wouldn’t let me work in case my studies were affected, RAC it was. For the next year, I completed around 6 projects and had earned somewhere around $1200 (after paying all the requisite charges of the site and western union etc). Not bad as an extra pocket money. I also learned a couple of new things about both, myself and the coding world which shaped my career later on in life.
When you are freelancing, you really don’t know what you are getting yourself into. Initial thoughts are, its just another project, I’ll be able to do it without any problem. But its not. The first thing you learn is that earning money is not an easy task (the universal truth of adulthood). When you are doing university projects, the scope is largely defined by you. You can add features, remove features or even change them completely off your own and no one will complain much (except maybe a tough professor, but then who cares right?). When you freelance, you learn for the first time, requirements are important and its not as much fun when others are changing it!
Read onwards for more important lessons learnt
I remember this one project for live support system I did for an Indian company. The initial bid included a requirements document, for which I was supposed to code and deliver a standalone system. I won it and started working. A month down the road, they wanted it to be integrated with their original system. Still a month later, I was not only supposed to deliver it, but install and test it as well. That too, remotely! During these first six months that I worked on it, requirements kept changing, as the contact person kept changing, forcing me to rewrite large sections of the code. Eventually, after much delays, the system was finally ready as per their document and ready to be delivered. A senior person at their company came to test it and asks me ‘where is XXX feature?’. I replied ‘it wasn’t part of the original requirements hence not there’ to which they said ‘but that’s a standard feature! We want it!’. That ended my relationship with that company. I took the project in arbitration, won and claimed my money, but it didn’t leave a good taste in my mouth.The point here is, there are many challenges you learn freelancing that you wont when working in a software dev shop, especially those relating to handling a customer. In this case, scope creep took a 3 month project to 15 months, because at the time I wasn’t equipped to handle changes. However, my last project came in on-time because I had clearly communicated what I could deliver and when and set the scope and expectations as precisely as I could (I had even managed to get 5x times the original bid amount from the buyer because they realized later that changes were necessary and I charged them for each and every one of them). So as a freelancer, you learn how to manage requirements and your customer.
You also learn, on a fast track basis, how to estimate a project! Since you are the one whose reputation will be on the line here. While formal estimation was still way beyond my reach at those times, I ended up making a simplistic model, based on my experiences with past projects. For web design projects, I asked for 3 days per simple script, and 5-15 days for a complex one, which included time to code, test, bug fix, deliver UAT and sign off. So it became number of scripts x time for each script acc. to complexity. This worked very well for me but may not necessarily work for others. Another PM skill is task management or in formal terms ‘creating a work breakdown structure’. This is what you’ll deliver to the client to show them exactly how will you complete your project. Whether its followed or not is another story, for another day.
Yet another important skill learned through freelancing is expectations management! Your client will ask for a rock and expect the moon. If you want to succeed, you’ll learn to make them understand the difference and why, even though they’re asking for a rock, they actually want a mountain but not the moon (and if your suave enough, increase the bid amount to charge them for maybe a mountain range in the process). If i’m sounding confusing here, then you may want to read up on expectation management.
But the most important lesson which I learned as a freelancer, was knowing myself and my capabilities better. To give a little background, I was a pretty decent coder back in the day, and for years thought that my future career would be in front of a computer, writing innovative code to change the world because that’s what software engineers do. After doing four projects, I realized almost all software development is very different from what you do at university, is essentially all the same and gets less challenging with each successive project. This just wasn’t my cup of tea. I also learned that bidding on a project, engaging the prospective client in discussion, negotiating what I could and could not deliver, and winning the bid was, for me at least, more satisfying that coding and delivering the final product. Sure, coding is fun when your doing something innovative and creative but not as much as getting the project. I’m writing about this here to let you guys know, freelancing can bring out latent but amazing abilities in you and allow you to understand yourself better.
I’ll stop here, since this is a blog post, but believe me when I say, I haven’t even scratched the surface of how those years helped me out. Give it a try, you never know what new skills you might discover in the process. Because as they say, necessity is the mother of invention, and only when there is an immediate need for a certain skill, will you be able to learn it.

2:54 am
I m loving it Mansoor Bhai!
7:14 pm
thanks ali raza
11:50 pm
Mansoor,
Thank you for sharing the experience. This is very common in projects either you do freelance work or you are a big vendor providing solution to the customer; they will always keep on changing the scope. A project change request process should be a part of the initial contract and should be adhere to strict (a project manager responsibility!!). Even if a feature that you can do for free, a change request with 0$ should be raised as it maybe have impact on the project time, scope and cost.
In reality its very hard to negotiate a good contract as the people on the other side know this as well that they will miss out on things and hence they want to squeeze you as much as possible. Worst is when you have to do things like Integration testing or SIT on external system which are not ready and then the project drags forever.
My two cents .
/Majid
12:51 pm
Dear Mansoor;
An impressive post, i hope I will handle to manage and utilize heat in myself which I am feeling after reading it.
And I think a successful freelancer can become a successful entrepreneur. Because while doing projects for small term of different nature one can think a strong story for him. I think for if the work in office didn’t give you excitement then one should go for free lancing to check himself how smart he is. And how batter he can sell his code.
2:50 pm
majid: that is definitely the case, and while in a company setting, a project manager or the customer facing person comes under heat, in freelancing, you have to manage that as well as take time out to code. so its an all around skillset that you develop.
tahir: take the step and get into freelancing man! its fun and at the end of the day, the money is ALL yours
12:14 am
Asslam O Alikum!
First of all, I like to appreciate your efforts of GreenWhite.org site. I start reading GreenWhite.org blogs from last two weeks. The site has good content and information for entrepreneurs. Again, I appreciate you.
I have one question, Can you please advice me tips & tricks for time & cost estimation of a project…
–| AimsLifeâ„¢ |–
10:29 am
wow..well written!!!
I could certainly take a leaf or two out of your book of experience in the world of freelancing!!!
Thanks for the insight into a journey that :looks: so simple..but really is SO complicated!!
9:44 am
Mansoor,
Good post! And being a freelancer myself, I know exactly what you’re talking about. Working with buyers is not always easy, as you described, but it is the job of the coder to make sure of all these things before embarking on a project – especially a big one.
As for me, I guess I am a bit different in the sense that coding is the way to go for me. For me, there’s nothing better than to keep challenging yourself with new problems and finding their solutions.