Super Backend Man - How to become an awesome backend developer
Tags: backend, developer, handbook, roadmap
Published: 2020-04-09 11:33:14

You must have seen below image multiple times and If you ask my opinion, I would say the Iceberg could have been even more deeper. In my professional career, I have had hard time to answer this amazing question "What all a backend developer should know?".

![How Deep is backend?](https://dev-to-uploads.s3.amazonaws.com/i/hi46vk0ii1bbdn2rx0s0.png)


Answer to this question is not a brief one and that's the reason, I thought of writing this article. Audience of this article are the people who already have the basic knowledge of one of the backend programming language like Java, Python, C#, Go or Node.js etc and wish to mature their craft.

Originally Posted at https://www.metakoder.com/blog/backend-developer-handbook/

Doing backend well is not easy. All the crucial components and most of the business rules live in the backend of an application, Its like brain to your whole system. So it's really important that backend should be reliable, maintainable and extendable.

But what do I mean by "reliable, maintainable and extendable" here? And how does a production grade backend software and architecture look like? This is what I want to demonstrate in this article. Consider this article as the index of a **"Backend Developer Handbook"**. May be that's what I would like to name it , when it's finished.

Below you will find list of technologies and practices you would come across as a professional backend developer in the industry. A lot of frameworks and tools mentioned below are of Java/ JVM stack but concepts can also be translated to any other language like Python, C#, Go or Node.js. I would try my best to mention the language specific tools for each language. You can also mention in comments if you are aware of any better tools, I would add those in the article.

Goal of this article is to put good-to-know and must-know backend related topics at single place so that one can have a checklist of what he knows or may be it could help you to decide what you should learn next.

You can google these topics and I am pretty sure that you would find plenty of tutorial on each topic. I have also added relevant links to few of the topics, which might help you to shorten your search time. I have a plan to write detailed articles on these topics. I would link those coming articles to the respective topic in future.

So let's begin!!

## Service Design - Best practices for writing a Service
   
   1. [Reactive Programming](https://gist.github.com/staltz/868e7e9bc2a7b8c1f754)
   2. Package hierarchy 
   3. Exception Handling
   4. Domain models
   5. Input and Output models
   6. Errorcodes
   7. Validations
   8. [Resilience (Resilience4J)](https://resilience4j.readme.io/)
   9. Service Contract
   10. Common Rest Client
   11. [API Documentation (Swagger)](https://swagger.io/)
   12. Code generation - [Project Lombok](https://projectlombok.org/)
   13. Aggregation
   14. Routing
   15. Transactions
   16. Stateless Service
   17. Service Manual
   18. Service Deprecation 
   19. Service Versioning ( Multiple versions, backward compatibility)
   20. [Changelog](https://keepachangelog.com/en/1.0.0/)

## Design Patterns and Best Practices
   
   1. [Gang of four](https://sourcemaking.com/design_patterns )
   2. [SOLID](https://www.jrebel.com/blog/solid-principles-in-java)
   3. [KISS](https://www.interaction-design.org/literature/article/kiss-keep-it-simple-stupid-a-design-principle)
   4. [DRY](https://en.wikipedia.org/wiki/Don%27t_repeat_yourself)
   5. [Enterprise Integration Patterns](https://www.enterpriseintegrationpatterns.com/patterns/messaging/)
   6. Refactoring

## Development Practices
   1. Right way to review a Pull Request
   2. Typical Developer Day - Time distribution
   3. Business Knowledge Documentation
   4. Code ownership, Open Source model
   5. Handling Production Incidents

## Common Used cases
   
   1. CRUD API
   2. [REST Integration](https://github.com/bhanuchaddha/open-weather-integration)
   3. SOAP integration
   4. Mainframe Integration
   5. [Server Side Events](https://github.com/bhanuchaddha/world-o-meter-clone)
   6. Analytics 
   7. [Recommendation Engine](https://predictionio.apache.org/)
   8. [GraphQL](https://graphql.org/) Server
   9. Handling Data stream
   10. Video Streaming
   11. [Image Processing](https://medium.com/nybles/create-your-first-image-recognition-classifier-using-cnn-keras-and-tensorflow-backend-6eaab98d14dd)
   12. Pagination during fetching items list
   13. Filters during fetching items list

## Platform Architecture
   1. Scalability
   2. Domain Driven Design
   3. Simple crud application
   4. Three Tier architecture
   5. Monolith vs Microservices
   6. DB: SQL vs NoSQL vs Casandra, Neo4j, graph db, time series db
   7. Free text search capability ( [Elastic Search ](https://www.elastic.co/))
   8. Centralized Configuration
   9. Service Discovery
   10. Sidecar deployment
   11. Client Side load balancing
   12. API Gateway
   13. Distributed Caching
   14. [Event driven microservice](https://github.com/bhanuchaddha/world-o-meter-clone)
   15. Message Queue
   16. [Pub/Sub](https://www.metakoder.com/blog/using-redis-with-spring-boot/)
   17. [Real time even processing - Kafka](https://kafka.apache.org/)
   18. Load Balancing
   19. Inter-process communication
       1. REST
       2. Avro or Protocol Buffers 
       3. Message Bus
   20. Distributed Session Management

## Infrastructure
   1. Service Proxy
   2. Internet Gateway

## Performance
   
   1. Query Tuning
   2. Indexing
   3. Database Sharding
   4. Read Replicas
   5. Caching
   6. Multi-Threading
   7. Asynchronous Programming
   8. Non Blocking Programming

## Production Deployment (CI/CD)
   1. Continuous Development
   2. Staging Environments
   3. [Containers ( Docker )](https://www.metakoder.com/blog/containerise-springboot-application-with-docker/)
   4. [Container Orchestration- Kubernetes](https://kubernetes.io/) 
   5. [Jenkins](https://jenkins.io/)
   6. Deployment to Cloud
   7. Green-Blue Deployment

## Monitoring And Visibility
   1. Monitoring Dashboard
   2. Service admin features
   3. Distributed Tracing (Zipkin, Sleuth)
   4. Metrics, Prometheus, Grafana
   5. Service Dependency graph
   
## Logging and Aggregation
1.  ELK Stack
2.  Splunk
   
## Testing
1. Unit Testing
2. API Testing ( [RestEasy](https://resteasy.github.io/) )
3. Integration Testing
4. Performance Testing ( [Apache JMeter](https://jmeter.apache.org/) )
5. End to End testing ( Selenium, Cucumber)
6. [Chaos Monkey](https://netflix.github.io/chaosmonkey/)
7. A-B Testing

## Tools
 1. IDE -[Visual Studio Code](https://code.visualstudio.com/)
 2. Rest Client - [Postman](https://www.postman.com/)
 3. Automation - [Apache JMeter](https://jmeter.apache.org/)
 4. [GIT](https://git-scm.com/)
 5. Terminal/ Command Prompt/ [Cmder](https://cmder.net/)
 6. Database Client [Sqlectron](https://sqlectron.github.io/)
 7. Packaging tools - [Maven](https://maven.apache.org/), [Gradle](https://gradle.org/) 

## Development Libraries
 1. [Google guice](https://github.com/google/guice)
 2. [Apache Commons](https://commons.apache.org/)
 3. [Project Lombok](https://projectlombok.org/)

## Security
 1. Authentication
 2. Authorization
 3. [OAuth](https://oauth.net/2/)
 4. [JWT](https://jwt.io/)
 5. [OpenId](https://en.wikipedia.org/wiki/OpenID)

## Cloud Native
 1. Serverless
 2. Auto Scaling
 3. Highly Available



Looks like, this list would always be an ongoing work. I would keep adding and updating the topics as I would become wiser. You can also help me to make this list better. If you think any other backend development related topic should be part of this list, do mention that in comments and I would add the topic in the article.

Thank for reading!! Cheers!!