How and why I hire freelancers via UpWork

The other day I mentioned on LinkedIn that I was looking for a freelancer web developer. A USA-based agency messaged me to express interest. Their rate — $150/hour. This a common rate for an experienced US-based web developer. The project I need help with has a budget of about $1000 per month, so this rate would give me under six hours of work, once rounding and communications overhead (or project manager) is factored in. I ended up going to and hiring two developers: one from Ukraine for $20/hour, and one from India for $10 per hour. The Indian developer will do close to 100 hours of work for the same cost. So that’s the basic case for sourcing your own freelancers. The details are considerably more complicated: sometimes a $150/hour developer is a better value than a $10/hour one: a good programmer can be far more productive than an average one, and a bad one will just waste your time and money. The trouble is that if you don’t know what you’re doing, you may end up paying high-end prices for shoddy or useless work. Here is how I approach hiring freelancers:

Good people are hard to find

Whether you’re hiring app developers, artists, video editors, or a project manager, there are usually huge differences between the productivity and quality of freelancers. The average quality of the people who will apply or be recommended for your freelance job posts will be quite low. Most highly-skilled engineers are not interested in freelancing or busy with existing projects, while the bad apples bounce from one project to another.
UpWork makes an effort to recommend the most qualified people for the job, but the candidates often engage in deceptive tactics boost their ratings. Freelancers will steal the information from good profiles, lie about their skills and experience, promise to take on projects they don’t have skills for, or hold your work hostage in exchange for good ratings (yes, this has happened to me).
If you add more rigorous qualifications or required experience to your post, they will use them against you: the frauds will promise to be experts, but honest freelancers (people are rarely a perfect fit) will move on. Many will try to circumvent UpWork: they will email and call you, your boss, your coworkers, and anyone else associated with you on your LinkedIn profile.
It’s possible to screen out the worst applicants (see below), but the only way to identify the 1% who are affordable and qualified is to test them.

How I do freelancer screening

A typical job, assuming a decent description will get about 100 applicants. If you get significantly less than that, your job needs a more detailed description of your project.
You can screen out 90% of candidates by filtering for a 90% job success rate, 1000+ hours worked, good reviews, a credible portfolio, and 10+ high test scores. However, this will usually raise the hourly rate.
1 Screening questions:
I typically do minimal profile screening simply because good profiles are easy to fake. Many individual profiles are secretly teams or agencies, and 1000+ hours on UpWork doesn’t mean anything when they put a brand new guy on your job. I also just don’t have time to screen 100+ applications for each job:
My screening process has three parts:
I ask simple questions which require job-specific experience to answer.
For a web designer: What’s your favorite CSS3 feature?
WordPress e-commerce developer: What version of WooCommerce have you worked with? (Candidates who are not paying attention usually give a WordPress version instead.)
Graphic artist: What navigation pattern would you use for this design?
2 Setup process: With developers, I ask them to follow a specific process which includes
(1) checkout out the code,
(2) messaging me on Slack for a test DB,
(3) sending me a screenshot of their configured dev environment
3 Trial task
(4) suggesting a trial task from the issue list.
90% of applicants will not complete this process correctly. Some tell me “I don’t work for free.” I respect this, and instead ask how they would solve a specific task.
For a complex software development job, 100 applicants followed by a 90% rejection rate still leaves 10 candidates. Each of these 10 receives a trial task. I try to simple, self-contained, well-described tasks with a $100–200 budget. Typically, about 5 candidates will complete the task, and 1 or 2 will deliver quality work. Sometimes none will, and I have to find more applicants. Getting through this process can be frustrating: you will be charged for work that isn’t delivered or must be discarded, will terminate nice guys who can’t deliver on time, and probably find that the best candidate(s) are not the favorites you bet on when you started.
Things are easier for non-developer positions. Artists and graphic designers are easier to screen, but tend to be more flaky with their time estimates. Being patient and understanding, yet severe and final with your judgment is essential in this process.

Establish a good onboarding process

Early in my freelancer management experience, I struggled with managing the cost of onboarding. Some agencies charge thousands of dollars to setup a dev environment and learn your systems. Since then, I’ve developed guides for new developers which communicate three things: expectations, system design/architecture, and development process (“definition of done”). This allows qualified engineers to complete setup without my help — and disqualifies those who struggle.
Here are three such guides I’ve created:

Use collaboration tools to coordinate distributed teams

It’s important to establish a mature development environment before you begin work. The development environment allows you to clearly communicate requirements and task assignments to freelancers, allows you to monitor the progress of code and functionality, and allows you to perform releases to end users in a deliberate manner.
These tools include (this is what I use):
  • Issue tracking tools for developers and stakeholders: JIRA or Bitbucket issues
  • Source code control: BitBucket or GitHub
  • Continuous integration: I use TeamCity or a PHP deploy script
  • Development environment: I use AWS-hosted servers
  • Collaboration tools: Slack for chat & Skype for team status calls
  • Documentation and specifications: Google Docs, JIRA Confluence

Establish working relationships before starting a big project

A good software team is a complex system: it requires a lot of momentum (aka money and time) to start up and keep going. If you’re planning to kick off a big project, it’s essential to get your team lined up first. Even after you complete a screening process and trial tasks, some turnover is to be expected. Various startup challenges will need to be overcome. You need to get momentum going with a small project before you begin one that is essential to your business.
Sometimes your business needs will require a pause in development, so you will have to invent work for your freelancers to keep the team together, lest they drift away, and you have to rebuild a new team all over again.
If this process sounds too risky, stressful, and complex for you, paying $150/hour+ for a reputable US-based developer or professional agency (with a 30% management overhead) is probably a better deal for you. Alternatively, you can skip the headache and hire me to do all of the above :-)

Originally published at on June 8, 2017.

No comments:

Post a Comment

How and why I hire freelancers via UpWork

The other day I mentioned on LinkedIn that I was looking for a freelancer web developer. A USA-based agency messaged me to express ...