Backend Engineering Skill — Quick Reference
This skill equips backend engineers with execution-ready patterns for modern API development, database design, authentication, caching, observability, error handling, testing, and deployment. Apply these patterns when you need REST/GraphQL API design, database schema modeling, authentication flows, performance optimization, or production-grade backend architectures.
Modern Best Practices (December 2025): GraphQL adoption, TypeScript 5.9+ strict mode, TypeScript 7 native preview (Project Corsa) for faster tooling https://devblogs.microsoft.com/typescript/progress-on-typescript-7-december-2025/, unknown over any, structured logging, secret managers, and secure defaults (rate limiting, headers, input validation).
Quick Reference
| Task |
Tool/Framework |
Command |
When to Use |
| REST API |
Express 5.x / Fastify 5.2 / NestJS 11.x |
npm create express-app |
Traditional CRUD APIs, public APIs |
| GraphQL API |
Apollo Server/Pothos |
npm install @apollo/server |
Flexible data fetching, avoiding over-fetching |
| Database ORM |
Prisma 6.x / Drizzle |
npx prisma init |
Type-safe database access, migrations |
| Authentication |
JWT/NextAuth.js/Passport |
npm install jsonwebtoken |
User sessions, API authentication |
| Validation |
Zod/Joi |
npm install zod |
Runtime type validation at API boundaries |
| Caching |
Redis/Upstash |
npm install ioredis |
Read-heavy operations, session storage |
| Background Jobs |
BullMQ/Agenda |
npm install bullmq |
Email sending, async processing |
| Testing |
Vitest/Jest/Supertest |
vitest run |
Unit, integration, E2E testing |
| Logging |
Pino/Winston |
npm install pino |
Structured logging, observability |
| API Documentation |
Swagger/OpenAPI |
@nestjs/swagger |
Auto-generated API docs |
When to Use This Skill
Use this skill when you need:
- REST or GraphQL API design and implementation (GraphQL adoption increasing)
- Database schema design and migrations (Prisma schema-first approach, Prisma Accelerate for serverless)
- Authentication and authorization patterns (JWT, OAuth2, sessions, NextAuth.js)
- Error handling and validation strategies (Zod/Joi TypeScript-first validation)
- API security best practices (Helmet.js headers, OWASP API Security Top 10, rate limiting)
- Performance optimization and caching (Redis, Prisma connection pooling, singleton pattern)
- Testing strategies (Vitest, Jest, Playwright for E2E, supertest for API testing)
- Background job processing (BullMQ, Agenda)
- API documentation and versioning (Swagger/OpenAPI auto-generation)
- Deployment and production readiness (PM2 process management, Docker, secret managers)
- Monitoring and observability (structured logging with Pino/Winston, Sentry, OpenTelemetry)
Decision Tree: Backend Technology Selection
Backend project needs: [API Type]
├─ REST API?
│ ├─ Simple CRUD → Express 5.x + Prisma 6.x
│ ├─ Enterprise features → NestJS 11.x (built-in DI, modules)
│ └─ High performance → Fastify 5.2 (faster than Express)
│
├─ GraphQL API?
│ ├─ Code-first → Pothos GraphQL (TypeScript)
│ └─ Schema-first → Apollo Server + GraphQL Codegen
│
├─ Authentication Strategy?
│ ├─ JWT tokens → jsonwebtoken + httpOnly cookies
│ ├─ OAuth/Social → NextAuth.js or Passport.js
│ └─ Magic links → Custom implementation + email service
│
├─ Database Layer?
│ ├─ Type-safe ORM → Prisma 6.x (best for TypeScript)
│ ├─ SQL-first → Drizzle ORM or Kysely
│ └─ Raw SQL → pg (PostgreSQL 18 driver)
│
├─ Caching Strategy?
│ ├─ Distributed cache → Redis (multi-server)
│ ├─ Serverless cache → Upstash Redis
│ └─ In-memory cache → Node.js Map (single server)
│
└─ Background Jobs?
├─ Complex workflows → BullMQ (Redis-backed, retries)
└─ Simple scheduling → node-cron or Agenda
Language Alternatives:
- Node.js 24 LTS / 25 Current (Express 5.x / Fastify 5.2 / NestJS 11.x + Prisma 6.x): TypeScript-first, async/await, Web Storage API
- Python 3.14+ (FastAPI 0.115+ + SQLAlchemy 2.0+): Data-heavy services, async support, evolving concurrency model, modern typing
- Go 1.25+ (Fiber 2.x + GORM 1.25+): High concurrency, native performance, experimental encoding/json/v2
- Rust 1.92+ (Axum 0.8+ + SeaORM 1.1+): Memory safety, zero-cost abstractions, Rust 2024 edition
See templates/ for language-specific starter templates.
API Design Patterns (Dec 2025)
Idempotency Patterns
All mutating operations MUST support idempotency for retry safety.
Implementation:
// Idempotency key header
const idempotencyKey = request.headers['idempotency-key'];
const cached = await redis.get(`idem:${idempotencyKey}`);
if (cached) return JSON.parse(cached);
const result = await processOperation();
await redis.set(`idem:${idempotencyKey}`, JSON.stringify(result), 'EX', 86400);
return result;
| Do |
Avoid |
| Store idempotency keys with TTL (24h typical) |
Processing duplicate requests |
| Return cached response for duplicate keys |
Different responses for same key |
| Use client-generated UUIDs |
Server-generated keys |
Pagination Patterns
| Pattern |
Use When |
Example |
| Cursor-based |
Large datasets, real-time data |
?cursor=abc123&limit=20 |
| Offset-based |
Small datasets, random access |
?page=3&per_page=20 |
| Keyset |
Sorted data, high performance |
?after_id=1000&limit=20 |
Prefer cursor-based pagination for APIs with frequent inserts.
Error Response Standard (Problem Details)
Use a consistent machine-readable error format (RFC 9457 Problem Details): https://www.rfc-editor.org/rfc/rfc9457
{
"type": "https://example.com/problems/invalid-request",
"title": "Invalid request",
"status": 400,
"detail": "email is required",
"instance": "/v1/users"
}
Health Check Patterns
// Liveness: Is the process running?
app.get('/health/live', (req, res) => {
res.status(200).json({ status: 'ok' });
});
// Readiness: Can the service handle traffic?
app.get('/health/ready', async (req, res) => {
const dbOk = await checkDatabase();
const cacheOk = await checkRedis();
if (dbOk && cacheOk) {
res.status(200).json({ status: 'ready', db: 'ok', cache: 'ok' });
} else {
res.status(503).json({ status: 'not ready', db: dbOk, cache: cacheOk });
}
});
Migration Rollback Strategies
| Strategy |
Description |
Use When |
| Backward-compatible |
New code works with old schema |
Zero-downtime deployments |
| Expand-contract |
Add new, migrate, remove old |
Schema changes |
| Shadow tables |
Write to both during transition |
High-risk migrations |
Optional: AI/Automation Extensions
Note: AI-assisted backend patterns. Skip if not using AI tooling.
AI-Assisted Code Generation
| Tool |
Use Case |
| GitHub Copilot |
Inline suggestions, boilerplate |
| Cursor |
AI-first IDE, context-aware |
| Claude Code |
CLI-based development |
Review requirements for AI-generated code:
- All imports verified against package.json
- Type checker passes (strict mode)
- Security scan passes
- Tests cover generated code
Navigation
Resources
- resources/backend-best-practices.md — Node.js patterns for auth, error handling, database, performance, testing, observability
- resources/go-best-practices.md — Go idioms, concurrency, error handling, GORM usage, testing, profiling
- resources/rust-best-practices.md — Ownership, async, Axum, SeaORM, error handling, testing
- resources/python-best-practices.md — FastAPI, SQLAlchemy, async patterns, validation, testing, performance
- README.md — Folder overview and usage notes
- data/sources.json — External references per language/runtime
- Shared checklists: ../software-clean-code-standard/templates/checklists/backend-api-review-checklist.md, ../software-clean-code-standard/templates/checklists/secure-code-review-checklist.md
Shared Utilities (Centralized patterns — extract, don't duplicate)
- ../software-clean-code-standard/utilities/auth-utilities.md — Argon2id, jose JWT, OAuth 2.1/PKCE
- ../software-clean-code-standard/utilities/error-handling.md — Effect Result types, correlation IDs
- ../software-clean-code-standard/utilities/config-validation.md — Zod 3.24+, Valibot, secrets management
- ../software-clean-code-standard/utilities/resilience-utilities.md — p-retry v6, opossum v8, OTel spans
- ../software-clean-code-standard/utilities/logging-utilities.md — pino v9 + OpenTelemetry integration
- ../software-clean-code-standard/utilities/testing-utilities.md — Vitest, MSW v2, factories, fixtures
- ../software-clean-code-standard/utilities/observability-utilities.md — OpenTelemetry SDK, tracing, metrics
- ../software-clean-code-standard/resources/clean-code-standard.md — Canonical clean code rules (
CC-*) for citation
Templates
- templates/nodejs/template-nodejs-prisma-postgres.md — Node.js + Prisma + PostgreSQL
- templates/go/template-go-fiber-gorm.md — Go + Fiber + GORM + PostgreSQL
- templates/rust/template-rust-axum-seaorm.md — Rust + Axum + SeaORM + PostgreSQL
- templates/python/template-python-fastapi-sqlalchemy.md — Python + FastAPI + SQLAlchemy + PostgreSQL
Related Skills
- ../software-architecture-design/SKILL.md — System decomposition, SLAs, and data flows
- ../software-security-appsec/SKILL.md — Authentication/authorization and secure API design
- ../ops-devops-platform/SKILL.md — CI/CD, infrastructure, and deployment safety
- ../qa-resilience/SKILL.md — Resilience, retries, and failure playbooks
- ../software-code-review/SKILL.md — Review checklists and standards for backend changes
- ../qa-testing-strategy/SKILL.md — Testing strategies, test pyramids, and coverage goals
- ../dev-api-design/SKILL.md — RESTful design, GraphQL, and API versioning patterns
- ../data-sql-optimization/SKILL.md — SQL optimization, indexing, and query tuning patterns
Operational Playbooks
- resources/operational-playbook.md — Full backend architecture patterns, checklists, TypeScript notes, and decision tables
1---2name: software-backend-23description: Production-grade backend API development with Node.js 24 LTS/25 Current (Express 5.x/Fastify 5.2/NestJS 11.x), Python 3.14+ (FastAPI 0.115+), Go 1.25+, Rust 1.92+ (Axum 0.8+), Prisma 6.x ORM, PostgreSQL 18. Includes GraphQL, TypeScript 5.9+ strict mode, modern logging (Pino/Winston), secret managers, PM2 process management, and Prisma Accelerate for serverless/edge deployments.4---5
6# Backend Engineering Skill — Quick Reference
7
8This skill equips backend engineers with execution-ready patterns for modern API development, database design, authentication, caching, observability, error handling, testing, and deployment. Apply these patterns when you need REST/GraphQL API design, database schema modeling, authentication flows, performance optimization, or production-grade backend architectures.
9
10**Modern Best Practices (December 2025)**: GraphQL adoption, TypeScript 5.9+ strict mode, TypeScript 7 native preview (Project Corsa) for faster tooling https://devblogs.microsoft.com/typescript/progress-on-typescript-7-december-2025/, `unknown` over `any`, structured logging, secret managers, and secure defaults (rate limiting, headers, input validation).
11
12---
13
14## Quick Reference
15
16| Task | Tool/Framework | Command | When to Use |
17|------|----------------|---------|-------------|
18| REST API | Express 5.x / Fastify 5.2 / NestJS 11.x | `npm create express-app` | Traditional CRUD APIs, public APIs |
19| GraphQL API | Apollo Server/Pothos | `npm install @apollo/server` | Flexible data fetching, avoiding over-fetching |
20| Database ORM | Prisma 6.x / Drizzle | `npx prisma init` | Type-safe database access, migrations |
21| Authentication | JWT/NextAuth.js/Passport | `npm install jsonwebtoken` | User sessions, API authentication |
22| Validation | Zod/Joi | `npm install zod` | Runtime type validation at API boundaries |
23| Caching | Redis/Upstash | `npm install ioredis` | Read-heavy operations, session storage |
24| Background Jobs | BullMQ/Agenda | `npm install bullmq` | Email sending, async processing |
25| Testing | Vitest/Jest/Supertest | `vitest run` | Unit, integration, E2E testing |
26| Logging | Pino/Winston | `npm install pino` | Structured logging, observability |
27| API Documentation | Swagger/OpenAPI | `@nestjs/swagger` | Auto-generated API docs |
28
29# When to Use This Skill
30
31Use this skill when you need:
32
33- REST or GraphQL API design and implementation (GraphQL adoption increasing)
34- Database schema design and migrations (Prisma schema-first approach, Prisma Accelerate for serverless)
35- Authentication and authorization patterns (JWT, OAuth2, sessions, NextAuth.js)
36- Error handling and validation strategies (Zod/Joi TypeScript-first validation)
37- API security best practices (Helmet.js headers, OWASP API Security Top 10, rate limiting)
38- Performance optimization and caching (Redis, Prisma connection pooling, singleton pattern)
39- Testing strategies (Vitest, Jest, Playwright for E2E, supertest for API testing)
40- Background job processing (BullMQ, Agenda)
41- API documentation and versioning (Swagger/OpenAPI auto-generation)
42- Deployment and production readiness (PM2 process management, Docker, secret managers)
43- Monitoring and observability (structured logging with Pino/Winston, Sentry, OpenTelemetry)
44
45## Decision Tree: Backend Technology Selection
46
47```text
48Backend project needs: [API Type]
49 ├─ REST API?
50 │ ├─ Simple CRUD → Express 5.x + Prisma 6.x
51 │ ├─ Enterprise features → NestJS 11.x (built-in DI, modules)
52 │ └─ High performance → Fastify 5.2 (faster than Express)
53 │
54 ├─ GraphQL API?
55 │ ├─ Code-first → Pothos GraphQL (TypeScript)
56 │ └─ Schema-first → Apollo Server + GraphQL Codegen
57 │
58 ├─ Authentication Strategy?
59 │ ├─ JWT tokens → jsonwebtoken + httpOnly cookies
60 │ ├─ OAuth/Social → NextAuth.js or Passport.js
61 │ └─ Magic links → Custom implementation + email service
62 │
63 ├─ Database Layer?
64 │ ├─ Type-safe ORM → Prisma 6.x (best for TypeScript)
65 │ ├─ SQL-first → Drizzle ORM or Kysely
66 │ └─ Raw SQL → pg (PostgreSQL 18 driver)
67 │
68 ├─ Caching Strategy?
69 │ ├─ Distributed cache → Redis (multi-server)
70 │ ├─ Serverless cache → Upstash Redis
71 │ └─ In-memory cache → Node.js Map (single server)
72 │
73 └─ Background Jobs?
74 ├─ Complex workflows → BullMQ (Redis-backed, retries)
75 └─ Simple scheduling → node-cron or Agenda
76```
77
78**Language Alternatives:**
79
80- **Node.js 24 LTS / 25 Current** (Express 5.x / Fastify 5.2 / NestJS 11.x + Prisma 6.x): TypeScript-first, async/await, Web Storage API
81- **Python 3.14+** (FastAPI 0.115+ + SQLAlchemy 2.0+): Data-heavy services, async support, evolving concurrency model, modern typing
82- **Go 1.25+** (Fiber 2.x + GORM 1.25+): High concurrency, native performance, experimental encoding/json/v2
83- **Rust 1.92+** (Axum 0.8+ + SeaORM 1.1+): Memory safety, zero-cost abstractions, Rust 2024 edition
84
85See [templates/](templates/) for language-specific starter templates.
86
87---
88
89## API Design Patterns (Dec 2025)
90
91### Idempotency Patterns
92
93All mutating operations MUST support idempotency for retry safety.
94
95**Implementation:**
96
97```typescript
98// Idempotency key header
99const idempotencyKey = request.headers['idempotency-key'];
100const cached = await redis.get(`idem:${idempotencyKey}`);
101if (cached) return JSON.parse(cached);
102
103const result = await processOperation();
104await redis.set(`idem:${idempotencyKey}`, JSON.stringify(result), 'EX', 86400);
105return result;
106```
107
108| Do | Avoid |
109|----|-------|
110| Store idempotency keys with TTL (24h typical) | Processing duplicate requests |
111| Return cached response for duplicate keys | Different responses for same key |
112| Use client-generated UUIDs | Server-generated keys |
113
114### Pagination Patterns
115
116| Pattern | Use When | Example |
117|---------|----------|---------|
118| Cursor-based | Large datasets, real-time data | `?cursor=abc123&limit=20` |
119| Offset-based | Small datasets, random access | `?page=3&per_page=20` |
120| Keyset | Sorted data, high performance | `?after_id=1000&limit=20` |
121
122**Prefer cursor-based pagination** for APIs with frequent inserts.
123
124### Error Response Standard (Problem Details)
125
126Use a consistent machine-readable error format (RFC 9457 Problem Details): https://www.rfc-editor.org/rfc/rfc9457
127
128```json
129{
130 "type": "https://example.com/problems/invalid-request",
131 "title": "Invalid request",
132 "status": 400,
133 "detail": "email is required",
134 "instance": "/v1/users"
135}
136```
137
138### Health Check Patterns
139
140```typescript
141// Liveness: Is the process running?
142app.get('/health/live', (req, res) => {
143 res.status(200).json({ status: 'ok' });
144});
145
146// Readiness: Can the service handle traffic?
147app.get('/health/ready', async (req, res) => {
148 const dbOk = await checkDatabase();
149 const cacheOk = await checkRedis();
150 if (dbOk && cacheOk) {
151 res.status(200).json({ status: 'ready', db: 'ok', cache: 'ok' });
152 } else {
153 res.status(503).json({ status: 'not ready', db: dbOk, cache: cacheOk });
154 }
155});
156```
157
158### Migration Rollback Strategies
159
160| Strategy | Description | Use When |
161|----------|-------------|----------|
162| Backward-compatible | New code works with old schema | Zero-downtime deployments |
163| Expand-contract | Add new, migrate, remove old | Schema changes |
164| Shadow tables | Write to both during transition | High-risk migrations |
165
166---
167
168### Optional: AI/Automation Extensions
169
170> **Note**: AI-assisted backend patterns. Skip if not using AI tooling.
171
172#### AI-Assisted Code Generation
173
174| Tool | Use Case |
175|------|----------|
176| GitHub Copilot | Inline suggestions, boilerplate |
177| Cursor | AI-first IDE, context-aware |
178| Claude Code | CLI-based development |
179
180**Review requirements for AI-generated code:**
181
182- All imports verified against package.json
183- Type checker passes (strict mode)
184- Security scan passes
185- Tests cover generated code
186
187---
188
189## Navigation
190
191**Resources**
192- [resources/backend-best-practices.md](resources/backend-best-practices.md) — Node.js patterns for auth, error handling, database, performance, testing, observability
193- [resources/go-best-practices.md](resources/go-best-practices.md) — Go idioms, concurrency, error handling, GORM usage, testing, profiling
194- [resources/rust-best-practices.md](resources/rust-best-practices.md) — Ownership, async, Axum, SeaORM, error handling, testing
195- [resources/python-best-practices.md](resources/python-best-practices.md) — FastAPI, SQLAlchemy, async patterns, validation, testing, performance
196- [README.md](README.md) — Folder overview and usage notes
197- [data/sources.json](data/sources.json) — External references per language/runtime
198- Shared checklists: [../software-clean-code-standard/templates/checklists/backend-api-review-checklist.md](../software-clean-code-standard/templates/checklists/backend-api-review-checklist.md), [../software-clean-code-standard/templates/checklists/secure-code-review-checklist.md](../software-clean-code-standard/templates/checklists/secure-code-review-checklist.md)
199
200**Shared Utilities** (Centralized patterns — extract, don't duplicate)
201- [../software-clean-code-standard/utilities/auth-utilities.md](../software-clean-code-standard/utilities/auth-utilities.md) — Argon2id, jose JWT, OAuth 2.1/PKCE
202- [../software-clean-code-standard/utilities/error-handling.md](../software-clean-code-standard/utilities/error-handling.md) — Effect Result types, correlation IDs
203- [../software-clean-code-standard/utilities/config-validation.md](../software-clean-code-standard/utilities/config-validation.md) — Zod 3.24+, Valibot, secrets management
204- [../software-clean-code-standard/utilities/resilience-utilities.md](../software-clean-code-standard/utilities/resilience-utilities.md) — p-retry v6, opossum v8, OTel spans
205- [../software-clean-code-standard/utilities/logging-utilities.md](../software-clean-code-standard/utilities/logging-utilities.md) — pino v9 + OpenTelemetry integration
206- [../software-clean-code-standard/utilities/testing-utilities.md](../software-clean-code-standard/utilities/testing-utilities.md) — Vitest, MSW v2, factories, fixtures
207- [../software-clean-code-standard/utilities/observability-utilities.md](../software-clean-code-standard/utilities/observability-utilities.md) — OpenTelemetry SDK, tracing, metrics
208- [../software-clean-code-standard/resources/clean-code-standard.md](../software-clean-code-standard/resources/clean-code-standard.md) — Canonical clean code rules (`CC-*`) for citation
209
210**Templates**
211- [templates/nodejs/template-nodejs-prisma-postgres.md](templates/nodejs/template-nodejs-prisma-postgres.md) — Node.js + Prisma + PostgreSQL
212- [templates/go/template-go-fiber-gorm.md](templates/go/template-go-fiber-gorm.md) — Go + Fiber + GORM + PostgreSQL
213- [templates/rust/template-rust-axum-seaorm.md](templates/rust/template-rust-axum-seaorm.md) — Rust + Axum + SeaORM + PostgreSQL
214- [templates/python/template-python-fastapi-sqlalchemy.md](templates/python/template-python-fastapi-sqlalchemy.md) — Python + FastAPI + SQLAlchemy + PostgreSQL
215
216**Related Skills**
217- [../software-architecture-design/SKILL.md](../software-architecture-design/SKILL.md) — System decomposition, SLAs, and data flows
218- [../software-security-appsec/SKILL.md](../software-security-appsec/SKILL.md) — Authentication/authorization and secure API design
219- [../ops-devops-platform/SKILL.md](../ops-devops-platform/SKILL.md) — CI/CD, infrastructure, and deployment safety
220- [../qa-resilience/SKILL.md](../qa-resilience/SKILL.md) — Resilience, retries, and failure playbooks
221- [../software-code-review/SKILL.md](../software-code-review/SKILL.md) — Review checklists and standards for backend changes
222- [../qa-testing-strategy/SKILL.md](../qa-testing-strategy/SKILL.md) — Testing strategies, test pyramids, and coverage goals
223- [../dev-api-design/SKILL.md](../dev-api-design/SKILL.md) — RESTful design, GraphQL, and API versioning patterns
224- [../data-sql-optimization/SKILL.md](../data-sql-optimization/SKILL.md) — SQL optimization, indexing, and query tuning patterns
225
226---
227
228## Operational Playbooks
229- [resources/operational-playbook.md](resources/operational-playbook.md) — Full backend architecture patterns, checklists, TypeScript notes, and decision tables