DEV Community

Cover image for Backend development is more than writing endpoints for frontend
Emanuele Bartolesi for This is Learning

Posted on • Edited on

Backend development is more than writing endpoints for frontend

Backend development is a crucial part of web development that involves creating and maintaining the logic, functionality and data of a website or an application. Backend developers are responsible for writing backend code that communicates with the frontend, the server and the database. They also ensure that the backend code is secure, scalable, reliable and efficient.

However, backend development is not only writing API endpoints. API endpoints are the interfaces that allow the frontend to interact with the backend and exchange data. They are essential for any web application, but they are not the only thing that backend developers need to know and do.

Choosing and using a backend programming language and framework

One of the first decisions that a backend developer needs to make is what programming language and framework to use for their project. There are many options available, such as .NET, Java, Python, PHP, Ruby, Node.js, Django, Laravel, Spring Boot, Rails, Express.js and more. Each of these languages and frameworks has its own advantages and disadvantages, such as performance, scalability, popularity, learning curve, documentation, community support, etc.

A backend developer needs to choose a language and framework that suits their project requirements, preferences and skills. They also need to learn how to use them effectively and efficiently. This involves mastering the syntax, features, libraries, tools and best practices of their chosen language and framework. They also need to keep up with the latest updates and trends in their field.

Some of the resources that can help a backend developer learn more about backend programming languages and frameworks are:

Working with databases and data structures

Another important aspect of backend development is working with databases and data structures. Databases are where the data of a website or an application is stored and retrieved. Data structures are how the data is organized and manipulated in memory. A backend developer needs to know how to design, create, query, update and delete databases and data structures according to their project needs.

There are two main types of databases: relational databases (such as Microsoft SQL Server, MySQL, PostgreSQL, Oracle) and non-relational databases (such as MongoDB, Cassandra, Redis). Relational databases store data in tables with predefined schemas and relationships. Non-relational databases store data in collections with flexible schemas and no fixed relationships. Each type of database has its own advantages and disadvantages depending on the use case.

A backend developer needs to choose a database that matches their project requirements, such as scalability, performance, consistency, availability, etc. They also need to learn how to use a database management system (DBMS) or an object-relational mapping (ORM) tool to interact with their database. A DBMS is a software that allows a backend developer to create, manage and manipulate databases using a query language such as SQL (Structured Query Language). An ORM tool is a software that allows a backend developer to map their database tables to objects in their programming language using an abstraction layer.

Some of the resources that can help a backend developer learn more about databases and data structures are:

Designing and implementing APIs

As mentioned earlier, APIs (Application Programming Interfaces) are the interfaces that allow the frontend to interact with the backend and exchange data. They are essential for any web application because they enable communication between different components of a system. A backend developer needs to know how to design and implement APIs that are secure, reliable, efficient and easy to use.

There are different types of APIs, such as RESTful APIs, GraphQL APIs, SOAP APIs, etc. RESTful APIs (Representational State Transfer) are the most common type of APIs that use HTTP methods (such as GET, POST, PUT, DELETE) and JSON (JavaScript Object Notation) format to send and receive data. GraphQL APIs (Graph Query Language) are a newer type of APIs that use a query language and a schema to define and fetch data. SOAP APIs (Simple Object Access Protocol) are an older type of APIs that use XML (Extensible Markup Language) format and a protocol to exchange data.

A backend developer needs to choose an API type that suits their project needs, such as flexibility, performance, complexity, etc. They also need to learn how to use an API framework or a library to create and manage their APIs. An API framework or a library is a software that provides tools and features to simplify the development of APIs. Some examples of API frameworks and libraries are Django REST Framework, Flask-RESTful, Express.js, GraphQL.js, etc.

Some of the resources that can help a backend developer learn more about APIs are:

Managing servers and hosting environments

