Skills you Need to become a Backend Developer

If you see a job description for a backend developer, it may seem intimidating. So many skills are listed. I hope this list of resource can be starting point for you to start learning about backend development skills.

Table of content

Language

Let's start with choosing the Programming Language for you. So here is top programming language used to working on backend.

+---------------------+---------------------+
| Golang              | Java                |
+---------------------+---------------------+
| JavaScript (NodeJS) | TypeScript (NodeJS) |
+---------------------+---------------------+
| Scala               | PHP                 |
+---------------------+---------------------+
| C#                  | Python              |
+---------------------+---------------------+
| Elixir              | Haskell             |
+---------------------+---------------------+
| OCaml               | Clojure             |
+---------------------+---------------------+
| C++                 | Rust                |
+---------------------+---------------------+
| Ruby                |                     |
+---------------------+---------------------+

Most of that language is used at big company, and for me all is the best, the important thing is that you understand how to use and optimize it.

So which one do I need to choose then? Choose the most you love and understand. But if you are really beginner I suggest is choose JavaScript or Golang.

Shell Scripting

Backend developer will be working with terminal a lot. In some case you need to write shell script for automation, build script etc. So it's good to have skill writing shell script. When you understand how to write shell script you can be more production at your work. And you can start with learning BASH.

Scripting on a linux platform is what you need to learn, so that you can write scripts, for example, on docker files, on continuous integration, etc. And here is some useful command line application you can start learning.

echo, cat, source, grep, awk, sed, lsof, curl, tar,
wget, tail, head, less, find, ssh, kill, xargs

Container

Most of Big company using container to make deployment easy. Container is used to abstract environment to run the application. Containers allow us to ensure compatibility between local, staging and production environments.

Container
+-------------------+
| Docker            |
+-------------------+
| Containerd        |
+-------------------+
| cri-o             |
+-------------------+
| rkt               |
+-------------------+
| OpenVZ            |
+-------------------+

Cluster management and deployment
+----------------------+
| Kubernetes           |
+----------------------+
| OpenShift (Readhat)  |
+----------------------+
| EKS (Amazon)         |
+----------------------+
| Docker Swarm         |
+----------------------+
| Nomand               |
+----------------------+

Resource:

CI/CD

Continuous Integration and Continuous Delivery is automation after you done making a new changes to your application. The CI pipeline will test you code changes and run uni test, they will make sure that everything is working properly after the process is done you will be able to merge the changes with the main code that currently running in production.

After the CI success the next step is to deliver you new changes to dev, staging or production. The advantages with Continuous Delivery everyone within your organization with restricted permission can do the deployment with a click of a button depending of the tools you use. So we can speed up the lifecycle the development of our application.

Here are the tools most commonly used for CI/CD.

+----------------------+
| Github Action        |
+----------------------+
| TravisCI             |
+----------------------+
| CircleCI             |
+----------------------+
| Spinnaker            |
+----------------------+
| Ansible              |
+----------------------+
| Jenkins              |
+----------------------+
| Terraform            |
+----------------------+

It is actually DevOps responsibility that most of these things are, but you need to understand it so you know what to do when you run into problems with your CI/CD pipeline.

Resource:

Database

The next thing you need to learn is database. Database is one of the most important skill you need to learn after picking programming language. There is a lot of database these days. But if you are just starting to learn this database.

SQL
+--------------+---------------+
| MySQL        | Postgres      |
+--------------+---------------+
| SQL Server   | MariaDB       |
+--------------+---------------+
| SQLite       | OracleDB      |
+--------------+---------------+

NoSQL
+--------------+---------------+
| MongoDB      | Cassandra     |
+--------------+---------------+
| HBase        | DynamoDB      |
+--------------+---------------+
| Realm        | Neo4j         |
+--------------+---------------+

You can see more list from wikipedia.

Picking a Database is not an easy decision, but if you just starting one of sql and no sql database, you can start with MySQL or Postgres for SQL and for no sql MongoDB or Apache Cassandra.

The thing you should learn about database is.

  • Understanding data type (Table, Key-value, Document, Colum-store, Graph Store)
  • Basic CRUD Operation (Create, Read, Update, Delete)
  • Query optimization
  • Indexing
  • Database normalization
  • Database nature what is the advantages and disadvantages.
  • Transaction - Make sure the query is working.
  • N+1 Problem.
  • Data replication
  • Sharding strategies
  • Consistency, Availability and Partition Tolerance

Here some youtube video to learn this.

And here for the books.

Additionally, there are many resources you can find on the internet.

Caching

Caching is used to make serving data more faster. You need to learn this, when to use cache and how to do it correctly.

Server side
+----------------+
| Redis          |
+----------------+
| Memcached      |
+----------------+

CDN
+----------------+
| Cloudfare      |
+----------------+
| CloudFront     |
+----------------+
| Fastly         |
+----------------+

Among the most common tasks carried out by backend developers is server-side caching. You can start by learning Redis.

Here is some video tutorial about redis.

And the book

More on data is doing full text search. Generally, we need to separate transactional data from search data in most cases. So for full text search database you need to learn.

Self hosted
+----------------+
| Elasticsearch  |
+----------------+
| Apache Solr    |
+----------------+

