Hiring Developers from Upwork
I was just involved in a discussion on Reddit, where someone was asking for advice about getting hired on Upwork. That prompted another response from someone asking about the best way to hire from Upwork.
It's been a few years, but I used to have a team built from people on Upwork (at its peak, five people).
So this is my response to the Redditor.
At first I lost a lot of money with bad Upwork hires but eventually got to the point where about 2 in 3 hires were good. The good ones stayed for months or years and I could safely get rid of the bad ones after a couple of weeks so I didn’t waste money.
Key tips:
- Hire for the long term - “if this works out we will be building a team and you will be a key part of it and sharing in the success”
- Add a hidden question in the middle of your job description (“what’s your favourite ice cream” was my choice). If they don’t answer that you know they’ve not read the description properly and they are immediately discarded. I've written about this before.
- If they reply with 50 links to previous projects then that's an immediate discard. They've not taken any time to understand what you’re asking for and have just replied with a standard response.
- Do a proper interview with your candidates. I didn't use video calls - language skills and/or accents could get in the way. Instead I used Slack and would plan to spend at least an hour on each candidate.
- I always opened my interviews with a description of who I am, a bit about my background, family and so on. It’s easy to forget that it’s another human being at the other end of the network connection. This works both ways so ask about their lives - how they got started, what they enjoy, about their family (if appropriate). If I’m working with someone I want to understand who they are and I want them to know who I am.
- My favourite interview was probably ten years ago, yet I can still remember the exact words. "Why did you choose to work with Ruby on Rails?" "My husband learnt it and got a job, so I followed him like a cat". Mahhek and I worked together for four years.
- I tended to choose the freelancers in the mid-price range; as an experienced software dev myself I tried to hire people who seemed competent but maybe needed experience and guidance. Hire too cheaply and you’re getting someone who is likely to make a mess. But if they're too expensive, I start to wonder why they’re on Upwork instead of earning directly.
- Ask them to be in Slack while they are working. Ask them to start each day with a description of what they’re working on (a sort of daily stand up) and if they get stuck or are unsure of the best way to do something, get them to ask in Slack immediately. It’s too easy to waste time (and money) because of bad communication. A quick conversation makes a real difference.
- Treat Slack like going to the office. Don't just discuss work (although that’s obviously the priority) but chat about what you had for dinner last night or films you’ve watched. In other words, this is a human colleague and work is a social activity.
- My favourite conversation; I was working with some Russian freelancers (back when that was possible) and I went to the cafe, at my office, to get some breakfast. I posted a photo of a full English breakfast (sausage, bacon, eggs, beans - the whole lot). Which prompted amazement from the team - "how many calories is that?" - plus a discussion about different breakfasts around the world.
- I never bothered with Upwork's screen monitoring tool. If work is getting done and the communication lines are good then you don’t need to spy on your workers. Plus coding is much more about thinking and planning than it is about typing, so what’s on their screen is often irrelevant.
Also, if you're not not familiar with software development, the following is really important:
Code spends much longer being read than it does being written.
There are a thousand ways to do the same thing when writing code. And software may take 5 weeks to write but the code will live for at least 5 years. It will need enhancements and maintenance for the entirety of its lifetime. So scrappy code thrown together as quickly as possible will become a burden (the exception being a prototype that you know you’re going to throw away).
If you treat the project as a transaction - “I need someone for 3 weeks to write X” - they will respond by doing the bare minimum to complete the brief. The code will likely be awful and hard to maintain, even if it does what it is supposed to.
So ensure you have a good relationship with your team as human beings. Take extra effort to maintain excellent communications. Make them feel that they are involved in a potential long-term project with people that they enjoy working with. This gives them all the incentives they need to take the extra time and effort to structure the code well, in addition to meeting the requirements. So you get the best outcomes for your project.