Sunday, May 25, 2014

A beginner's Guide to Start Freelance Software Development

It's been a year since I started freelancing as a software developer. I opened my Freelancer.com account in March 2013 and got my first job in April 2013. In last one year, I've completed more than 40 projects. Most of them were small Android or Java apps - but it was enough for me to pay the bills and also make some savings.

So why freelance, instead of doing a job? I'm a student, so a full-time job wasn't an option to me. I can't do internship because almost no software company in Bangladesh offers it. I worked as a part-time developer in a company, but the salary was too low there. So I decided to leave that job and start as a freelancer. That decision was proved to be right very soon. I started making more than twice money than I've expected. And it's more than just money - I got a chance to develop my communication skills, made connections, got more control over what to do and when to do. Of course there are some downsides - now I need to spend a significant amount of time in bidding on projects or communicating with my clients, and some clients are not easy to deal with - they give very vague requirements and demand changing things after they've been developed, but still the benefits outweigh these issues.

When my friends heard I've started freelancing, many of them asked me how they can start freelancing, too. So I've decided to write this post based on my short (but successful, I think) experience as a freelancer. This is mainly for students who want to earn some extra money besides their regular course of study, but it will be also useful for you if you want to do freelancing full-time.

I know, many of you have already tried to start freelancing. You've opened accounts in one or two freelancing sites, got scared after browsing the projects. Maybe you've placed bid on some projects if you're brave enough, but then you gave up. What is the problem? Is it really so difficult? Maybe not - here are three possible reasons why you didn't succeed:

1. You don't have skills

Seriously? I'm the best coder in my class. I got A+ in all my programming courses. I've done well in various programming contests. And you are telling me that I don't have skills?

Yeah, dude. You might have successfully completed your term project on Java, but you don't know how to modularize and document your code. So after one month when you decide to make some changes, it all looks cryptic and you find yourself spending a night just to decipher it. You might know how to code a Hash Table in Java, but you might not know Java has HashMap or HashSet built in, so you might waste an hour coding it by hand. You might not know how important it is to validate user input before processing, so your program crashes whenever the user makes some mistake. And there is no other thing that makes a user more unhappy than crashing a program.

Now, if you do a lot of coding besides your academic study and read other people's code, you might know all of these. But even if you know all of these, it might not be enough to get a project (even place a bid in a project). How many softwares you've seen made using Java Swing? Or how many software do you use built with just plain C++ (No GUI, no networking or multi-threading)? You need to learn at least one popular technology. IIf you know Java, then learn Android development. f you know C++, then learn Qt to make desktop applications. If you know Python, then learn how to make web applications using Django. You will get plenty of resources in web to learn any of these popular technologies. But don't try to learn everything at once - learn one at first, do some projects using it, then consider learning another one. I'm working on Android for about two years, but still I consider myself just a beginner.

One thing to keep in mind, clients expect professional quality from you. They want a well designed, stable, bug-free product. So just knowing how to develop an app might not be enough, you need to ensure it has high quality. A good way to test if you've professional level skills is to look for project postings related to your skills in different freelancer sites, and ask yourself if you can to do these projects. If you can't, find out what else you need to learn, give some more time in developing your skills, and come back some days later.

2. You don't know how to bid

Communication skills are just as important - if not more important - than technical skills to get a job. You need to compete with people all over the world. Why would an employer choose you, specially if you are a beginner with no previous work experience in that freelancer site? You should keep an updated portfolio on the projects you've worked before. But the most important thing is, you need to convince the employer that you are able to do the job, and you can do it within his budget and deadline. Here are some tips to convince him:
  • You need to convince yourself first. You need to be sure that you can complete the project properly in due time, and the employer will be happy with your work. If you take a project and can't complete, you will get a negative review and the employer might refuse to make the payment.
  • Read the project description carefully. Sometimes employers post additional files (detailed requirement, existing codes etc). Take a quick look over those files before placing the bid.
  • Most projects have vague requirements. Ask questions to the employer for clarifying the requirements. Seriously, this is the easiest way to convince him that you're serious about his project, because asking questions means you've read the project description carefully. But don't ask dumb questions - whose answers can be figured out easily by analyzing requirements or searching Google. 
  • Place a bid which is at least 20% lower than any other experienced freelancer bidding on that project. Why would a employer hire an inexperienced freelancer who demands more than an experienced one? Don't bid too low, though, it might make him suspicious. 

3. You haven't tried hard

Let's say you've enough technical and communication skills to start freelancing. You've placed bids in many different projects, but you didn't get any, so you gave up.

