Welcome, Guest | Browse

Software Factory Archive

← Previous Work All Works Next Work →

make dev

Rating:
General Audiences
Fandom:
StrongDM Software Factory
Characters:
Navan Chauhan Jay Taylor
Tags:
CXDB Makefile Developer Experience tmux One Command
Words:
437
Published:
2026-01-04

Navan's favorite Makefile target was eleven lines long. It started a tmux session with three panes. The left pane ran cargo run for the Rust server. The top-right pane ran go run ./cmd/gateway for the Go gateway. The bottom-right pane ran npm run dev for the React frontend. Three processes, three languages, one command.

make dev

That was it. Type two words. Press enter. Wait twelve seconds for the Rust server to compile, three seconds for the Go gateway, and one second for the Next.js dev server to start. Sixteen seconds from cold terminal to a fully operational CXDB development stack.

"Every project should have a make dev," Navan said. This was a position he held with the intensity of religious conviction. "You clone the repo, you run make dev, and everything works. No README with thirty setup steps. No 'install this, configure that, set these environment variables.' One command."

Jay agreed in principle but raised a concern. "What about the data directory? The first time someone runs this, there's no pack file. There's no index. The type registry is empty."

"Handled." Navan pointed at line four of the Makefile target. Before starting the tmux session, it checked for the data directory and created it if it didn't exist. It checked for the registry bundle and generated it from the Go type definitions if it was missing. It checked for the dev configuration and copied the template if there wasn't one.

"So a new contributor clones the repo, runs make dev, and gets—"

"A running Rust server with an empty database, a Go gateway with OAuth disabled for development, and a React frontend pointed at localhost. Everything connected. Everything hot-reloading." Navan paused. "I also added make seed to populate the database with sample conversations if you want something to look at."

The Makefile had other targets. make test ran all three test suites. make build compiled release binaries. make lint checked formatting across all three languages. But make dev was the one everyone used. It was the first thing you typed in the morning. It was the command that turned a cold laptop into a working environment.

Jay started keeping a timer. From opening his laptop lid to having CXDB running in development mode: twenty-three seconds. Eight for the laptop to wake from sleep. Twelve for make dev to spin up the stack. Three for the browser to load the frontend.

"Twenty-three seconds," he reported.

"We can do better," Navan said. He was already looking at the Rust compile time. "If we cache the build artifacts—"

"Navan. Twenty-three seconds is fine."

"Eighteen is better."

Jay let him optimize. Some battles weren't worth fighting, and some Makefile targets deserved to be loved.

Kudos: 88

makefile_maximalist 2026-01-06

The religious conviction about make dev is absolutely correct. If your project can't be started with one command, your project has a developer experience problem.

dx_devotee 2026-01-07

Navan wanting to shave five seconds off a twenty-three second startup time is peak developer energy. Never stop optimizing the inner loop.

← Previous Work All Works Next Work →