I added CI to four small apps that had been living without it. The first run went red before it executed a single test — and not because my code was broken. Because a file I had never actually tested was.
Here's what a first CI run catches that your machine has been quietly hiding.
The pipeline was nothing special
Same shape for all four: fresh checkout, cp .env.example .env, install dependencies, run the checks, run a dependency audit. The kind of thing you'd copy off a template in ten minutes.
The value wasn't the sophistication. It was the word fresh. My laptop has a real .env, an installed node_modules, a warm cache, and years of accumulated state. CI has none of that. It starts from what's actually committed — which turns out to be a very different thing.