Another aspect of backend development is managing servers and hosting environments. Servers are the machines that run the backend code and handle the requests from the frontend. Hosting environments are the places where the servers are located and accessed. A backend developer needs to know how to configure, deploy and maintain their servers and hosting environments according to their project needs.

There are different types of servers and hosting environments, such as local servers, cloud servers, dedicated servers, shared servers, etc. Local servers are the servers that run on the backend developer's own machine or network. Cloud servers are the servers that run on a remote platform provided by a cloud service provider such as Microsoft Azure, AWS (Amazon Web Services), Google Cloud Platform, etc. Dedicated servers are the servers that are rented by the backend developer from a hosting provider and used exclusively for their project. Shared servers are the servers that are shared by multiple projects from different backend developers.

A backend developer needs to choose a server and a hosting environment that matches their project requirements, such as cost, scalability, security, reliability, etc. They also need to learn how to use a server management tool or a platform as a service (PaaS) to set up and manage their servers and hosting environments. A server management tool or a PaaS is a software that provides features and functionalities to simplify the administration of servers and hosting environments. Some examples of server management tools and PaaS are cPanel, Heroku, Firebase, etc.

Some of the resources that can help a backend developer learn more about servers and hosting environments are:

Testing and debugging backend code

Another skill that a backend developer needs to have is testing and debugging their backend code. Testing is the process of checking whether the backend code works as expected and meets the project specifications. Debugging is the process of finding and fixing errors or bugs in the backend code. A backend developer needs to know how to test and debug their backend code effectively and efficiently.

There are different types of testing methods and tools for backend development, such as unit testing, integration testing, functional testing, performance testing, security testing, etc. Unit testing is the testing of individual components or functions of the backend code. Integration testing is the testing of how different components or functions work together in the backend code. Functional testing is the testing of whether the backend code fulfills the project requirements and user expectations. Performance testing is the testing of how fast and responsive the backend code is under different loads and conditions. Security testing is the testing of how secure and protected the backend code is from malicious attacks or unauthorized access.

A backend developer needs to choose a testing method and tool that suits their project needs, such as quality assurance, efficiency improvement, error prevention, etc. They also need to learn how to use a testing framework or a library to create and run their tests. A testing framework or a library is a software that provides features and functionalities to simplify the development of tests.

Some examples of testing frameworks and libraries are PyTest, Mocha, Jest, etc.

Some of the resources that can help a backend developer learn more about testing and debugging are:

Collaborating with frontend developers and other stakeholders

One of the skill that a backend developer needs to have is collaborating with frontend developers and other stakeholders. Frontend developers are the ones who create and maintain the user interface and user experience of a website or an application. Other stakeholders are the ones who have an interest or a role in the project, such as clients, users, managers, designers, etc. A backend developer needs to know how to communicate and cooperate with them effectively and efficiently.

Collaboration is essential for any web development project because it ensures that the project meets the expectations and needs of all the parties involved. It also helps to avoid misunderstandings, conflicts and errors in the project. A backend developer needs to use various collaboration tools and techniques to facilitate their collaboration with frontend developers and other stakeholders, such as:

  • Version control systems: These are tools that allow multiple developers to work on the same code base without overwriting or losing each other's changes. They also provide features such as branching, merging, committing, pushing, pulling, etc. to manage different versions of the code. Some examples of version control systems are Git, SVN, Mercurial, etc.
  • Code editors and IDEs: These are tools that allow developers to write, edit, run and debug their code. They also provide features such as syntax highlighting, code completion, code formatting, code refactoring, etc. to improve the quality and readability of the code. Some examples of code editors and IDEs are Visual Studio Code, Sublime Text, PyCharm, Eclipse, etc.
  • Code review tools: These are tools that allow developers to review each other's code and provide feedback and suggestions for improvement. They also provide features such as commenting, rating, approving, rejecting, etc. to facilitate the code review process. Some examples of code review tools are GitHub, Bitbucket, GitLab, etc.
  • Communication tools: These are tools that allow developers to communicate with each other and other stakeholders via text, voice or video. They also provide features such as chat rooms, channels, groups, direct messages, etc. to organize and manage the communication. Some examples of communication tools are Slack, Discord, Zoom, Skype, Microsoft Teams, etc.
  • Project management tools: These are tools that allow developers to plan, track and manage their project tasks and progress. They also provide features such as boards, lists, cards, timelines, calendars, charts, etc. to visualize and monitor the project status. Some examples of project management tools are Trello, Asana, Jira, Azure DevOps, GitHub, etc.

