How to hire GraphQL developers
Imagine the convenience of having a single smart API (application programming interface) endpoint from which you could query all sorts of complex information from different data sources. A GraphQL developer can help you turn that dream into a reality.
So how do you hire a GraphQL developer? What follows are some tips for finding top GraphQL consultants on Upwork.
How to shortlist GraphQL professionals
As you’re browsing available GraphQL consultants, it can be helpful to develop a shortlist of the professionals you may want to interview. You can screen profiles on criteria such as:
- Industry fit. You want a GraphQL developer who understands your industry so they can help you figure out how best to reach your target market.
- Project experience. Screen candidate profiles for specific skills and experience (e.g., creating a GraphQL API for a short-term rental booking app).
- Feedback. Check reviews from past clients for glowing testimonials or red flags that can tell you what it’s like to work with a particular GraphQL developer.
How to write an effective GraphQL job post
With a clear picture of your ideal GraphQL developer in mind, it’s time to write that job post. Although you don’t need a full job description as you would when hiring an employee, aim to provide enough detail for a contractor to know if they’re the right fit for the project.
Job post title
Create a simple title that describes exactly what you’re looking for. The idea is to target the keywords that your ideal candidate is likely to type into a job search bar to find your project. Here are some sample GraphQL job post titles:
- GraphQL developer needed for a Shopify website
- Full-stack developer experienced with React, Relay, and GraphQL
- Developer needed for payment gateway integration with Braintree GraphQL API
GraphQL project description
An effective GraphQL job post should include:
- Scope of work: From GraphQL API design to third-party integrations, list all the deliverables you’ll need.
- Project length: Your job post should indicate whether this is a smaller or larger project.
- Background: If you prefer experience with certain industries, software, or developer tools, mention this here.
- Budget: Set a budget and note your preference for hourly rates vs. fixed-price contracts.
GraphQL responsibilities
Here are some examples of GraphQL job responsibilities:
- Collaborate with project managers, developers, and designers on software projects
- Design and implement GraphQL APIs
- Validate and test code deliverables
- Build and maintain a microservices architecture
GraphQL requirements and qualifications
Be sure to include any requirements and qualifications you’re looking for in a GraphQL developer. Here are some examples:
- Proficiency with GraphQL
- Working knowledge of graph theory
- Experience with web services, APIs, and server-side technologies
- Experience with preferred software technology stack (e.g., MEAN, LAMP, MERN)
GraphQL Developers FAQ
What is GraphQL?
Facebook describes GraphQL as “a query language for graph data that powers the lion’s share of interactions in the Facebook Android and iOS applications. Any user of the native iOS or Android app in the last two years has used an app powered by GraphQL.”
It’s a highly descriptive specification for data fetching from server to client, able to describe and manipulate very complex nested data. What this means to a developer is that a single query can structure what data it wants returned, and in what order. What this means to a user is that a specific combination of search terms can yield an array of related results, and quickly—even on mobile.
How much does it cost to hire a GraphQL developer?
The first step to determining the cost to hire a GraphQL developer will be to define your needs. Rates can vary due to many factors, including expertise and experience, location, and market conditions.
Cost factor #1: project scope
The first variable to consider when determining scope is the nature of the work that needs to be completed. Not all GraphQL projects are created equal. GraphQL only adds a simplified layer of abstraction on top of the underlying data architecture. A simple app pulling data from two or three sources will be easier to manage than an app pulling data from a sprawling microservices architecture.
Tip: The more accurately your job description describes the scope of your project, the easier it will be for talent to give you accurate cost estimates and proposals.
Cost factor #2: GraphQL developer experience
Choosing the right level of expertise for the job is closely tied to how well you determined the scope of your project. You wouldn’t need an advanced GraphQL developer to create a smart endpoint to consolidate a handful of REST APIs. On the other hand, if your back end is complex and you can’t risk your GraphQL orchestration layer exposing sensitive data, you’ll want to make sure you’re working with a professional who can harden your security.
Beyond experience level, you need to consider the type of experience the talent possesses. The following table breaks down the rates of the typical types of GraphQL developers you can find on Upwork.
Rates charged by GraphQL developers on Upwork
Level of Experience | Description | Hourly Rate |
Beginner | Proficiency in GraphQL, web services, database technologies, REST, and API development. | $50-60+ |
Intermediate | Beyond back-end fundamentals, proficiency with DevOps tools such as containers. Familiarity with front-end technologies such as React, Angular, and Vue. | $60-90+ |
Expert | Full-stack developers with experience working with complex back ends and microservices architectures. | $100+ |
Cost factor #3: location
Location is another variable that can impact a GraphQL developer’s cost. It’s no secret that you can leverage differences in purchasing power between countries to gain savings on talent. But it’s also important to factor in hidden costs such as language barriers, time zones, and the logistics of managing a remote team. The real advantage to sourcing talent remotely on Upwork is the ability to scan a global talent pool for the best possible person for the job. Location is no longer an obstacle.
Cost factor #4: independent contractor vs. agency
The final variable regarding talent cost is hiring an independent contractor vs. an agency. An agency is often a “one size fits all” model, so you’ll often have access to a designer, a project manager, an engineer, and more. When hiring individuals you have total autonomy regarding who is responsible for which part of the project, but you’ll need to source each of those skills separately.
The trade-off between hiring individuals vs. hiring an agency is the level of administrative overhead you incur personally in coordinating tasks among all members of the team. Project scope and personal preference will determine which style is a better fit for your needs.
Common GraphQL developer mistakes
Schema duplication: A common problem encountered when building a GraphQL back end from scratch is the need for multiple schema: one for the database and another for your GraphQL endpoint. While you could easily create schema for both, there would be a lot of redundant code, and you would need to maintain two separate sources of truth.
Fortunately, the developer community has come up with a number of solutions to avoid schema duplication. One is to use GraphQL schema generation libraries to generate schema from existing code. Need a schema for your PostgreSQL database? Generate one with PostGraphile. Another is to simply convert preexisting type definitions to GraphSQL schema with the help of type resolvers.
The main idea is to turn to the developer community before spending time writing duplicate schema from scratch.
Handling GraphQL errors like REST errors: Error codes such as “403 unauthorized” or “404 not found” might make sense for a traditional REST-style API where each resource gets its own endpoint. The problem with this approach is that it negates one of the big advantages of using GraphQL: the ability to request exactly what you need from multiple data resources through a single endpoint. If any one of those resources throws a REST-style error, your entire page will respond as if it is in error, when in truth you could have still displayed some of that data had you followed the GraphQL specification’s description of error handling.
Redundant database calls: Imagine you wish to display a list of 100 customers with their addresses. In the conventional approach, this would require two database calls per view, one to pull customers, and another to pull their corresponding addresses.
But what would this look like in GraphQL? Assuming each customer has an address field with its own resolver, you’ll end up needing an initial call to pull the list of customers and an additional call to fetch each address per resolver. That’s a total of 101 database calls per view, and we haven’t even touched on the other types of fields you might want to display in your customer list.
A more elegant solution is to use a dataloader to batch and cache database calls. The dataloader will batch all calls together into a single call if it notices that you’re hitting the same database table multiple times. It will also reuse objects when necessary by storing them in a memory cache.
Tips and best practices
Stand on the shoulders of giants.
As with any other developer technology, it’s important to take advantage of the libraries, tools, and resources made available by the open-source community. GraphQL has active communities on Stack Overflow, GitHub, and Facebook. There are also Slack channels and Discord chat rooms you can join to ask questions and contribute solutions. From resolvers to command-line tools to browser IDEs, there are many tools you can find to streamline your GraphQL development experience.
Compress your JSON with Gzip.
While not required, most GraphQL services typically respond using JSON (JavaScript Object Notation). Since JSON is mostly text, it’s easy to compress and handle with Gzip. It’s also well known to API developers who will have no trouble reading, handling, and debugging JSON. Most projects will enable Gzip and encourage clients to send the header “Accept-Encoding: gzip”.
Practice pagination with the Connections pattern.
Connections is a design pattern for designing APIs with feature-rich pagination. From simple page numbers for lists to more-complex pagination such as the active revealing of data based on scrolling and cursor position, Connections provides a standardized way to implement robust pagination. Client tools made for GraphQL such as Relay actively encourage the Connections design pattern.