Harsh Singh

Full-Stack Developer & Open Source Contributor

I build performant web apps and contribute to scientific computing — React on the front, Julia & Go under the hood.

H
All posts
·5 min read

Debugging CI Pipelines: The Unglamorous Skill That Levels You Up

  • CI/CD
  • DevOps
  • Open Source
  • Testing

Contributing to SciML and Meshery, I've spent more hours than I'd like to admit staring at red CI pipelines. It's nobody's favourite work — and it's quietly one of the most valuable skills I've picked up.

Failing CI is a map, not a wall

A new contributor sees a wall of red and panics. An experienced one reads it like a map. The trick is to ask, in order:

  1. Is it my change, or was it already broken? Re-run on a clean main first.
  2. Is it deterministic or flaky? A test that fails 1-in-5 is a different problem than one that always fails.
  3. What's the smallest reproduction? Pull the exact command CI runs and run it locally.
# The first thing I do: reproduce CI's exact step locally
julia --project=. -e 'using Pkg; Pkg.test()'
# or for JS projects
npx playwright test --reporter=line

Flaky tests are a design smell

At Meshery I chased down flaky Playwright end-to-end tests. Most flakiness came from the same root cause: waiting on time instead of state. The fix is almost always to assert on a condition, not a timeout.

// Flaky: hope it's ready in 2s
await page.waitForTimeout(2000);
// Stable: wait for the actual state
await expect(page.getByText("Deployment successful")).toBeVisible();

Why this matters for the SciML side

For scientific libraries, CI is also where performance and convergence regressions get caught. A "passing" build that quietly got 2× slower is a failure that didn't announce itself. Reading benchmarks and convergence-order tests is the same muscle as reading CI logs.

The takeaway

"Fixed flaky CI" never makes a highlight reel. But the contributor who can take a build from red to green reliably is the one maintainers trust with bigger work. Boring skills compound.

Designed & built by Harsh Singh · singhharsh.in