30 Concurrent Jobs on CircleCI’s Improved Free Plan

Have you waited 20 minutes for a build to finish, when you really wanted to eat lunch?

Have you waited for your teammate’s builds to finish before yours could run?

If you’re not using CircleCI®…

Even switching to their free plan should fix that.

At least for smaller teams.

Here are 30 jobs running at the same time on the free plan:

30 jobs running at the same time

Concurrency has always been available at CircleCI…

But now even the free plan gets 30 concurrent jobs, where it used to have 1.

Those jobs will also run on better machines.

The free plan now has better resource classes.

Docker containers get the Large class, which has 4 CPUs and 8GB of RAM:

Get started with the free plan if you haven’t already.

Be the first to get CI/CD tips like this

You'll get these tips before they're on the blog page. See most up-to-date ways to use CircleCI®. No spam.

CI Builds: Commit And Wait

Your CI build fails…

And it’s the end of your work day.

There’s a cryptic error message.

So you make a commit with pwd && ls

And wait for it to fail again.

10 minutes later, it fails again, with those logging messages.

You guess it’s because Node is on the wrong version.

So you push a commit to update it to 15.

And wait for 10 more minutes.

It still fails, but with a Jest error.

It’s passing locally, so you’re not sure why.

You guess that the state is persisting after the tests.

So you add an afterEach() callback to clean it up.

After pushing that, you wait 10 more minutes for it to fail.

After repeating this 4 more times, the CI build finally passes.

You request a review on the PR.

And wonder if there’s a better way…

Be the first to get CI/CD tips like this

You'll get these tips before they're on the blog page. See most up-to-date ways to use CircleCI®. No spam.

Coding Can Be Like Flying Blind

You have to open a PR in an unfamiliar language.

Maybe Python.

It seems easy enough, just a few changes.

So you volunteered for it in Sprint Planning.

You make a few edits and run the script locally.

But it doesn’t work.

Ah, maybe because it’s using a tuple.

So you add a print() to see what its value is, because you don’t remember how to set up debug breakpoints in Python.

It looks completely different than you thought.

It’s like flying blind.

You’re thinking of using a dictionary instead.

But how do dictionaries work in Python, again?

You make a few edits, and it fails again.

So you add more print statements.

Late that afternoon, it finally works,

After hours of guessing and struggling.

In the languages you know…

This wouldn’t be a problem.

You would know how to debug them.

But here, you’re flying blind.

Be the first to get CI/CD tips like this

You'll get these tips before they're on the blog page. See most up-to-date ways to use CircleCI®. No spam.