Let me ask you, how many times you've placed a bid? 10 times? 20 times? 30 times? I got my first job after continuously placing bids in three freelancing sites for three weeks.

For three weeks, I've logged on to each of those three freelancing sites several times a day, searched all projects on Android, Java, and C++, read all the project description carefully, decided if I can do the job, and if I can do it, should I place the bid (there are limits on the maximum number of bids that can be placed in a certain period of time), then placed the bid if it seems appropriate and tried to communicate with the employer. In 95% cases, I didn't even get a reply, they hired some experienced guy. Then one day, I luckily found an Android project with very vague and confusing description - no one made a bid on that project before me, perhaps they didn't even understand what the employer actually meant. I read the description over and over to understand it, sent messages to the employer to clarify the requirements, and discussed with him how should I go on developing the app. He gave me the project and I successfully completed it after a week. After that, I didn't have to look back. So don't lose hope after making a few bids. Place more and more bids, and place those very carefully.


To summarize, here are the steps you need to go through to start freelancing:
  1. Choose a popular technology (Android, iOS, PHP, Ruby on Rails, Qt or whatever) and become master on it.
  2. Do some small projects using that technology. See if you can write an well designed (both in terms of code and UI), easily modifiable and bug free app.
  3. Keep an eye on the project postings in some popular freelancing sites (Freelancer.com, Odesk, Elance etc). See if you've enough skills to do those projects. If you don't have, then go to step 2.
  4. Now you are ready to start bidding. Keep aside 1-2 hours everyday to spend on bidding. Read project descriptions carefully, and place bid if you're absolutely sure that you can do those projects. 
  5. If any employer communicates, reply him back as early as possible. Sometimes employers communicates long after posting the project, so consider turning on email notifications on your phone or browser.
A lot to do, huh? If you have a friend who is already working as a freelancer, I'll suggest you approach him first, ask him if you can work with him. An experienced freelancer with good review always gets a lot of work, so if you have skills, he will be happy if you join with him. This way you can avoid (most painful) step 4 and 5.

Before finishing, I want to discuss one other thing. A common question I face from my friends is "How much do you earn by freelancing?" The real answer is, "it varies largely from project to project." Generally I try to charge my clients about $10 - $15 per hour. But unfortunately, besides developing the app I need to spend a lot of time in bidding and communicating with clients. I need to pay fees to Freelancer.com and Skrill, too (I use Skrill for transferring my earnings in my bank account). So in the end it's a lot less compared to my original earning which is about $7 - $10 per hour. This might not be enough if you are a developer from Europe or the USA, but as a Bangladeshi freelancer with only one year of experience, I'm happy with it. 


7 comments:

  1. Very interesting
    But i wanna also add three ideas:
    1- if you are "present and skilled", people will know how to contact you. So u don't need to to pay fess to Freelancer.com and Skrill (OMT & western union will do the job for you :-) ), too...
    2- In the opposite of what you said, modern economy is based on marketing so communication skills are as important as knowledge (even more)
    3- There is a "Bank" who will always give you loans, jobs, gifts and extra money. This "bank" is named "friendship" (even overseas.. physical contact with someone is not necessary for developping friendship...)so keep in contact with your clients after you have the job done.
    Best wishes in your freelancing.

    ReplyDelete
  2. Hi Michel

    Thanks for you comment. I totally agree with you, in last 2-3 months I've got most of my jobs from my previous contacts, which saved me a lot of time and money. Actually I meant "Communication skills are just as important - if not more important - than technical skill" but somehow I missed the "if" while writing. Thanks for pointing it out :)

    ReplyDelete
  3. Thank you vaia for this writing. Some horizons are opened by your advice to my sight as always.

    ReplyDelete
  4. Thank you for sharing. I once worked at this company www.nixsolutions.com/, on the position of QA engineer. I worked there for a long time and then decided to go into freelancing. It's my choice, I am pleased with the decision. I would advise your post to all young and ambitious programmers. Good luck.

    ReplyDelete
  5. While the project is being started, first the plans are made on the basis of estimated functionality. If in the mid of the development procedure, the customer feels that there are some other requirements that has been forgotten to include before starting the project then the total time in which the project was going to be completed may increase.

    4k video downloader key

    ReplyDelete
  6. Wow, it's pretty nice advice's.
    Thank y for this article and your blog, keep going!

    Best regards
    Toby, data room m&a

    ReplyDelete
  7. Thanks to share this blog. This blog is very important for every freelancers. I also want to suggest you one freelancing website. It's Boon Tech App.
    Here is the link:android mobile application

    ReplyDelete