Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

374 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Backend Engineer's Guide

License: MIT Contributions Welcome PRs Welcome

A comprehensive collection of backend engineering notes, covering essential topics such as API design, databases, deployment strategies, distributed systems, networking, performance optimization, security best practices, and more. This repository serves as both a personal knowledge base and a community resource for backend engineers at all experience levels.

backend_notes

Table of Contents

Overview

This guide is designed to provide practical insights and real-world examples for backend engineers. Each topic is organized into its own Markdown file within the notes directory, making it easy to navigate and reference specific areas of interest.

  • Comprehensive Coverage – Spans the full backend engineering landscape from API design to distributed systems
  • Practical Focus – Emphasizes real-world applications and industry best practices
  • Regularly Updated – Content is continuously refined to reflect current technologies and methodologies
  • Community-Driven – Open to contributions and feedback from the developer community

Getting Started

Prerequisites

  • Basic understanding of programming concepts
  • Familiarity with command-line interfaces
  • A text editor or IDE for viewing Markdown files (VS Code, Obsidian, or any Markdown viewer recommended)

Quick Start

Clone the repository to your local machine:

git clone https://github.com/djeada/Backend-Engineers-Guide.git
cd Backend-Engineers-Guide/notes

Browse the topics by navigating through the notes directory, or view the content directly on GitHub.

How to Use This Guide

  1. Sequential Learning – Start from API Design and progress through each section for a structured learning path
  2. Reference Guide – Jump directly to specific topics when you need quick answers
  3. Deep Dives – Explore the references section for additional resources on topics that interest you

Notes

API Design

Topic Description Link
API Communication Protocols Introduction to API design principles and patterns πŸ“– Read
REST RESTful API architecture and best practices πŸ“– Read
GraphQL Query language for APIs with flexible data fetching πŸ“– Read
gRPC High-performance RPC framework using Protocol Buffers πŸ“– Read
Stateful vs Stateless State management patterns in API design πŸ“– Read
Data Transmission Methods and protocols for data exchange πŸ“– Read

Network Communications

Topic Description Link
Network Communications Fundamentals of network communication πŸ“– Read
TCP vs UDP Comparison of transport layer protocols πŸ“– Read
HTTP Protocol Hypertext Transfer Protocol deep dive πŸ“– Read
WebSockets Real-time bidirectional communication πŸ“– Read
Metrics and Analysis Network performance monitoring, analysis, and modern observability tools (Prometheus, Grafana, Jaeger, Perf, ClickHouse, and more) πŸ“– Read

Web Servers

Topic Description Link
Web Server Overview Introduction to web server architecture πŸ“– Read
Static & Dynamic Content Serving different types of web content πŸ“– Read
Tomcat Apache Tomcat servlet container πŸ“– Read
Apache Apache HTTP Server configuration and usage πŸ“– Read
Nginx High-performance web server and reverse proxy πŸ“– Read
Forward Proxies Client-side proxy servers πŸ“– Read
Reverse Proxies Server-side proxy patterns πŸ“– Read
Load Balancing Traffic distribution strategies πŸ“– Read

Databases

Topic Description Link
Types of Databases Overview of database categories and use cases πŸ“– Read
Transactions ACID properties and transaction management πŸ“– Read
Indexes Database indexing strategies for performance πŸ“– Read
Isolation Levels Concurrency control and isolation πŸ“– Read
Data Warehousing Analytics and data warehouse design πŸ“– Read
Replication Database replication strategies πŸ“– Read
Halloween Problem Classic database update anomaly πŸ“– Read

Caching

Topic Description Link
Caching Strategies Cache patterns and eviction policies πŸ“– Read
Redis In-memory data store for caching πŸ“– Read
Content Delivery Networks CDN architecture and implementation πŸ“– Read
Database Caching Query and result caching techniques πŸ“– Read
Memcached Distributed in-memory key-value cache πŸ“– Read
HTTP Caching Cache-Control, ETags, and browser caching πŸ“– Read
Application-Level Caching In-process caches and two-tier patterns πŸ“– Read

Data Processing