Some of the resources that can help a backend developer learn more about collaboration tools and techniques are:

Messaging systems

Another skill that a backend developer needs to have is working with messaging systems. Messaging systems are tools that enable asynchronous communication between different components of a system, such as services, applications, devices, etc. They allow sending and receiving messages that contain data or commands, without requiring a direct connection or a synchronous response.

Messaging systems are useful for backend development because they enable:

  • Decoupling: Messaging systems reduce the dependencies and coupling between different components of a system, making them more modular and flexible.
  • Scalability: Messaging systems allow scaling up or down the number of components of a system, without affecting the communication or performance.
  • Reliability: Messaging systems provide features such as message persistence, delivery guarantees, retries, acknowledgments, etc. to ensure that messages are delivered and processed correctly and reliably.
  • Performance: Messaging systems improve the performance and responsiveness of a system by allowing parallel and concurrent processing of messages.

There are different types of messaging systems, such as message brokers, message queues, message buses, etc. Message brokers are software that act as intermediaries between message producers and consumers. They provide features such as routing, filtering, transforming, aggregating, etc. to manage the flow of messages. Message queues are data structures that store messages in a FIFO (first-in-first-out) order until they are consumed. They provide features such as buffering, load balancing, fault tolerance, etc. to handle the load of messages. Message buses are software that connect different components of a system using a common communication channel. They provide features such as broadcasting, subscribing, publishing, etc. to enable event-driven communication.

A backend developer needs to choose a messaging system that suits their project needs, such as latency, throughput, consistency, availability, etc. They also need to learn how to use a messaging framework or a library to create and manage their messaging system. A messaging framework or a library is a software that provides features and functionalities to simplify the development of messaging systems. Some examples of messaging frameworks and libraries are Apache Qpid, Apache ActiveMQ Artemis, Apache Kafka, etc.

Some of the resources that can help a backend developer learn more about messaging systems are:

Security

Another skill that a backend developer needs to have is ensuring the security of their backend code and data. Security is the process of protecting the backend code and data from unauthorized access, modification or disclosure. It is essential for backend development because it ensures the confidentiality, integrity and availability of the backend code and data.

Security involves various aspects such as:

  • Authentication: Authentication is the process of verifying the identity of a user or a component that tries to access the backend code or data. It usually involves providing credentials such as username and password, tokens, certificates, etc.
  • Authorization: Authorization is the process of granting or denying access rights to the backend code or data based on the identity and role of a user or a component. It usually involves defining policies and rules that specify what actions can be performed by whom on what resources.
  • Encryption: Encryption is the process of transforming the backend code or data into an unreadable form using an algorithm and a key. It usually involves encrypting data at rest (in storage) or in transit (in communication) to prevent unauthorized access or modification.
  • Hashing: Hashing is the process of generating a fixed-length string from the backend code or data using an algorithm. It usually involves hashing passwords or other sensitive data to prevent storing them in plain text or comparing them without revealing them.
  • Logging: Logging is the process of recording the events and activities that occur in the backend code or data. It usually involves creating log files or records that contain information such as date, time, source, destination, action, outcome, etc.
  • Auditing: Auditing is the process of reviewing and analyzing the logs and records that are created by the logging process. It usually involves checking for anomalies, errors, violations or breaches in the backend code or data.

