loading...
Cover image for Super Backend Man - How to become an awesome backend developer

Super Backend Man - How to become an awesome backend developer

bhanuchaddha profile image Bhanu Chaddha ・5 min read

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?

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
  2. Package hierarchy
  3. Exception Handling
  4. Domain models
  5. Input and Output models
  6. Errorcodes
  7. Validations
  8. Resilience (Resilience4J)
  9. Service Contract
  10. Common Rest Client
  11. API Documentation (Swagger)
  12. Code generation - Project Lombok
  13. Aggregation
  14. Routing
  15. Transactions
  16. Stateless Service
  17. Service Manual
  18. Service Deprecation
  19. Service Versioning ( Multiple versions, backward compatibility)
  20. Changelog

Design Patterns and Best Practices

  1. Gang of four
  2. SOLID
  3. KISS
  4. DRY
  5. Enterprise Integration Patterns
  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
  3. SOAP integration
  4. Mainframe Integration
  5. Server Side Events
  6. Analytics
  7. Recommendation Engine
  8. GraphQL Server
  9. Handling Data stream
  10. Video Streaming
  11. Image Processing
  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 )
  8. Centralized Configuration
  9. Service Discovery
  10. Sidecar deployment
  11. Client Side load balancing
  12. API Gateway
  13. Distributed Caching
  14. Event driven microservice
  15. Message Queue
  16. Pub/Sub
  17. Real time even processing - Kafka
  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 )
  4. Container Orchestration- Kubernetes
  5. Jenkins
  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 )
  3. Integration Testing
  4. Performance Testing ( Apache JMeter )
  5. End to End testing ( Selenium, Cucumber)
  6. Chaos Monkey
  7. A-B Testing

Tools

  1. IDE -Visual Studio Code
  2. Rest Client - Postman
  3. Automation - Apache JMeter
  4. GIT
  5. Terminal/ Command Prompt/ Cmder
  6. Database Client Sqlectron
  7. Packaging tools - Maven, Gradle

Development Libraries

  1. Google guice
  2. Apache Commons
  3. Project Lombok

Security

  1. Authentication
  2. Authorization
  3. OAuth
  4. JWT
  5. 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!!

Posted on Apr 9 by:

Discussion

markdown guide
 

I recently had the opportunity to work on a greenfield project as a backend developer. I was involved in everything from designing a scalable architecture and provisioning them to implementing a CI/CD pipeline to setting up monitoring and alerting systems. I suddenly gained appreciation for things that were under the hood when I was just "writing code" on a pre-existing system.

Thanks for the comprehensive list and I hope to see it grow even more in the future.

 

Awesome!! Must have been a great experience. Although I have learned tons of thing working on an existing systems, like service architecture and developing reusable and robust common components but given a choice , I also prefer to work on green field project.

From what you learned in your project, do you thing there is any toping missing in above list?