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?".
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
- Reactive Programming
- Package hierarchy
- Exception Handling
- Domain models
- Input and Output models
- Errorcodes
- Validations
- Resilience (Resilience4J)
- Service Contract
- Common Rest Client
- API Documentation (Swagger)
- Code generation - Project Lombok
- Aggregation
- Routing
- Transactions
- Stateless Service
- Service Manual
- Service Deprecation
- Service Versioning ( Multiple versions, backward compatibility)
- Changelog
Design Patterns and Best Practices
- Gang of four
- SOLID
- KISS
- DRY
- Enterprise Integration Patterns
- Refactoring
Development Practices
- Right way to review a Pull Request
- Typical Developer Day - Time distribution
- Business Knowledge Documentation
- Code ownership, Open Source model
- Handling Production Incidents
Common Used cases
- CRUD API
- REST Integration
- SOAP integration
- Mainframe Integration
- Server Side Events
- Analytics
- Recommendation Engine
- GraphQL Server
- Handling Data stream
- Video Streaming
- Image Processing
- Pagination during fetching items list
- Filters during fetching items list
Platform Architecture
- Scalability
- Domain Driven Design
- Simple crud application
- Three Tier architecture
- Monolith vs Microservices
- DB: SQL vs NoSQL vs Casandra, Neo4j, graph db, time series db
- Free text search capability ( Elastic Search )
- Centralized Configuration
- Service Discovery
- Sidecar deployment
- Client Side load balancing
- API Gateway
- Distributed Caching
- Event driven microservice
- Message Queue
- Pub/Sub
- Real time even processing - Kafka
- Load Balancing
- Inter-process communication
- REST
- Avro or Protocol Buffers
- Message Bus
- Distributed Session Management
Infrastructure
- Service Proxy
- Internet Gateway
Performance
- Query Tuning
- Indexing
- Database Sharding
- Read Replicas
- Caching
- Multi-Threading
- Asynchronous Programming
- Non Blocking Programming
Production Deployment (CI/CD)
- Continuous Development
- Staging Environments
- Containers ( Docker )
- Container Orchestration- Kubernetes
- Jenkins
- Deployment to Cloud
- Green-Blue Deployment
Monitoring And Visibility
- Monitoring Dashboard
- Service admin features
- Distributed Tracing (Zipkin, Sleuth)
- Metrics, Prometheus, Grafana
- Service Dependency graph
Logging and Aggregation
- ELK Stack
- Splunk
Testing
- Unit Testing
- API Testing ( RestEasy )
- Integration Testing
- Performance Testing ( Apache JMeter )
- End to End testing ( Selenium, Cucumber)
- Chaos Monkey
- A-B Testing
Tools
- IDE -Visual Studio Code
- Rest Client - Postman
- Automation - Apache JMeter
- GIT
- Terminal/ Command Prompt/ Cmder
- Database Client Sqlectron
- Packaging tools - Maven, Gradle
Development Libraries
Security
Cloud Native
- Serverless
- Auto Scaling
- 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!!
Top comments (3)
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?
Thank you so much for this awesome comprehensive list! We, humans, tend to not know what we don't know and this list reveals exactly that what I need to know.