A backend developer needs to use various security tools and techniques to implement these aspects in their backend code and data. Some examples of security tools and techniques are:

  • JSON Web Tokens (JWT): JWT are an open standard for creating and verifying tokens that contain claims or information about a user or a component. They can be used for authentication and authorization purposes in RESTful APIs.
  • SSL/TLS: SSL (Secure Sockets Layer) and TLS (Transport Layer Security) are protocols that provide encryption and authentication for data in transit. They can be used to secure the communication between the backend and the frontend or other components using HTTPS (Hypertext Transfer Protocol Secure).
  • bcrypt: bcrypt is a hashing algorithm that is designed to be slow and resistant to brute-force attacks. It can be used to hash passwords or other sensitive data before storing them in a database or comparing them for verification.
  • Log4j: Log4j is a logging framework that provides features and functionalities to create and manage log files or records. It can be used to log the events and activities that occur in the backend code or data.
  • ELK Stack: ELK Stack is a combination of three open source tools: Elasticsearch, Logstash and Kibana. Elasticsearch is a search and analytics engine that stores and indexes log data. Logstash is a data processing pipeline that collects, parses and transforms log data. Kibana is a visualization and dashboard tool that displays and analyzes log data. ELK Stack can be used to audit the logs and records that are created by the logging process.

Some of the resources that can help a backend developer learn more about security are:

Caching

Another skill that a backend developer needs to have is using caching techniques. Caching is the process of storing frequently used or recently accessed data in a fast and temporary storage location, such as memory or disk. It is useful for backend development because it improves the performance and efficiency of the backend code and data.

Caching involves various aspects such as:

  • Cache types: There are different types of caches, such as application cache, database cache, web cache, etc. Application cache is the cache that is stored within the backend application itself, such as variables, arrays, objects, etc. Database cache is the cache that is stored within the database system itself, such as query results, indexes, etc. Web cache is the cache that is stored outside the backend application or database system, such as proxies, CDNs (Content Delivery Networks), browsers, etc.
  • Cache strategies: There are different strategies for caching data, such as cache-aside, read-through, write-through, write-behind, etc. Cache-aside is the strategy where the backend application checks the cache first before querying the database. If the data is not in the cache, it fetches it from the database and stores it in the cache for future use. Read-through is the strategy where the backend application queries the cache first before querying the database. If the data is not in the cache, it fetches it from the database and updates the cache automatically. Write-through is the strategy where the backend application writes data to both the cache and the database simultaneously. Write-behind is the strategy where the backend application writes data to the cache first and then asynchronously writes it to the database later.
  • Cache policies: There are different policies for managing cached data, such as LRU (Least Recently Used), LFU (Least Frequently Used), FIFO (First-In-First-Out), etc. LRU is the policy where the cached data that has not been accessed for the longest time is evicted first when the cache is full. LFU is the policy where the cached data that has been accessed for the least number of times is evicted first when the cache is full. FIFO is the policy where the cached data that has been stored for the longest time is evicted first when the cache is full.

A backend developer needs to use various caching tools and techniques to implement these aspects in their backend code and data. Some examples of caching tools and techniques are:

  • Redis: Redis is an open source in-memory data structure store that can be used as a database, cache or message broker. It supports various data types such as strings, lists, sets, hashes, etc. It also provides features such as replication, transactions, pub/sub, etc.
  • Memcached: Memcached is an open source distributed memory caching system that can be used to speed up dynamic web applications by caching data and objects in memory. It supports simple key-value pairs and provides features such as sharding, expiration, etc.
  • Varnish: Varnish is an open source web application accelerator that can be used to cache HTTP requests and responses between the backend and the frontend or other components. It supports various protocols such as HTTP, HTTPS, WebSocket, etc. It also provides features such as load balancing, compression, caching policies, etc.

Some of the resources that can help a backend developer learn more about caching are:

Conclusion

Backend development is not only writing API endpoints. It is a complex and challenging field that requires a variety of skills and tasks beyond creating interfaces for data exchange. A backend developer needs to be proficient in backend programming languages and frameworks, databases and data structures, APIs design and implementation, servers and hosting environments, testing and debugging, security, messaging systems, and caching.

