An iceberg is a good analogy for software development. Any software product connected through the internet is built of two major portions - frontend and backend.
As the name suggests, the frontend is the user-facing part and is analogous to the part of the iceberg visible above the water. On the other hand, just like an iceberg has a large portion underneath the water hidden from the casual observer, software development has a backend that contains the data to be shown to the user and the logic underpinning the application, which is invisible to the user.
The frontend and backend are linked via APIs (Application Programming Interfaces), which we can think of as the communication protocols to allow data to be exchanged.
Even though the codebase on the frontend of the web applications is complicated and requires attention to detail to provide an enriching user experience, backend development is more incomprehensible. Our goal today is to peel that curtain back a little to explain more details about backend development.
More knowledge about backend development will considerably improve your ability in recruiting backend developers!
What are the parts of backend software development?
Let’s start by understanding the architectural components of a typical backend software development project. The five major components of any backend architecture are:
- Backend logic
- Servers
- Databases
- APIs
- Middleware
Backend logic:
Backend logic is the heart of backend development. It is the code that developers write to accomplish specific tasks. This code runs on the server (see below) and generally contains algorithms and functions that allow the frontend product to perform different actions and produce the correct output depending on the user's actions in the application.
Servers:
The backend logic that a developer has written needs to run or “execute” somewhere. That somewhere is often referred to as a server. Originally, companies had their own machines or “servers” to run this code.
Nowadays, most companies use servers in the cloud provided by companies like Amazon, Google, and Microsoft. These servers are also often referred to as virtual machines.
Middleware:
Middleware is software running on the server side that connects the backend to the front-end and specializes in interprocess communication. In simple terms it is the plumbing by which the user inputs translate into requests and the responses from the databases are sent back to be displayed in the frontend.
Databases:
Databases store the information related to the user and the user’s actions, which is then transformed in various ways and shown on the frontend. Broadly, there are two types of databases - relational databases and non-relational databases.
Relational databases are structured in the sense that data is organized in tables containing columns and rows and related with each other through a set of primary and foreign keys. These databases are then queried by a structured query language (SQL) to give the set of desired results based on the table’s relationships with each other.
For example, let’s assume the data to be stored in an application is about students enrolling in different courses.
To store this information in a relational database, one table (the Student table) will contain information like the students' first and last names. The second table (the Course table) will contain the course information like the course name, course number, course department etc.
The Student table will contain one more unique piece of information: the student’s identification number, which is called the table’s primary key. The Course table will store this student’s identification number as its foreign key. The programmer will then access a set of results using SQL queries using these keys.
On the other hand, non-relational databases, or No-SQL databases, are unstructured and store information in key-value pairs or documents. These databases are used to store and access a large quantity of complex and diverse data called Big Data and are equally important.
APIs:
Application Programming Interfaces (APIs) are sets of definitions and protocols for communications between different layers in the software. In simple terms they are contracts that represent an agreement between the frontend and the backend on how the communication will be structured.
There are different types of APIs:
- RESTful API: Representational State Transfer API in lightweight JSON format. It is highly scalable, dependable and delivers fast performance, making it the most popular API type.
- SOAP: Simple Object Access Protocol uses XML for data transmission. It requires more bandwidth and advanced security.
- XML-RPC: Extensible Markup Language – Remote Procedure Calls uses specific XML format for data transmission.
- JSON-RPC: It uses JSON format for data transmission.
Advanced topic - what are the types of backend development architecture?
There are generally three types of backend architecture:
- Layered Architecture
- Event-driven Architecture
- Microservices Architecture
Layered Architecture
This type of architecture separates functionality of frameworks, APIs, and databases into distinct parts allowing inputs from users to interact with each of them independently. For instance, based on user inputs, the backend developer can change information on the database without making any changes in how the API interacts with it.
Event-driven Architecture
This architecture is built around a central logic that accepts all user inputs and delegates it to be handled by the appropriate component. For example, when information through user input has to be stored or retrieved, this central logic makes the necessary calls to and from the database.
Microservices Architecture
This type of architecture splits the functionality of a product into many distinct units, allowing them to operate independently. For example, an e-commerce app or website using this architecture can run user transactions, and gather price data from two entities with separate logic and APIs.
Complicated modern applications are generally made using microservices for stability and scalability.
What are the tools and programming languages used for developing backend applications?
Backend developers have many options when selecting how to develop the backend architecture of an application. Depending on their expertise and project requirements, these are some of the popular options for the various components:
- Operating System : Windows 11, Linux 22
- Web Server: Apache, Nginx
- Databases : MySQL, PostgreSQL, MariaDB, Sqlite, MongoDB
- Storage: Amazon Web Services, Google Cloud Platform, Azure, Heroku
- Programming Languages : PHP, Python, Ruby, Go, C#, Java, Pearl, JavaScript
- Frameworks : Node.js, ASP.NET, Django, Flask, Express, Ruby on Rails, Spring, Laravel
- Version Control : Github, SVN
- Project Management Tools : Jira
Here is a deep dive into the most popular programming languages for the backend.
Pro recruiter tip - understanding the choices a backend developer makes
As a recruiter, it is very difficult to learn all the technical knowledge to discuss fluently with a potential candidate the various choices they’ve made in programming languages, databases, and general backend architecture. However, when discussing a candidate’s particular work experience, you should try to understand these choices and why they made them.
The reasons for these choices are generally to make the application:
- Increase performance i.e. make the application faster
- Improve stability i.e. remove bugs and crashes
- Remove single point of failure i.e. make the application more resilient
- Harden security i.e. increase security to prevent hackers from accessing information
- Easily testable i.e. make testing the application by testers easier
- Write well-structured code i.e. allow others on the team to collaborate better
- Scalable development process i.e. build an architecture that allows many developers to work in tandem without stepping on each other’s shoes
- Reusable i.e. allow different applications to use the code again easily
Understanding the rationale behind these choices will allow you to understand the backend developer’s thought process and help you sell the candidate better to hiring managers!
Why is testing backend code important?
The main purpose of backend testing is to check the application layer and the database layer to find errors or bugs in the database or server logic.
Backend testing is a must because if anything wrong happens server-side, it will not further proceed with that task, or the output that gets sent to the application will get corrupted, the application might become too slow or the application might just crash and not work at all.
Backend developers perform three types of tests:
- Structural Testing − This deals with table and column testing, schema testing, stored procedures and views testing, checking triggers, etc.
- Functional Testing − This involves checking the functionality of the database from the user’s point of view.
- Non-functional Testing − This involves load-testing, risk testing in the database, stress testing, minimum system requirements, and deals with the performance of the database and APIs.
What are the roles and responsibilities of a backend developer?
Some of the major responsibilities of any backend developer are:
- Build and maintain architecture of a product - The main responsibility of a backend developer is choosing the right tools, frameworks and programming languages for building intuitive and user-friendly products that can be deployed to the end user.
- Write high-quality code - Clean, scalable and reusable code ensures sustainable applications and scope for future expansions.
- Perform quality assurance (QA) testing - Writing series of tests to validate and optimize the functionality of the end product.
- Assess efficiency and speed - Performance is of paramount importance, and hence the backend developer tests the deployed product against all network loads.
- Troubleshoot and debug - Being able to find and resolve existing or product use issues and communicate them to respective managers.
- Support - Maintain workflow with frontend developers and train junior developers.
What is the typical interview process for backend developers?
The typical interview process for backend developers includes:
- HR/Recruiter Screen - assessment of candidate’s background and interest and ensuring alignment with a role, compensation and other logistics. A recruiter should ensure there is alignment between the candidate’s skills and experience with the hiring manager’s needs.
- Hiring Manager screen - generally a discussion with the hiring manager to review the candidate’s background, skill sets, and areas of interest. This screen is technical and usually does not require the candidate to code during the interview. It generally consists of the interviewer diving deep into the candidate's background and the products they built.
- Series of technical interviews - Assessment of problem-solving skills by the organization’s technical team generally by giving a programming task to finish in an allotted time in a live exercise. Sometimes, a take-home project is substituted instead. Unlike a frontend developer, assessing a backend developer’s skills requires more assessment of the actual code as there is generally no visual end product to assess.
- Executive screen - Assessment by the organization’s executives to calibrate soft skills, motivation, and interest (similar to any other technical role).
What do technical interviews look for in backend developers?
It is helpful to know what technical interviewers look for in backend developers and the most commonly asked questions. As a recruiter, you can help prepare a candidate for the screens and get a sense of how confident they are about the subject matter. Even if you don’t understand the answers, it may be a good idea to go through some of these questions with a potential candidate.
Examples of some questions include:
Hard Skills
Programming Languages
- What are promises and callbacks?
- Write tail recursive version of factorial?
- What is the difference between Inheritance and Composition?
- What is the diamond problem in Java?
- What is the difference between HashMap and TreeMap?
- What is exception handling?
- What is a Lambda expression?
- If Cat is an Animal, is TakeCare<Cat> a TakeCare<Animal>?
Design
- What is the difference between Monolithic, SOA, and Microservices Architecture?
- How would you sort a 10GB file? How would you change your approach if it's 10TB?
APIs and Frameworks
- How would you manage Web Services API versioning?
- How do you handle errors when making API calls?
- What happens when you type google.com into your browser and press enter?
- Give examples of the mitigation tactics you’d use for various API attacks
Databases
- What is SQL injection?
- When will you choose RDBMS, and when will you choose NoSQL database?
- What is the ACID property of a system?
- What is N+1 problem in ORM?
Networking
- What are the seven layers of the OSI system model?
- Define and explain these nine server response error codes: 200, 201, 204, 301, 400, 401, 404, 409 and 500.
- What is a reverse proxy?
- Give an example of when you use caching. What are the different caching strategies?
- When would you apply asynchronous communication between two systems?
- What is the difference between client-side rendering and server-side rendering?
- What are deadlocks and race conditions?
Testing
- What are different types of tests required
- Name some performance testing steps
- What is a DDOS attack? How to prevent it from happening?
- What is man in the middle attack (MITM)?
Behavioral Skills / Soft Skills
- Examples of deployed web applications.
- Tell me 3 defects of your favorite programming language.
- What would you do if you were working on a project and a lead developer asked you to rewrite all of your code?
- What would happen if you put a mirror in a scanner?
- I want to refactor a legacy system. You want to rewrite it from scratch. Argument. Then, switch our roles.
- We want to increase the speed of our application. What strategies would you use to do this?
- How often do you update your knowledge of programming languages in general?
- There is a programming language you’ve never used before. How do you approach learning it?
What is the compensation range for backend developers?
Hiring a backend engineer who can construct your data architecture and define your business logic means straining your development budget. Those coders have always been paid more for their expertise, and there’s no way around that.
The estimated median base pay for a backend web developer in the US is $82,462 as of October 2022, according to Glassdoor [1]. Indeed reports an average base salary of $95,472 [2]. Compensation can vary depending on the location, the seniority of the developer, and the type of experience you are looking for.
In our experience at Rocket, you should target a range of $140-$170k for really high-quality fullstack engineers in the US/Canada.
Should you hire a developer in-house or outsource the entire project?
Outsourcing has grown in the last decade, and recent statistics show that more than two million jobs are outsourced every year. Therefore, a common question that companies grapple with is whether instead of filling permanent or contract-to-hire positions, why not outsource the entire project to another company?
Even though outsourcing an entire product may sound optimal, it has several risks that should be considered:
- Cost - costs of outsourcing are higher than hiring a permanent or contract employee.
- Data protection & privacy - company protocols and data have to be shared in order to ensure building a competitive product, and this carries risks.
- Lack of oversight and control - tracking of development progress is next to impossible, as the hiring company mostly gets to see the final product versus each incremental version or prototype.
- Quality of end product - a team whose incentive is to deliver a product as quickly as possible and who has no vested interests in your company will most likely deliver a subpar product at best.
- Maintenance - Products built using outsourcing are also harder to maintain over time as the original team that built the product isn’t around to answer questions and fix bugs on a day-to-day basis.
What are the growth projections for backend developers?
Backend developers are in high demand. According to the U.S. Bureau of Labor Statistics (BLS), backend developer positions are expected to grow by 23% between 2021 and 2031 [3].
What’s the best way to find backend developers?
There are many options when it comes to finding potential backend developer candidates.
LinkedIn remains the best place to find developers, at least in the United States and Canada. Their Recruiter search has several fields you can use to search candidates, including title, location, current company, years of experience etc., and by creating a boolean search, the search can be narrowed down very effectively.
Tip - to learn how to use Boolean searches effectively, check out LinkedIn’s guide to booleans. Boolean Help
Here are a few tips when looking for backend developers specifically:
- Title: Backend developers have a range of titles. Titles such as Ruby developer, Python developer, backend developer, backend engineer, and platform engineer are a surefire way to know that someone is working on the backend:
- General: Options like experience, current company, past company, job functions, veterans, industry, location and job titles can give a range of options to recruiters to choose from
- Technologies: determine which technologies are acceptable to the hiring manager and construct a boolean search based on that combination. For example, if the hiring manager wants a developer who knows Python:
- Basic search: (Python) - 46k results in the US with that search for backend developers who know Python
- Expanded search using frameworks for Python: (Python OR Django OR Flask) Search results increased by 10k!
- Company size: LinkedIn provides a handy feature to search by company size. This feature is extremely relevant when searching for backend developers as the type of work done by backend developers varies by company size.
In addition to searching on LinkedIn, here are some other ways to find and engage with backend developers:
- Job boards - Careerbuilder, Upwork, LinkedIn, Dice, Monster, Workable, SimplyHired, Python Job Board, Ruby Jobs, Drupal Jobs, Glassdoor, Remoteok.io (Remote), Craigslist (freelance) and Ladders, to name a few. Job boards typically yield more active candidates than the higher-quality passive candidates on LinkedIn, but they can still be a good source.
- Staffing companies - you can utilize staffing companies like Rocket, Robert Half, Randstad, and others to help you find a proficient backend developer.
- AI sourcing - you can use tools like Hireflow or Fetcher to source backend developers for you to engage.
Has COVID-19 changed backend developer hiring?
The rise of remote and hybrid work is one of the most notable changes caused by the COVID-19 pandemic that is expected to continue over the long term.
Software developers, in particular, are increasingly demanding remote or hybrid options as they can do their work remotely without significant impact, and they have a lot of influence given the supply and demand imbalance in their occupation.
In general, we expect backend developers to want flexibility in their work location and at least a hybrid schedule if not a fully remote one.
How do I convince a backend developer to join my company?
Once you have found and interviewed a backend developer and want to hire them, the next step is to craft an attractive offer and close the deal with the candidate! As you craft the offer, it is important to understand what backend developers are motivated by:
- Role & responsibilities: a precise explanation of the software product to be made and the developer’s responsibilities as part of that. Poorly defined or continuously changing requirements for software development are every developer’s nightmare!
- Tech stack: backend developers can be very particular about the tech stack they will work with. Explaining the tech stack they will work with in detail and which areas they will have input into changing (if any) can be very helpful.
- Growth opportunities: Most backend developers look for challenging work to expand their knowledge. The opportunity to work with the latest technologies is key to recruiting them, so they can continue to grow and learn.
- Company vision: Great backend developers are extremely interested in the company’s vision and plans for the future. Make sure you take the time to explain the business and strategy to them.
- Compensation and benefits: Of course, compensation is extremely important with companies vying for top talent. In addition to base salaries, backend developers often command annual performance bonuses, stock compensation, and retirement benefits such as 401k plans with matching and benefits (healthcare, dental, and vision coverage being extremely standard).
- Perks: Lastly, perks are essential in this segment as backend developers are highly in demand. Some common ones include: Parental leave, Budget for training and attending conferences, Commuter assistance if working from the office, and Relocation assistance.
How can I get additional help finding backend developers?
As mentioned, the best source for finding backend developers is LinkedIn and the various job sites like Indeed, Monster, and Ziprecruiter.
If you need external help to augment your capabilities, feel free to reach out to us at Rocket (info@getrocket.com). We would be happy to have an introductory call to see if our services would be a good fit for your needs.
About Rocket
Rocket pairs talented recruiters with advanced AI to help companies hit their hiring goals. Rocket is headquartered in the heart of Silicon Valley but has recruiters all over the US & Canada serving the needs of our growing client base across engineering, product management, data science and more.