Cloud
+----------------+
| Algolia        |
+----------------+
| Azure Search   |
+----------------+

Here some resource to learn Elasticsearch and Apache Solr

Message Broker

In most cases, when building services, we need to ensure that they can interact with each other. The technology that will enable this is called a message broker.

+------------------------+
| Kafka                  |
+------------------------+
| RabbitMQ               |
+------------------------+
| Redis                  |
+------------------------+
| Amazon SQS and SNS     |
+------------------------+
| Google PubSub          |
+------------------------+

Kafka is the most popular message broker these days, and most of company use it. So when you want to learn message broker you can start with Kafka.

Resource:

Architecture

After you learn some building block for building web application the next step is learn about architecture pattern. Understanding architecture will help you to decide what architecture to use when you create new application.

+----------------------+
| Monolithic           |
+----------------------+
| Microservices        |
+----------------------+
| Serverless           |
+----------------------+

Resource:

Testing

The most important thing to do after developing an application is to test it. Testing can be done in several ways.

  1. Unit Testing - The smallest part of testing which test parts of code you write.
  2. End to End testing - This test is run outside you code.
  3. Load test - This used to measure the performance of your code, how much request can be handled and and other metric related to performance of your application.
Unit test
+----------------------+
| TDD                  |
+----------------------+
| BDD                  |
+----------------------+

Load testing
+----------------------+
| Vegeta               |
+----------------------+
| JMeter               |
+----------------------+
| Gatling              |
+----------------------+
| K6                   |
+----------------------+

There also some term about testing.

  1. Sanity Testing: Testing that is done to ensure that all the major and vital functionalities of the application/system are working correctly. This is generally done after a smoke test.
  2. Smoke Testing: Testing that is done after each build is released to test to ensure build stability. It is also called as build verification testing.
  3. Regression Tests: Testing performed to ensure that adding new code, enhancements, fixing of bugs is not breaking the existing functionality or causing any instability and still works according to the specifications. Regression tests need not be as extensive as the actual functional tests but should ensure just the amount of coverage to certify that the functionality is stable.
  4. Integration Tests: When the system relies on multiple functional modules that might individually work perfectly, but have to work coherently when clubbed together to achieve an end to end scenario, validation of such scenarios is called Integration testing.
  5. Beta/Usability Testing: Product is exposed to the actual customer in a production like an environment and they test the product. The user’s comfort is derived from this and the feedback is taken. This is similar to that of User Acceptance testing.

Source Functional Testing

Resource:

APIs

If you are mobile or frontend developer before you might think that backend developer is the guy who made API for your application. But that's just small part of what backend developers do.

So here's what API type you need to learn.

+----------------------+
| REST API             |
+----------------------+
| GraphQL              |
+----------------------+
| gRpc                 |
+----------------------+
| API Gateway          |
+----------------------+
| Service mesh         |
+----------------------+

Most common used API is REST API and it use JSON data structure to send information to user. There also standard for structuring your json api, you can learn it here.

Web Security

Web security is the process developers utilize to protect web applications from potential threats.

+----------------------+
| HTTPS                |
+----------------------+
| CORS                 |
+----------------------+
| SSL/TLS              |
+----------------------+
| JWT                  |
+----------------------+
| Bcrypt               |
+----------------------+
| OpenID               |
+----------------------+
| OAuth                |
+----------------------+
| Token Authentication |
+----------------------+
| Cookie               |
+----------------------+

Resource:

Monitoring

When the service deployed to production we need to make sure that working properly, and if there any problem we need to have data to investigate and fix the bug. There are several ways to monitor our service.

  1. Crash Monitor - Monitor stack trace whenever our application is crash.
  2. Telemetry - Collect metric, logs and trace across distributed system.
  3. Resource Usage - Monitor CPU, Memory and Storage usage.
  4. Alerting - Get notification when service down or something not working.
  5. Database Monitoring - Get insight what query that slow down database.
+------------------------+
| Grafana                |
+------------------------+
| Prometheus             |
+------------------------+
| Sentry                 |
+------------------------+
| Lightstep              |
+------------------------+
| Datadog                |
+------------------------+
| New Relic              |
+------------------------+
| Airbrake               |
+------------------------+

Most of these software is third party software so what you need to learn is how the metric is collected and how to integrate with your service. You also need to understand what monitoring tools you need for your application, for example if you want to have great stack trace better to use datadog or sentry but if you want to get performance metric is better to use New relic or grafana etc.

The resources you use will vary depending on your cloud provider, since they will have great tools integrated with the server management system. Most of company will be using Google Cloud, Amazon Web Service or Microsoft Azure.

Resource:

Cloud Provider

Most of Big company these days don't run their own server and cloud provider is providing a lot of feature the help us develop system easier and better. Here is the most commonly used cloud provider.

+------------------------+
| Google Cloud Platform  |
+------------------------+
| Amazon Web Service     |
+------------------------+
| Microsoft Azure        |
+------------------------+

Once again, the responsibility of managing deployment at a cloud provider falls to DevOps, but sometimes you need to learn about the service you will use. Furthermore, they also provide dashboards for each service that provide critical information that you also need to understand what metric and data they provide.

Keep Learning

The technology for backend developer keep growing, there is always more better ways to develop backend application, so you should never stop learning.

There also infographic roadmap here.