By learning these skills and tasks,
a backend developer can create and maintain high-quality backend code that powers the functionality and data of any web application.


Are you interested in learning GitHub but don't know where to start? Try my course on LinkedIn Learning: Learning GitHub.

LinkedIn Learning


Thanks for reading this post, I hope you found it interesting!

Feel free to follow me to get notified when new articles are out 🙂

Top comments (34)

Collapse
 
j471n profile image
Jatin Sharma

Now imagine being a full stack.

Collapse
 
cgoing4dev profile image
cgoing

sveltekit good meta framework

Collapse
 
Sloan, the sloth mascot
Comment deleted
 
cgoing4dev profile image
cgoing

this comment recurring

Collapse
 
nimmneun profile image
Stefan

Having transitioned to backend almost a decade ago, I kinda consider APIs for interactions with GUIs/(web)apps as frontends, while understanding systems to systems comm's as actual backend

e.g. the whole process that could be triggered by e.g. a purchase on a marketplace (stock management, logistics, payment gateways and processing, supply chain management / procurement, price & product updates, return management, all kinds of ERP processes or comm's between different ERPs even and all the included DBMSs, storage implementations etc.)

on top, everything you wrote =)

backend is so much more than what I thought 10 years ago.

Collapse
 
kasuken profile image
Emanuele Bartolesi

Thanks for the feedback!

Collapse
 
brianl profile image
Brian Lim

I'm sure it is

Now write me those endpoints! I want the endpoint to have this specific shape and speed and size get to it! Nothing else matters! 😎

P.S. Backend developers are generally paid more and and given more authority and power and have more job security than frontend developers. So there's nothing to worry about. If anything backend developers should splash a little frontend for the lean times (you aren't always going to work in a company with unlimited money). Of course in a large enough org with enough sense frontend is treated as high paying and specialized as well. It's a business cope to treat frontend as an afterthought due to insufficient budget not a technical rule.

Collapse
 
chriisduran profile image
Christopher Duran

Yeah, be a backend dev means more than write endpoints, in fact, contain a lot of task neccessary for make works properly the core of a web service.

Image description

Collapse
 
giannoudis profile image
Jani Giannoudis

Very good article Emanuele.

I think another important aspect in backend development is quality management with productivity tools like ReSharper and NDepend.

For me, the biggest challenge in backend development is business orientation:

  • Are my concepts understandable to the business?
  • How easy is it to customize the backend?
  • How easy is it to automate?
  • Can the backend be automatically tested with business tests?
Collapse
 
juanvegadev profile image
Juan Vega • Edited

And then, once you have learned about everything and you feel like "I can control a BE development". You need to start taking into account everything related to infrastructure management, deployments and cloud (servers) cost.

Building an API could be difficult, building an API keeping low latency and high availability without impacting the cloud bill in the long term is another challenge by itself and a BE eng must be accountable of everything from code to operate a service.

Collapse
 
areyouadev1 profile image
AreYouADev

Another aspect that a backend development should consider is understanding monitoring and performance metrics

Collapse
 
kasuken profile image
Emanuele Bartolesi

yes, good feedback.

Collapse
 
artydev profile image
artydev

Interesting, thank you

Collapse
 
andreabarbata profile image
andreabarbata • Edited

Great overview! I'm sharing this with my collegues. Another important and often overlooked skill for a BE dev is writing documentation, not only for the FE devs but also for other members of the team who might use your code later. It's incredible how much time you could save with a well-written documentation.

Collapse
 
kasuken profile image
Emanuele Bartolesi

Yes, you are totally right and I agree with you!

Collapse
 
basspod profile image
Paul ODell

I write APIs for work every day. Great article! You pretty much covered every single important part of the API design.

Collapse
 
kasuken profile image
Emanuele Bartolesi

Thank you very much for the feedback!