How To Write The Perfect Upwork Job Description And Hire The Best Outsourced Developers
If you’re looking for a freelance developer chances are you’ve heard about Upwork – the most popular online marketplace for global software development talent. But just like with offline hiring, finding the right person is not straightforward. This guide was created to help you ace the process of finding a great freelance developer or a team, by showing you exactly how to write the perfect upwork job description.
Why Use Upwork?
Upwork is the largest freelance marketplace with 12M registered freelancers and $1B+ billed annually. It has a broad range of providers: from novice freelancers to 50+ person development teams making millions in revenue per year.
Upwork presents itself as a place where you can easily hire a good coder. However, quick googling reveals many posts about negative client experiences on Upwork.
Don’t be discouraged right away.
Inevitably, such a large overall transaction volume produces quite a few failed projects and people are far more likely to share their bad experiences than good. Just be mindful of the fact that Upwork does have some very bad developers. Nevertheless, I believe that majority of the providers on Upwork are genuine professionals caring about their reputation.
There are several components to successful Upwork job posting strategy. First, you need to stand out from the noise to attract serious experienced freelancers. Second, eliminate high-risk candidates during the hiring process. Finally, structure the project in a way that minimizes your risk. Let’s have a deeper look into each step.
Writing the Perfect Upwork Job Description
I worked on Upwork (when it was called Elance) as a freelance developer for 3 years. Guess what was my least favorite thing to do? Yep, looking for projects. As a developer I’d rather dive into an interesting project that I get paid for than sifting through a never-ending stream of ‘Facebook clone for $500’ job posts.
Bear in mind that you compete for talented developers with other clients, most of whom have a vague idea of what they need built.
At this point I’m assuming that you have a technical mentor, you’ve decided on the technology stack and have a functional specification and/or wireframes. If not, read 6 Important Questions to Ask Before Hiring an Offshore Software Development Company first. Now, in order to attract the best developers you need to write a job post that speaks ‘professionalism’. Besides good grammar and spelling here’s what an ideal post should include:
- A Clear Title. Specify exactly who you are looking for in the job title. For example: ‘Experienced Ruby-on-Rails developer to build a responsive CRM for home service providers’ or ‘Build iOS and Android applications for online dating’. A clear job name signals to developers that you did your homework and know exactly what you need done. Working with clients like this is a pleasure.
- Project Overview. In the beginning of your post include a paragraph with a short description of the project. Developers scan job posts to see if there is a fit, they read the first paragraph to decide if the whole post is worth reading. The first paragraph should include: purpose of the project, technology stack (e.g. ruby-on-rails or nodejs) and type of engagement (fixed-cost / hourly, full-time / part-time, long-term / short-term). Some of the information will be repeated in the following sections. Don’t worry about it. The overview is designed to deter irrelevant candidates and make good ones interested.
- Project Description. In this section you can expand on the project details. Give more info on the purpose of the application, the current stage of the project, the artifacts you will provide (designs, wireframes, specs), the desired timeline. Add examples of similar apps to help freelancers better understand your vision.
- Required Skills. If you’re not a technical person, this is where your technical mentor can add a lot of value. Some of the required skills will be defined by the technology stack you’ve chosen and some will be specific to your project. Your technical mentor should be able to help with this. Don’t forget to specify required English level.
- Ask Great Questions. Your project will receive many canned template proposals – that’s just the way it is. Your goal is to ask questions to quickly eliminate such proposals and get straight to the good stuff. I wouldn’t recommend asking for detailed estimates or other things that require serious time commitment on a freelancer’s part at this point. Instead, ask for items that a relevant candidate can provide easily. First, request to start their proposal with some key word/phrase (e.g. your name or nickname). That way you can see how well they paid attention to your requests.
If a freelancer can’t even read through your entire job post and comply with simple requests – how are they going to follow more complex instructions?
Ask for examples of similar applications they’ve built before, how long they’ve been working with this technology, what is their career history and what is their availability moving forward.
- Manually Search for the Best Freelancers/Teams. After you’ve submitted the job post, manually search for relevant freelancers and invite around to 10-15 to bid on the project. You don’t want to miss talented developers just because they are not looking through postings at the moment.
Here is a great template you can use as a guide to write a good job post.
How to Communicate with Applicants and Make the Right Decision
Now that you have proposals pouring in, it’s time to do some elimination.
- Eliminate proposals that look like a template and don’t answer your questions. Eliminate sloppy proposals that look like they were written in a hurry. Keep only those that provide clear answers to all your questions.
- Check Profiles Carefully. Now it’s time to look at profiles of the short-listed providers. Check their job history, their portfolio, rate and other info they have in their profile. Candidates with no job history or with only simple projects are inherently more risky. Read reviews of their past clients. Ideally, you want them to have past experience working on projects similar to yours. Don’t only chase rock-stars with tons of reviews who are likely getting many offers every day. You will have less leverage with them, because your review will be diluted by many others. My personal favorite are up-and-coming freelancers with some job history and positive reviews, but not too many (10-50 is a good rule of thumb). Since they are only just building their profile, your positive review is very important for them and they will make additional effort to keep you happy. In the reviews, look for repeat jobs with the same client – it means the client was happy.
- Message Short-Listed Developers. Now it’s time to start messaging your short-listed developers. The goal of this step is to get a detailed quote with line-item breakdown and to test-drive communication. Line-item cost breakdown is essential, eliminate freelancers who can’t/won’t provide that. Ask any additional questions you have. Ask for sample code snippets from their project – show these to your technical mentor. Avoid long delays between replies, be professional and respect the time people take to communicate with you. If communicating via voice is important to you – schedule a skype call. Take note of the freelancer’s reply time – somebody who suddenly disappears for several days might be a good candidate for elimination. If possible, ask your technical mentor to interview candidates that you really like.
- Keep the Other Applicants on-side. Hopefully you now have a perfect candidate that possesses required skills, provided a detailed estimate that fits your budget and you feel good communicating with. It’s time to hire him/her. If you have other decent candidates, don’t just ignore them, write a message telling them that at this point you’re not going to hire them, but will consider for future openings. After all, if things don’t work out with your top candidate for whatever reason, you can contact the next best candidate and carry on where you left off.
What to do When You’ve Hired – How to get The Project Off On the Right Foot
At this point you’ve gone through quite a process to shortlist and hire your freelancer or team. However, it’s too early to relax and wait for your project to be completed. The initial period is still risky and you should think of it similar to a trial period when you hire in-house. Don’t welcome them into your family just yet. If there’s an issue, your goal is to find out as soon as possible and either resolve it or find another provider – the “fail fast” mantra works well here. Here’s how you can apply it:
- Create Milestones. Break the project into milestones based on the line-item time estimate that the developer gave you. Treat each milestone as a separate project in terms of payment. The first milestone deadline should be no longer than 1 month (ideally 2 weeks) from the start of the project. If your project is larger than a couple of thousand dollars, never commit funds for the whole project. For example, you can pick one screen/module in your application that is quite complex and ask the developer to work on it first. The module should be representative of the rest of the application in terms of complexity. This first milestone is a test project, based on its outcome you will either continue or stop working with this developer.
- Request a Staging Area and Git Repository. At the end of the first milestone require the developer to (1) setup a staging server to demo the current progress and give you the URL (2) commit the code to git repository and give you access to it. Ask your technical mentor to take a look at the code to see if there are any red flags. At the same time check the staging URL is implemented correctly. Don’t worry too much about bugs at this stage – make sure to report them though. At this point you don’t want to be a perfectionist, just check that (1) the developer’s estimate of this first module was more-or-less correct and it was completed on time (2) communication has been going well (3) the quality of the code is good (check this with your technical mentor too).
- Be Prepared to Switch Developer if First Milestone Doesn’t Go Well. If during this initial milestone something has gone wrong (e.g. the developer disappears, doesn’t understand the requirements or refuses to demonstrate work-in-progress), well, you should consider yourself lucky that you’ve only wasted a couple of weeks. That’s just a cost of doing business. Politely tell the developer that it isn’t working and go back to the hiring phase. If your hiring process is solid this will not happen often. However, I know entrepreneurs who had to switch 2-3 developers before they found the right one, an example being Jonathan Prezman of CityCapper. I also know people who patiently waited for several months only to find out that the product was not actually being built at all. Don’t be this person!
- Keep the Module Based Approach Going Forward. If the first milestone is a success – now you can relax a bit. Finally you have hard evidence that your developer is capable and has a good understanding of your vision. However, keep the module-based approach moving forward. Require at least bi-weekly updates of the staging server and frequent code commits. I found that the “squeaky wheel gets the grease” approach works well. I mean, you don’t have to be distracting or annoying, but quick 5 minute daily calls or emails help both sides to be on the same page and allows you to spot a problem early. Also, It is very helpful to use project management software like Trello or Asana to communicate tasks or bugs and track their status.
As you can see, writing the perfect upwork job description is not rocket science, However, it requires following a process that might seem a little overwhelming for newbies. The good news is that, in my experience, not many clients on Upwork do their homework. Being serious, thorough and prepared will allow you to instantly stand out from the crowd and attract the best developers to your project.