Finding a great developer at Upwork for a non-CMS based project is hard. Large amount of billed hours, Top-Rated badge and 100% job success rate are no guarantee of a skilled coder due to a common method of getting good reviews for failed projects by refunding the project costs in full: this is the primary reason of junior teams having excellent reviews while not being able to design an address book. (Yes, clients value money more than the truth, hard to blame them, though.) Below I describe the approach that we use to structure our job posts to hire short-term developers at Upwork, which proved to be quite efficient.
Let’s assume you have an idea of a system like, for instance, Upwork, where less than 5% of the desired functionality is covered by any CMS or another out-of-the-box solution on the market. This leaves you with the only option to hire a team to create a system from scratch. A natural choice would be to go to Upwork and create a job describing your idea, giving some sample links to a similar systems and asking for quotes. To find the best of the best you’ll even look through the profiles yourself and send some invitations. In the result, you’ll receive a bunch of quotes varying 10 times and realize that it didn’t move you any further, as there are no criteria to make a decision on the team in this situation.
The core reason to this is that, unlike manufacturing a plane or a piece of furniture, every IT project is aimed at creation of a product unique to some extent; in other words, every IT project implies inevitable uncertainty. Its level is higher at the starting point when you only have an idea and decreases as the system gets designed in detail, and even after that, when development starts, some level of uncertainly remains, as small parts of the system continues to be designed by the developers themselves at the code level. The level of uncertainty at the development stage is especially high in projects that require complex integrations with 3rd party systems, as their behavior may differ from what was described in their API documents. So when you ask developers to quote on the projects at the stage of extreme uncertainty, there is no common understanding of what exactly needs to be developed and the risks associated with the parts not explicitly mentioned in the job post. That’s why before asking for quotes we need to bring this uncertainty down to a reasonable level when the project could be estimated with ±15-20% accuracy, which is considered acceptable for IT projects.
Here is what I’d encourage you to do and this approach is applicable to projects of any size and complexity, from landing pages to large online marketplaces:
1. Create a separate fix-priced job to work out a specification and wireframes for your project; the job should be structured the following way:
a. A concept under 5-7 pages should be created first outlining all primary functionality and most (preferably all) of the system’s sections/pages for every major user role (in case of Upwork those would be Client, Freelancer, Upwork support staff, Upwork accountant, Upwork executive and Admin). You may try to create the concept yourself, and this attempt would really help, but walking through the entire system in your mind requires some analytical and user experience skills, so the best way would be to share this work with a skilled person (“analyst”).
b. Once you approve the Concept, the analyst should prepare the wireframes for the entire system and walk you through every branch of the business logic.
c. Once you approve the wireframe, the analyst should write the detailed specification that describes all data structures, functionality and business logic (processes) including background processes (those not related to or initiated from the UI).
d. Ask your analyst to provide a preliminary estimate of the project as a whole (it is not supposed to be accurate, but will help to create a reasonably looking job post for the development).
2. Once the wireframes and specification are ready, you need to create a quote template that will provide a unified structure/breakdown for all bidders, so that they estimate projects in detail, not as a whole: create a google spreadsheet with all the sections/pages for every user role, as well as every background process from the spec (as these won’t be reflected in the UI sections).
3. Decide on the technology stack you’d like your system to be based. Pick the most widely used frameworks among the trending ones – this will address job markets with highest levels of competition between developers while maintaining their interest in the project, which will allow you to attract experienced coders at reasonable rates.
Picking a techstack is a subject for a separate article, but here are some general rules: on the backend I would suggest PHP unless you have specific features that would require a tech with a different architecture, like Node/Express. Of all PHP frameworks, I would suggest Laravel. On the front-end I would stick with jQuery for lower-interactive systems, and Angular or React for highly interactive; picking Angular will open an opportunity for code reuse if you decide to develop hybrid mobile apps using Ionic (as it is based on Angular).
For the chosen techs Google interview questions with the correct answers – you’ll need them to screen your candidates during video interview. Having good screening questions (for projects will bigger budgets I’d suggest you hire an experienced part-time developer to conduct the interview) is key to shortlisting good candidates, as your further steps will imply dealing with quotes, and you won’t be able to efficiently compare too many of them, so how efficient your shortlisting methodology is really important.
3. Now it is time to gather the team:
a. Create a new fix-priced development job with the preliminary budget, a brief description of the project, chosen tech stack, mention that after a successful video interview with real-time coding with shared screen you will sign NDA with the candidate and provide detailed specification and wireframes – this approach will attract experienced developers and scare away others.
b. After posting the job, be sure not to rely on incoming proposals only, but seek for good developers and invite them yourself. Feel free to invite coders with up to $50/hr rate, as their productivity may be 4 times higher than that of the developer asking for $20/hr, so rates don’t really correlate with project expenses, especially considering that you have a fixed-priced job.
c. Among proporals, pick only candidates above $20/hr with at least 90% of job success rate (for those having below 100% – ask them why), as lower hourly rate and lower job success rate almost always guarantees junior level, which doesn’t suit the complexity of the project. Don’t fall into the trap of hoping that in developing countries great coders are 5 times cheaper – at Upwork, you are on the global market, and good developers know their price. Learn more about this.
d. Have a video interview with every candidate that you like and ask them the screening questions, check their replies and solutions against the correct ones that you googled, and be sure to check their maturity in architectural design, object-oriented programming, SOLID principles and working with redis/memcached and queues like Rabbit.
e. With those candidates who answered the screening questions correctly and showed acceptable level of English communicational skills, sign NDA and send them the project documents and the Quote Template to fill.
f. Combine estimates from the candidates in the same spreadsheet and note the lines in the breakdown that have a deviation of 20% against the average: this means either developers don’t have a common understanding of this piece of work, or the skills to do it efficiently. Discuss these pieces with the developers to make an informed decision on the true estimate of these pieces. This will allow you to equalize the scope of quote and allow you to filter out candidates that overprice.
This is the approach we use at Upwork for contract-based jobs and it proved to work well.
You may also find this article useful: https://sgmsoft.com/2017/02/11/how-to-benefit-from-offshore-programming/