Topic Description Link
Pub/Sub vs Queue Messaging pattern comparison πŸ“– Read
Messaging System Integration Integrating message brokers πŸ“– Read
Batch Processing Large-scale batch data processing πŸ“– Read
Stream Processing Real-time data stream processing πŸ“– Read
ETL and ELT Pipelines Extract-Transform-Load patterns, data quality, and incremental loading πŸ“– Read
Lambda and Kappa Architecture Batch + streaming hybrid vs stream-only data architectures πŸ“– Read
Workflow Orchestration DAG-based pipeline scheduling, retries, and observability πŸ“– Read

Data Formats

Topic Description Link
Protocol Buffers Google's language-neutral serialization format πŸ“– Read
XML Extensible Markup Language πŸ“– Read
JSON JavaScript Object Notation πŸ“– Read
YAML YAML Ain't Markup Language πŸ“– Read

Security

Topic Description Link
Authentication Auth mechanisms and implementation πŸ“– Read
TLS Transport Layer Security πŸ“– Read
Security Vulnerabilities Common vulnerabilities and mitigations πŸ“– Read
Security Best Practices Industry security standards and measures πŸ“– Read
Third-Party Cookies Cookie security and privacy concerns πŸ“– Read
Secure Containers Container image hardening, runtime security, and network isolation πŸ“– Read
Credentials Management Managing and supplying secrets safely in production πŸ“– Read
Supply Chain Attacks Dependency confusion, typosquatting, SBOM, and artefact signing πŸ“– Read

Deployment

Topic Description Link
CentOS on DigitalOcean Server deployment on DigitalOcean πŸ“– Read
Static Python Website Deploying Python websites to Netlify πŸ“– Read
Docker Containerisation fundamentals, Dockerfile best practices, Compose, and security πŸ“– Read
Kubernetes Container orchestration, core objects, autoscaling, and storage πŸ“– Read
CI/CD Pipelines Continuous integration and delivery with GitHub Actions and GitLab CI πŸ“– Read
Deployment Strategies Rolling, Blue-Green, Canary, Feature Flags, and strategy selection guide πŸ“– Read
Infrastructure as Code Terraform and Ansible for reproducible, version-controlled infrastructure πŸ“– Read

Distributed Systems

Topic Description Link
Coordination Services Distributed coordination and consensus πŸ“– Read
Gossip Protocol Decentralized information dissemination πŸ“– Read
Linearizability Strong consistency guarantees πŸ“– Read
Concurrent Writes Handling write conflicts πŸ“– Read
Operational Transform Collaborative editing algorithms πŸ“– Read
Algorithms Summary Overview of distributed system algorithms πŸ“– Read
Optimistic vs Pessimistic Locking Concurrency control strategies πŸ“– Read

Scripts

The scripts/ directory contains small, self-contained Python scripts that bring the topics above to life with runnable demos. Every script uses only the Python standard library.

Directory Script Topic
api_design/ rest_api_example.py Minimal REST API server with CRUD endpoints
api_design/ graphql_example.py GraphQL-like query engine with field selection
network_communications/ tcp_udp_example.py TCP vs UDP echo server/client comparison
network_communications/ http_request_example.py HTTP methods, headers, and content types
databases/ transaction_example.py SQLite transactions and ACID properties
databases/ index_example.py Index performance and EXPLAIN QUERY PLAN
caching/ lru_cache_example.py LRU cache implementation and eviction
caching/ cache_strategies_example.py Write-through, write-back, and cache-aside patterns
data_formats/ format_conversion.py JSON, XML, and YAML conversion
data_formats/ protocol_buffer_example.py Protocol-buffer-like binary serialization
data_processing/ pub_sub_example.py In-process publish/subscribe broker
data_processing/ batch_processing_example.py Batch processing pipeline with configurable batches
data_processing/ stream_processing_example.py Tumbling/sliding windows and alert-style stream processing
data_processing/ dead_letter_queue_example.py Dead-letter queue with retry limits and poison-message routing
data_processing/ etl_pipeline_example.py ETL pipeline with incremental extraction, transform, and upsert load
data_processing/ workflow_orchestration_example.py DAG orchestrator with topological sort, parallel waves, retries, and backfill
security/ hashing_example.py Password hashing, token generation
security/ jwt_example.py JWT-like token creation and verification
distributed_systems/ gossip_protocol_example.py Gossip protocol cluster simulation
distributed_systems/ vector_clock_example.py Vector clock causality tracking
server_technologies/ load_balancer_example.py Load balancing strategy simulation
server_technologies/ reverse_proxy_example.py Reverse proxy routing by path prefix
deployment/ health_check_example.py Health-check and readiness endpoints
deployment/ rolling_deploy_example.py Rolling deployment simulation

