Backend
212 items tagged with "backend"
Best Practices3
Hexagonal Architecture (Ports and Adapters)
An architecture that isolates core application logic behind ports, with adapters connecting external concerns like databases and UIs, so the core stays independent of technology.
Domain-Driven Design (DDD)
A software design approach that models complex business domains in code, using a shared language and bounded contexts to align software structure with the business it serves.
Modular Monolith
An architecture that keeps a single deployable application but enforces strong internal module boundaries, capturing many microservices benefits without distributed-system complexity.
Patterns16
Object Pool
Reuses a set of pre-initialized, expensive-to-create objects from a managed pool instead of creating and destroying them on demand, improving performance.
Front Controller
Channels all incoming requests through a single handler that centralizes cross-cutting concerns like routing, authentication, and logging before dispatching to handlers.
Read-Through Cache
A caching strategy where the cache itself loads missing data from the backing store on a miss, so application code reads only from the cache.
Write-Through Cache
A caching strategy where every write goes to the cache and the backing store synchronously, keeping the two consistent at the cost of write latency.
Write-Behind Cache
A caching strategy where writes update the cache immediately and are flushed to the backing store asynchronously, maximizing write throughput at the cost of durability.
Refresh-Ahead Cache
A caching strategy that proactively reloads hot entries before they expire, so reads of popular keys never pay miss latency.
Command Query Responsibility Segregation (CQRS)
Separates the write model that handles commands from the read model that serves queries, letting each be optimized, scaled, and evolved independently.
Event-Driven Architecture
An architectural style where components communicate by producing and reacting to events, enabling loose coupling, asynchronous flow, and independent scaling.
Idempotent Writer
A pattern that makes repeated writes safe by ensuring duplicate operations produce the same result, essential for at-least-once delivery and retries.
Producer-Consumer
A concurrency pattern where producers place work on a shared bounded queue and consumers process it independently, decoupling rates and smoothing load.
Thread Pool
A concurrency pattern that reuses a fixed set of worker threads to execute many tasks, avoiding per-task thread creation cost and bounding concurrency.
Reactor
An event-handling pattern that demultiplexes I/O events on one or few threads and dispatches them synchronously to registered handlers, enabling scalable non-blocking servers.
Optimistic Concurrency Control
A concurrency strategy that lets transactions proceed without locking and validates at commit, retrying on conflict, assuming conflicts are rare.
Pessimistic Locking
A concurrency strategy that acquires locks on data before use to prevent concurrent modification, ensuring correctness under high contention at the cost of throughput.
Two-Phase Commit (2PC)
A distributed-transaction protocol that coordinates multiple participants to commit or abort atomically through a prepare phase and a commit phase.
Model-View-Controller (MVC)
Separates an application into a model (data and rules), a view (presentation), and a controller (input handling), decoupling concerns for maintainability.
Anti-Patterns43
God Object
A single class or module that knows or does too much, concentrating most of the system's responsibilities in one place and becoming a maintenance bottleneck.
Circular Dependency
Two or more modules that depend on each other directly or transitively, forming a cycle that prevents independent building, testing, and reasoning.
Leaky Abstraction
An abstraction that fails to fully hide its underlying implementation, forcing callers to understand and depend on the details it was meant to encapsulate.
Anemic Domain Model
Domain objects that hold data but no behavior, with all logic pushed into separate service classes, draining the object model of its purpose.
Fat Controller
Web or API controllers that accumulate business logic, validation, and data access instead of delegating, becoming bloated and impossible to test or reuse.
Spaghetti Code
Code with tangled, unstructured control flow and no clear modularity, where execution jumps unpredictably and dependencies are impossible to follow.
Stringly Typed Code
Using strings to represent data that has real structure or a fixed set of values, discarding type safety and pushing errors to runtime.
Magic Strings
Hardcoded string literals that act as keys, flags, or identifiers, with no central definition, inviting typos and silent failures.
Exception Swallowing
Catching exceptions and then ignoring them, hiding failures so that errors pass silently and bugs become nearly impossible to diagnose.
N+1 Query Problem
Loading a list, then firing one extra query per row to fetch related data, turning a single page load into hundreds of round-trips.
God Table
A single table accumulating dozens or hundreds of unrelated columns for many concepts, becoming a contention and maintenance bottleneck.
Chatty Data Access
Making many fine-grained round-trips to the database for one logical operation, so network latency dominates and throughput collapses under load.
No Connection Pooling
Opening a fresh database connection per request or query and closing it after, paying high handshake cost and exhausting connection limits under load.
Busy-Waiting (Spin-Waiting)
Repeatedly polling a condition in a tight loop instead of blocking, burning CPU cycles while waiting for an event that the scheduler could deliver for free.
Lock Contention
Many threads competing for the same lock, serializing work that should run in parallel and turning a multicore machine into an expensive single-core one.
Deadlock-Prone Locking
Acquiring multiple locks in inconsistent orders so two threads can each hold one lock while waiting for the other, freezing both forever.
Broken Double-Checked Locking
A lazy-initialization idiom that checks a field outside a lock, locks, then checks again — but without proper memory barriers it returns partially constructed objects.
Thread-Per-Request Overload
Spawning a dedicated OS thread for every incoming request, so concurrency is capped by thread count and memory, collapsing under load instead of degrading gracefully.
Blocking the Event Loop
Running CPU-heavy or synchronous work on a single-threaded event loop, stalling every other in-flight request until it finishes.
Synchronous-Over-Async (sync-over-async)
Blocking a thread to wait on an asynchronous operation's result, combining the costs of both models and risking thread-pool starvation or deadlock.
Chatty I/O
Making many small, fine-grained remote or storage calls where a few coarse-grained calls would do, multiplying latency and overhead per operation.
Memory Leak
Allocating memory that is never released because references are unintentionally retained, so usage grows without bound until the process slows, thrashes, or crashes.
Unbounded Cache
A cache with no size limit, eviction, or expiry that grows until it consumes all memory and turns a performance optimization into an out-of-memory failure.
Cache Stampede (Dogpile Effect)
When a hot cache entry expires, many concurrent requests all miss and recompute it at once, hammering the backing store and amplifying load instead of absorbing it.
Retry Storm
Aggressive, uncoordinated retries during a partial outage that multiply traffic against an already-struggling dependency and turn a blip into a full collapse.
Thundering Herd
Many clients or threads waking and acting at the same instant — on a recovery, a timer, or a wakeup — creating a synchronized load spike that overwhelms the resource they target.
Head-of-Line Blocking
A single slow or stuck item at the front of a strictly ordered queue holds up everything behind it, even when the later items are unrelated and ready to proceed.
False Sharing
Independent variables that happen to live on the same CPU cache line, so updates by different cores invalidate each other's caches and silently destroy multicore performance.
Missing Back-Pressure
A producer that pushes work faster than the consumer can handle, with no mechanism to slow it down, so queues grow unbounded until memory or the downstream collapses.
Resource Leak
Acquiring file handles, sockets, connections, or threads without reliably releasing them, so a finite pool is exhausted and the application stops being able to do work.
Over-Caching
Adding caches everywhere to chase speed, multiplying staleness, invalidation bugs, and operational complexity for marginal gains that profiling never justified.
Rolling Your Own Crypto
Designing or implementing custom cryptographic algorithms or protocols instead of using vetted, standard libraries and primitives.
SQL Injection via String Concatenation
Building SQL queries by concatenating untrusted input into the query string, letting attackers alter query logic and access or destroy data.
Missing Input Validation
Accepting and processing external input without checking its type, range, format, or size, opening the door to injection, corruption, and crashes.
Trusting Client-Side Validation
Relying on browser or app-side checks as the security boundary, when any client can be bypassed and send arbitrary requests directly to the server.
Verbose Error Leakage
Returning stack traces, SQL errors, internal paths, or version details to clients, handing attackers a map of the system to exploit.
Mass Assignment
Binding incoming request data directly onto domain objects, letting attackers set fields like isAdmin or accountBalance that were never meant to be writable.
Insecure Deserialization
Deserializing untrusted data with formats or libraries that can instantiate arbitrary types, enabling remote code execution and other attacks.
Breaking Changes Without Versioning
Changing an API's contract in place without versioning or deprecation, silently breaking existing clients and eroding trust.
Ignoring Idempotency
Designing write operations that cause duplicate effects when retried, so network blips and client retries create double charges or duplicate records.
Missing Pagination (Unbounded Result Sets)
Collection endpoints that return all records at once with no pagination, causing huge payloads, slow queries, and out-of-memory failures as data grows.
Leaky API Abstraction
An API that exposes internal database schemas, implementation details, or storage structures, coupling clients to internals and blocking safe evolution.
Entity Services
Decomposing microservices around data entities (CRUD wrappers per table) rather than business capabilities, creating chatty, anemic, tightly coupled services.
Tutorials13
Migrating from Express to Fastify
Step-by-step tutorial for migrating a Node.js Express application to Fastify for better performance
Implementing Redis Caching in Node.js
Add Redis caching to your Node.js application for improved performance
Real-time Communication with WebSockets
Implement real-time features using WebSockets
How to deploy a serverless REST API on AWS Lambda
Build and deploy a production REST API using AWS Lambda and API Gateway with infrastructure as code.
How to build an HTTP API with Azure Functions
Create and deploy a serverless HTTP-triggered API on Azure Functions using the Azure CLI and a consumption plan.
How to build a CRUD API on Amazon DynamoDB
Model data and implement create, read, update, and delete operations against Amazon DynamoDB from Node.js.
How to build a CRUD API on Azure Cosmos DB
Model documents and perform CRUD operations against Azure Cosmos DB for NoSQL from a .NET application.
How to deploy a Python function on Google Cloud Functions
Write and deploy an HTTP-triggered Python function on Google Cloud Functions (2nd gen) with the gcloud CLI.
How to Build a REST API with Best Practices
Design resource-oriented routes, use correct status codes, validate input, handle errors consistently, and version your REST API.
How to Build a GraphQL Server
Define a schema, write resolvers, solve the N+1 problem with batching, and add error handling and depth limits to a GraphQL API.
How to build and test a Node.js REST API with Jest and Supertest
Build a small Express REST API and test its endpoints with Jest and Supertest, including setup and teardown.
How to test a FastAPI application with pytest and TestClient
Test a FastAPI app's endpoints using pytest and the built-in TestClient, with fixtures and dependency overrides.
How to test a Go HTTP API with httptest
Write fast, isolated tests for a Go HTTP handler using the standard library's net/http/httptest package.
Blueprints9
Express to Fastify Blueprint
Node.js backend migration from Express to Fastify
Java EE on WebSphere to Spring Boot Blueprint
Migrate Java EE applications off WebSphere onto Spring Boot with embedded servers, externalized config, and container-native packaging.
.NET Framework to .NET 8 Modernization Blueprint
Migrate legacy .NET Framework applications to cross-platform .NET 8 with the SDK project format, modern hosting, and EF Core.
Apache Struts to Spring MVC Blueprint
Replace legacy Apache Struts web applications with Spring MVC to remove unmaintained framework risk and modernize the web tier.
Ruby on Rails Major Version Upgrade Blueprint
Upgrade a Ruby on Rails application across major versions with incremental dual-boot, deprecation cleanup, and gem compatibility work.
Legacy PHP to Laravel Blueprint
Modernize procedural or legacy-framework PHP into a structured Laravel application with Composer, an ORM, and modern PHP 8 features.
Node.js Callbacks to Async and ESM Blueprint
Modernize callback-based CommonJS Node.js services to async/await with promises and ES modules for cleaner control flow.
Scala Akka Actor Modernization Blueprint
Modernize legacy Scala Akka classic actor systems to typed actors and current streaming APIs while addressing licensing changes.
Big Ball of Mud to Modular Monolith Blueprint
Restructure a tangled monolith into a modular monolith with enforced module boundaries before considering any service split.
Migrations10
.NET 8 to .NET 9 Migration
Upgrade from .NET 8 LTS to .NET 9 with improved performance and new features
.NET Framework to .NET 8 Migration
Modernize from .NET Framework to cross-platform .NET 8 (ASP.NET Core, modern configuration, updated dependencies)
Express.js to Fastify Migration
Migrate Express middleware and routes to Fastify with schema validation and performance tuning
Express.js to NestJS Migration
Migrate Express.js REST API to structured NestJS with TypeScript
Laravel 10 to Laravel 11 Migration
Upgrade Laravel from 10 to 11 with new directory structure
PHP 5 to PHP 8 Migration
Upgrade legacy PHP 5 codebases to PHP 8 with framework/library modernization
PHP 7 to PHP 8 Migration
Upgrade PHP 7 codebases to PHP 8 with dependency updates and compatibility testing
Rails 6 to Rails 7 Migration
Upgrade a Rails 6 app to Rails 7, addressing breaking changes and updating JS/CSS tooling
Spring Boot 2 to Spring Boot 3 Migration
Upgrade Spring Boot 2.x to 3.x with Java 17+ and Jakarta EE
Spring MVC to Spring WebFlux Migration
Migrate Spring MVC apps to reactive Spring WebFlux where it provides clear value
Products4
Playbooks7
Java EE to Spring Boot Program Playbook
An enterprise program for migrating Java EE applications to Spring Boot with modern build, runtime, and deployment practices.
.NET Framework to .NET Modernization Program Playbook
A portfolio program for moving .NET Framework applications to modern cross-platform .NET with containerized, cloud-ready deployment.
Rails Major-Version Upgrade Program Playbook
A staged program for upgrading Ruby on Rails applications across major versions with dual-boot validation and gem modernization.
PHP Major-Version Upgrade Program Playbook
A program for upgrading PHP applications across major versions with automated rectoring, dependency updates, and staged rollout.
Node.js Major-Version Upgrade Program Playbook
A fleet-wide program for upgrading Node.js services across major runtime versions with dependency and ESM modernization.
Modular Monolith Adoption Program Playbook
A program to restructure a tangled monolith into a modular monolith with enforced boundaries before any service extraction.
Spring Boot 2 to 3 Upgrade Program Playbook
A fleet program to upgrade Spring Boot 2 services to Spring Boot 3, covering the Jakarta namespace move, Java baseline, and observability changes.
Checklists3
API Modernisation Checklist
Checklist for modernizing and versioning APIs
Node.js Runtime Upgrade Checklist
Checks for upgrading a Node.js application across major LTS versions, covering dependencies, deprecations, and ESM changes.
Go Service Modernization Checklist
Modernize a Go service for production: modules, context propagation, observability, and idiomatic error handling.
Stacks56
MERN Stack
MongoDB, Express.js, React, Node.js - Full-stack JavaScript solution
MEAN Stack
MongoDB, Express.js, Angular, Node.js - Enterprise JavaScript stack
LAMP Stack
Linux, Apache, MySQL, PHP - Classic web development stack
T3 Stack
Next.js, TypeScript, Tailwind, tRPC, Prisma - Type-safe full-stack
PERN Stack
PostgreSQL, Express.js, React, Node.js - Relational DB full-stack
Django HTMX Stack
Django, HTMX, Alpine.js - Modern Python web stack
Rails Hotwire Stack
Ruby on Rails, Hotwire, Turbo - Rails 7+ modern approach
Phoenix LiveView Stack
Elixir, Phoenix, LiveView - Real-time without JavaScript
Go Microservices Stack
Go, gRPC, Kubernetes, PostgreSQL - High-performance services
Supabase Stack
Supabase, Next.js, Tailwind - Open source Firebase alternative
Spring Cloud Stack
Spring Boot, Spring Cloud, Kubernetes - Enterprise Java
.NET Azure Stack
ASP.NET Core, Azure Services, SQL Server - Microsoft ecosystem
LEMP
A classic web stack of Linux, Nginx, MySQL, and PHP that serves dynamic sites with high concurrency and low overhead.
Laravel + Vue
A PHP fullstack pairing the Laravel framework with a Vue front end, often via Inertia, for productive, full-featured web applications.
Rails + Hotwire
A server-driven Ruby on Rails stack using Hotwire (Turbo and Stimulus) to build reactive web apps with minimal custom JavaScript.
Django + React
A decoupled stack with a Django REST backend and a React front end, separating API and UI for flexible, scalable web applications.
Phoenix LiveView
An Elixir stack using Phoenix LiveView to build real-time, server-rendered interactive UIs over WebSockets with little JavaScript.
ASP.NET + Blazor
A .NET stack pairing ASP.NET Core with Blazor to build interactive web UIs in C#, sharing code across server and client.
Spring Boot + Thymeleaf
A Java stack pairing Spring Boot with the Thymeleaf template engine for server-rendered web applications with robust enterprise tooling.
FastAPI + React
A modern Python stack with a FastAPI backend and a React front end, joining high-performance async APIs to a rich interactive UI.
Elixir + Phoenix
A backend-focused web stack using Elixir on the BEAM with the Phoenix framework for highly concurrent, fault-tolerant web services.
HTMX + Go
A hypermedia-driven stack pairing HTMX with a Go backend to build interactive web apps using HTML over the wire and minimal JavaScript.
Django + DRF
A Python backend stack combining Django with Django REST Framework to build secure, well-structured REST APIs and admin-driven apps.
Spring Boot Enterprise Stack
Java backend stack built on Spring Boot with PostgreSQL and Redis for production REST services and enterprise applications.
.NET Web API Stack
Modern C# backend stack using ASP.NET Core, Entity Framework Core, and SQL Server or PostgreSQL for high-performance cross-platform services.
FastAPI + SQLAlchemy Stack
Async Python backend stack using FastAPI, SQLAlchemy, and PostgreSQL for high-performance, type-hinted REST and ML-serving APIs.
Go + gRPC Stack
Compiled Go backend stack using gRPC and Protocol Buffers with PostgreSQL for fast, strongly-typed inter-service communication.
Go + Gin + Postgres Stack
Lightweight Go REST backend using the Gin web framework with PostgreSQL and Redis for fast, simple, high-throughput HTTP APIs.
Node + Express + Mongo Stack
JavaScript backend stack using Node.js, Express, and MongoDB for flexible, schema-light REST APIs and rapid prototyping.
NestJS + Postgres Stack
Structured TypeScript backend stack using NestJS with PostgreSQL and an ORM for scalable, modular, enterprise-grade Node.js services.
Rails API Stack
Ruby on Rails backend in API mode with PostgreSQL and Redis for convention-driven, fast-to-build REST services and SaaS backends.
Quarkus Cloud-Native Java Stack
Cloud-native Java backend using Quarkus with GraalVM native compilation and PostgreSQL for fast-starting, low-memory containerized services.
Ktor Kotlin Backend Stack
Asynchronous Kotlin backend using the Ktor framework with PostgreSQL and coroutines for lightweight, idiomatic, non-blocking services.
Rust Axum/Actix Backend Stack
High-performance, memory-safe Rust backend using Axum or Actix with PostgreSQL for low-latency, resource-efficient services.
Phoenix Elixir Stack
Concurrent Elixir backend using the Phoenix framework on the BEAM VM with PostgreSQL for fault-tolerant, real-time, highly concurrent services.
Vue + Laravel SPA
A Vue single-page frontend talking to a Laravel JSON API, a common PHP full-stack pairing for content-heavy and SaaS applications.
React + Spring Boot
A React frontend backed by a Java Spring Boot REST API, a workhorse enterprise stack for large, long-lived business applications.
Angular + Spring Boot
An Angular frontend over a Spring Boot Java backend, a strongly opinionated, fully typed enterprise stack favored by large IT organizations.
React + Django REST Framework
A React frontend consuming a Django REST Framework API, a productive Python full-stack for data-rich and ML-adjacent web applications.
SvelteKit + Postgres
A full-stack SvelteKit application with server routes and a PostgreSQL database, delivering fast, lightweight web apps with minimal JavaScript.
Express + React + Postgres
A classic JavaScript full stack: an Express REST API on Node.js, a React frontend, and a PostgreSQL database, flexible and widely understood.
Fastify + Prisma
A high-performance Node.js backend using Fastify with schema-based validation and Prisma ORM over PostgreSQL, built for low-overhead, type-safe APIs.
AdonisJS Full-Stack
An opinionated, batteries-included Node.js MVC framework with its own ORM, auth, and validation, bringing a Laravel-like experience to TypeScript.
Vapor Swift Server
A server-side Swift web framework using async/await and a typed ORM, letting iOS-focused teams build backends in the same language as their apps.
Play Framework (Scala)
A reactive, stateless web framework on the JVM written for Scala (and Java), built on Akka for non-blocking, high-throughput web applications and APIs.
Ktor + Exposed
A lightweight, coroutine-based Kotlin web framework paired with the Exposed SQL library, for idiomatic, asynchronous Kotlin backends and APIs.
Rocket (Rust) Stack
An ergonomic, type-safe Rust web framework with compile-time route checking and request guards, paired with a database for fast, safe backends.
Axum + SQLx (Rust)
A modern async Rust backend built on the Tokio runtime with the Tower middleware ecosystem and compile-time-checked SQL via SQLx.
Symfony + API Platform
A robust PHP stack using the Symfony framework and API Platform to generate REST and GraphQL APIs from data models with documentation and standards built in.
ASP.NET MVC + EF Core
Microsoft's server-rendered web stack using ASP.NET Core MVC and Entity Framework Core over SQL Server or Postgres, for robust enterprise web applications.
FastAPI + HTMX
A modern Python stack pairing the async FastAPI framework with HTMX to build dynamic, server-rendered web apps with little custom JavaScript.
Gin + GORM
A fast, lightweight Go web stack pairing the Gin HTTP framework with the GORM ORM, popular for high-performance REST APIs and backend services.
Echo + Ent
A performant Go web stack combining the Echo framework with Ent, an entity framework that generates type-safe, graph-aware data access code from schemas.
Supabase Realtime Stack
A realtime application stack built on Supabase, streaming Postgres changes, broadcast messages, and presence to clients over WebSockets atop row-level security.
Firebase Realtime Stack
A serverless realtime app stack on Google Firebase using Cloud Firestore and the Realtime Database, with Auth, Cloud Functions, and offline sync for mobile and web.
Salesforce Platform
An enterprise low-code and pro-code application platform on Salesforce, using Apex, Lightning Web Components, and the data model to extend CRM and build business apps.
Comparisons34
Go vs Rust
Two modern systems-oriented languages: Go optimizes for simplicity and fast development, Rust for memory safety without a garbage collector and maximum control.
Go vs Java
Go offers a lean runtime and fast startup for cloud services, while Java brings a mature ecosystem, the JVM, and decades of enterprise tooling.
Python vs Go
Python prioritizes expressiveness and a vast data/AI ecosystem, while Go prioritizes raw performance, concurrency, and lean deployment for services.
Node.js vs Python
Two leading backend runtimes: Node.js offers event-driven, non-blocking I/O with JavaScript everywhere, while Python brings readability and a vast data ecosystem.
Java vs Kotlin
Both run on the JVM and interoperate fully, but Kotlin offers more concise, modern syntax and null safety while Java offers ubiquity and the longest track record.
Java vs C#
Two mature, statically typed languages with managed runtimes: Java on the JVM with broad portability, C# on .NET with strong language features and tooling.
Kotlin vs Scala
Two modern JVM languages: Kotlin emphasizes pragmatism and approachability, while Scala offers deeper functional programming power and a more expressive type system.
TypeScript vs Flow
Two static type systems for JavaScript: TypeScript is the de facto standard with a vast ecosystem, while Flow is a lighter type checker from Meta with declining adoption.
Python vs R
Two leading languages for data work: Python is a general-purpose language strong across the data and ML pipeline, while R is purpose-built for statistics and visualization.
PHP vs Node.js
Two popular web backends: PHP powers a huge share of the web with mature frameworks, while Node.js offers event-driven JavaScript across the full stack.
Ruby vs Python
Two expressive, dynamic languages: Ruby is beloved for web development with Rails, while Python dominates data, ML, and general-purpose scripting.
Deno vs Node.js
Two JavaScript/TypeScript runtimes: Node.js is the mature, ubiquitous standard, while Deno offers secure-by-default execution and built-in TypeScript and tooling.
Bun vs Node.js
Bun is a fast all-in-one JavaScript runtime and toolkit built on JavaScriptCore, while Node.js is the mature, ubiquitous V8-based standard.
JVM vs GraalVM Native Image
Run JVM applications on the traditional HotSpot JVM with JIT, or compile them ahead-of-time to native images with GraalVM for fast startup and low memory.
Go vs Node.js for APIs
For building HTTP and gRPC APIs, Go offers compiled performance and easy concurrency, while Node.js offers rapid development and full-stack JavaScript.
Async/Await vs Threads
Two models for concurrency: cooperative asynchronous programming with an event loop, versus preemptive OS threads. Each suits different workloads.
REST in Go vs REST in Java
Building REST APIs in Go with its lean standard library versus in Java with mature frameworks like Spring Boot. Different trade-offs in speed, structure, and tooling.
OpenJDK vs GraalVM
Two JDK distributions: OpenJDK is the reference Java runtime, while GraalVM adds a high-performance JIT, ahead-of-time native compilation, and polyglot support.
.NET vs .NET Framework
Modern .NET (formerly .NET Core) is the cross-platform, actively developed runtime, while .NET Framework is the legacy Windows-only platform now in maintenance.
Rust vs Go for CLI Tools
Both produce single static binaries ideal for command-line tools: Go favors fast builds and simplicity, Rust favors performance, rich CLI libraries, and safety.
Java Virtual Threads vs Reactive Programming
Two approaches to scalable concurrency on the JVM: Project Loom's virtual threads keep simple blocking code, while reactive programming uses non-blocking streams.
Spring Boot vs Quarkus
Spring Boot is the mature, ubiquitous Java framework; Quarkus is a cloud-native, Kubernetes-first framework optimized for fast startup and low memory.
Spring Boot vs Micronaut
Spring Boot uses runtime reflection and a huge ecosystem; Micronaut uses compile-time dependency injection for fast startup and low memory.
Django vs FastAPI
Django is a batteries-included framework for full web apps; FastAPI is a modern, async, type-driven framework focused on high-performance APIs.
Django vs Flask
Django is a full-featured framework with conventions baked in; Flask is a minimal microframework you extend as needed.
FastAPI vs Flask
FastAPI is async-first with type-driven validation and auto docs; Flask is a mature, synchronous microframework with a vast extension ecosystem.
Express vs Fastify
Express is the ubiquitous, minimal Node.js framework; Fastify is a modern alternative built for higher throughput and schema-based validation.
NestJS vs Express
NestJS is a structured, opinionated TypeScript framework with DI and modules; Express is a minimal, unopinionated Node.js framework.
Rails vs Django
Rails and Django are both mature, batteries-included MVC frameworks; Rails uses Ruby and convention over configuration, Django uses Python.
Laravel vs Symfony
Laravel is a productivity-focused PHP framework with elegant syntax; Symfony is a modular, enterprise-grade framework whose components underpin Laravel.
ASP.NET Core vs Spring Boot
ASP.NET Core is Microsoft's high-performance .NET framework; Spring Boot is the dominant Java framework. Both are mature, enterprise-grade choices.
Gin vs Echo
Gin and Echo are two of the most popular Go web frameworks, both fast and minimal, differing mainly in API design and built-in features.
Actix vs Axum
Actix Web and Axum are leading Rust web frameworks; Actix is feature-rich and battle-tested, Axum is built on Tower with strong type-driven ergonomics.
Phoenix vs Rails
Phoenix is an Elixir framework built for concurrency and real-time features; Rails is the mature Ruby framework known for productivity and conventions.
Benchmarks5
SPECjbb 2015
Java server benchmark modeling a supermarket company's transaction processing to measure JVM and server-side Java throughput and latency.
TechEmpower Web Framework Benchmarks
Open benchmark suite comparing web frameworks and platforms across standardized request types like JSON, single-query, and plaintext throughput.
wrk HTTP Benchmark
Modern, multithreaded HTTP load-testing tool that generates high request volume from a single machine and reports throughput and latency distribution.
ApacheBench (ab)
Simple, ubiquitous command-line HTTP benchmarking tool for quick single-endpoint throughput and latency measurement, bundled with Apache.
SPECjbb 2015
Standard Java server benchmark modeling a supermarket company's business logic to measure throughput and critical response-time performance.
FAQs3
What is a microservice?
A microservice is a small, independently deployable service that owns a single business capability and communicates with other services over the netwo...
Monolith vs microservices: which should I choose?
A monolith packages all functionality into a single deployable unit, which keeps development, testing, and deployment simple and is usually the right ...
What is Domain-Driven Design (DDD)?
Domain-Driven Design (DDD) is an approach to building software that puts the business domain and its language at the center of the design. It encourag...
Glossaries6
Structured Logging
The practice of emitting log entries as machine-readable structured data, typically key-value pairs or JSON, rather than free-form text strings.
Monolith
A monolith is an application built and deployed as a single, unified unit, where all functionality runs in one process or codebase rather than being split into independent services.
Modular Monolith
A modular monolith is a single deployable application whose internal code is organized into well-isolated modules with explicit boundaries, combining a monolith's simple operations with microservice-style separation of concerns.
Concurrency
Concurrency is the ability of a system to make progress on multiple tasks during overlapping time periods, structuring work so tasks can be interleaved, regardless of whether they execute simultaneously.
Dependency Injection
Dependency injection is a design technique in which an object receives the other objects it depends on from an external source rather than creating them itself, improving testability and decoupling.
Garbage Collection
Garbage collection is automatic memory management in which a runtime reclaims memory occupied by objects that are no longer reachable by the program, freeing developers from manual deallocation.