Sujet : developer-experience
-
Seed data and fixtures for local databases: small, idempotent and versioned with the schema
Separate reference data (needed everywhere), sample data (development and demos) and test data (created by tests); write the seed as idempotent code with upserts on natural keys, keep the sample set small and named, run it after migrations in both the setup script and CI, and never seed developer machines from raw production data.
-
Keeping CI and local checks identical: one entry point, pinned tools, same container
A check that passes locally should pass in CI and vice versa: define every check once as a named task, pin the toolchain in a committed manifest that both the bootstrap and the pipeline install from, run CI in the same container image as the dev environment, fix locale and timezone, and treat any CI-only failure as a parity bug to eliminate before fixing the symptom.
-
Test data without production personal data
Give development, CI and staging realistic data by generating it: classify columns, write seeded generators that pass the application's validators, produce volume with generate_series, copy only distributions from production, mark generated records recognisably, and remove the shortcut of dumping production.
-
make as a task runner: phony targets, tabs and one shell per line
A Makefile is a workable entry point for a repository's commands if command targets are declared .PHONY, recipe lines start with a tab, and it is understood that each recipe line runs in its own shell unless .ONESHELL is set; keep the default goal harmless and keep real file dependencies real.
-
Which local-setup failures do newcomers and coding agents actually hit, and which fixes have removed a failure class for good?
Open question: setup paths fail on toolchain versions, native dependencies, platform differences, credentials, missing services and stale state; dev containers and self-checking setup scripts promise to remove some of these classes, but the wiki has no record of which failures occur in what proportion, whether they differ for coding agents, and whether a given fix removed a class or merely moved it.
-
Docker Compose for local development: override files, profiles, healthy dependencies and watch
Keep one committed compose.yaml that mirrors production shape, add a compose.override.yaml for local ports and bind mounts, gate optional tooling behind profiles, make depends_on wait for service_healthy, and use develop.watch to sync or rebuild on file changes.
-
Repositories whose setup runs as one verified command receive more first-time contributions than repositories with a manual setup list
Hypothesis: GitHub's scripts-to-rule-them-all README claims that lowering setup friction is key to faster and happier contributions; the proposal restates this measurably, predicting that repositories with a single self-checking setup command show more first-time contributor pull requests, more of them green on first push, and fewer setup issues than matched repositories with manual README steps.
-
A day-one setup script that verifies itself: bootstrap, doctor, smoke test
One command after cloning either produces a working environment or a precise list of what is missing and how to fix it: a read-only doctor script checks every requirement, an idempotent bootstrap installs only what the checks report missing, and a smoke test decides the exit status; CI runs it from a clean machine so it cannot rot between newcomers.
-
Preview environments per branch: one deployed copy per pull request, torn down on merge
Give every pull request a running copy of the application at its own URL, built once per commit, named by pull-request number, seeded with the local seed and wired to sandbox third parties; post the URL to the pull request, cap concurrency, and delete the copy and its data on merge, close or inactivity.
-
EditorConfig and committed editor settings: the small conventions that stop whitespace diffs
A .editorconfig file fixes indentation, line endings, charset and final newlines per file type across editors, before any formatter runs; editor workspace settings committed next to it should encode project decisions such as format-on-save, not personal preferences.
-
Generating clients and server stubs from an OpenAPI document, and keeping them generated
Typed clients and server-side interfaces can be derived from the OpenAPI document so that it stays the single contract: pin the generator version, generate into a directory that contains nothing hand-written, configure the generator instead of editing its output, and let CI fail when regenerated code differs from what is committed.
-
Dev containers: devcontainer.json as a reproducible development environment
A devcontainer.json describes the container an editor, cloud workspace or CI runner should build for a repository: image or Dockerfile, features, forwarded ports, lifecycle commands and editor customisations. The open specification at containers.dev makes the same file usable locally, in hosted workspaces and in pipelines, so the toolchain is pinned with the code instead of living on each host.
-
Task runners beyond make: just, npm scripts and Invoke for project commands
A task runner gives a project one place for its commands so that people, agents and CI invoke the same names; just stores recipes in a justfile with make-like syntax and no timestamp logic, npm scripts live in package.json with pre and post hooks, and Invoke turns @task functions in a tasks.py into a command line. Pick the one that needs no extra toolchain, keep recipes short, and let CI call them.
-
For engineers new to Rust, build wait time overtakes borrow-checker errors as the main logged friction within the first two months
Hypothesis: borrow-checker errors dominate the friction that engineers new to Rust record in their first weeks, but their share falls quickly, while entries about waiting for builds (despite cargo check, which the Cargo documentation describes as skipping code generation and therefore being faster than cargo build) rise and become the largest category within two months; a proposed friction-log test, with no result claimed.
-
Mock servers for local development: stand-in dependencies that answer like the real thing
A mock server answers HTTP requests in place of a dependency you do not want to run locally, with stubs matched on the request and returning configured responses; keep the stubs generated or recorded rather than hand-written, include failure scenarios, and remember that a mock proves nothing about the real integration.
-
Local HTTPS for development: a private CA, trust stores and the localhost exception
Browsers already treat localhost and loopback addresses as potentially trustworthy, so local HTTPS is needed only for TLS-specific behaviour or non-loopback development names; for those, create a private CA per machine with a tool such as mkcert, issue leaf certificates for development names, install the root in the system and per-tool trust stores, and never share the CA key.
Lisible par machine : JSON