Resources for working developers
Tutorials, guides, documentation and snippets you can copy straight into your project. Written by engineers, reviewed by engineers.
17 resources
How to Write a README That People Actually Read
A great README gets people running your project in minutes. A simple structure, a five minute test and a template you can copy for your next repository.
- Docs
- Open Source
How to Write Git Commit Messages Your Future Self Will Thank You For
Good commit messages make history searchable and reviews easier. A short, practical guide to the subject line, the body, and a few conventions worth adopting.
- Git
- Process
Environment Variables and Secrets: A Safe Setup Guide
Learn how environment variables work, how to use a .env file safely, what to do if a secret leaks, and why some variables are never truly secret in a web app.
- Security
- Config
How to Read a Stack Trace Without Panicking
A stack trace lists the chain of function calls that led to an error. Learn where to look first, how to ignore the noise, and how to find your own code quickly.
- Debugging
- Fundamentals
Caching Explained for Web Developers
Caching makes sites faster and cheaper, but it can also show people stale data. Learn the layers of a cache, how Cache-Control works, and how to avoid the classic mistakes.
- Performance
- Web
Build a mock API from an OpenAPI spec in 10 minutes
Go from a YAML file to a running mock server, with realistic data and failure modes.
- APIs
- OpenAPI
A Practical Guide to API Versioning
URL, header or date-based? A clear comparison of the common versioning styles, what counts as a breaking change, and a calm way to deprecate old versions.
- APIs
- Design
Authentication reference
API keys, OAuth 2.0 and short-lived tokens across every DeveloperJar API.
- Docs
- Security
Retry with exponential backoff
A small, dependency-free retry helper with jitter for flaky network calls.
async function retry(fn, { retries = 4, base = 300 } = {}) {
for (let i = 0; ; i++) {
try { return await fn(); }
catch (err) {
if (i >= retries) throw err;
const wait = base * 2 ** i + Math.random() * 100;
await new Promise(r => setTimeout(r, wait));
}
}
}
- JavaScript
- Reliability
Why We Stopped Writing Changelogs by Hand
How generating release notes from pull requests saved hours and made them better, plus the small habits that make an automated changelog worth reading.
- Process
- Docs
Ship preview environments for every pull request
Wire Git, containers and DNS together so reviewers can click instead of clone.
- DevOps
- CI/CD
Chunk any iterable in Python
Process large lists in fixed-size batches without loading everything into memory.
from itertools import islice
def chunked(items, size):
it = iter(items)
while batch := list(islice(it, size)):
yield batch
- Python
- Performance
Designing Error Responses Developers Can Act On
Status codes, error shapes and messages that shorten debugging instead of prolonging it. A guide to writing API errors that people can actually fix.
- APIs
- DX
What “API-First” Actually Costs (and Saves)
API-first means agreeing on the interface before building it. An honest look at the upfront effort, the time it saves later, and when it is not worth it.
- APIs
- Strategy
Delete merged Git branches
One line to tidy your local repo after a busy sprint.
# keep main and the current branch
git branch --merged | grep -v "\*\|main" | xargs -n 1 git branch -d
- Git
- Productivity
SDK quickstart: Node, Python and Go
Install, authenticate and make your first call in under five minutes.
- SDK
- Quickstart
Notes on Building Offline-First Developer Tools
Local-first sync, conflict handling and why your CLI should work on a plane. Practical notes on designing developer tools that do not depend on a connection.
- Architecture
- Rust