See the scripts README for prerequisites and usage instructions.

Projects

The projects/ directory contains guided labs that combine notes, scripts, and longer walkthroughs into focused backend engineering exercises.

Project Focus Link
API Reliability Lab API versioning, idempotency, and webhook verification πŸ“– Open
Network Resilience Lab TCP/UDP trade-offs, HTTP request flow, DNS caching, and circuit breakers πŸ“– Open
Security Controls Lab Password hashing, JWT verification, encryption concepts, and rate limiting πŸ“– Open
Data Interchange Lab JSON/XML/YAML conversion and Protocol Buffers-style binary serialization πŸ“– Open
Request Pipeline Lab Middleware composition for logging, auth, tracing, and CORS πŸ“– Open
Cluster Membership Lab Gossip propagation and eventual consistency in distributed clusters πŸ“– Open
Database Reliability Lab Transactions, schema evolution, indexes, and connection pooling πŸ“– Open
Cache Patterns Lab LRU eviction, TTL expiration, and cache write strategies πŸ“– Open
Messaging Reliability Lab Pub/sub, batch processing, stream processing, and dead-letter queues πŸ“– Open
Distributed Coordination Lab Leader election, vector clocks, quorums, and consistent hashing πŸ“– Open
Grafana Alert Test Environment Multi-service lab for Grafana alerting, Prometheus metrics, and notification policies πŸ“– Open
Reverse Proxy Lab Path-based routing and load-balancing strategies using standard-library demos πŸ“– Open
Deployment Rollout Lab Rolling deploys, canary releases, and readiness checks πŸ“– Open

See the projects README for the full project index.

References

πŸ“š Books

Title Author(s) Link
Designing Data-Intensive Applications Martin Kleppmann Amazon
Building Microservices Sam Newman Amazon
Clean Architecture Robert C. Martin Amazon
Domain-Driven Design Eric Evans Amazon
Release It! Michael T. Nygard Amazon
The Art of Scalability Martin L. Abbott, Michael T. Fisher Amazon
Microservices Patterns Chris Richardson Amazon
Continuous Delivery Jez Humble, David Farley Amazon
Site Reliability Engineering Betsy Beyer et al. Amazon

πŸŽ“ Online Courses and Resources

Resource Platform
Node.js Tutorial for Beginners The Net Ninja
The Complete Node.js Developer Course Udemy
Building Scalable Java Microservices with Spring Boot Coursera
Microservices Architecture edX
Backend Development with Python Pluralsight
Node.js and Express FreeCodeCamp
Building Web APIs with ASP.NET Core Microsoft Learn
Community Tutorials DigitalOcean
REST API Tutorial RESTful API
Learning Center Postman

Contributing

We welcome contributions from the community! Here's how you can help:

Ways to Contribute

  • Report Issues – Found an error or have a suggestion? Open an issue
  • Improve Content – Fix typos, clarify explanations, or add examples
  • Add New Topics – Have expertise in an area not yet covered? We'd love your input
  • Share Resources – Know of great learning materials? Add them to the references

Contribution Guidelines

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/your-feature-name)
  3. Make your changes following the existing formatting conventions
  4. Commit your changes (git commit -m 'Add: brief description of changes')
  5. Push to your branch (git push origin feature/your-feature-name)
  6. Open a Pull Request

For major changes, please open an issue first to discuss what you would like to change.

License

This project is licensed under the MIT License - see the LICENSE file for details.


⭐ If you find this guide helpful, please consider giving it a star!

About

Welcome to my backend engineering notes. I've spent many hours organizing these Markdown files into clear topics, API design, databases, deployment, distributed systems, networking, performance, security, and more, each stored in the notes directory.

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages