Cucumber: A year in review

  May 17, 2022

It’s a little over a year since I re-joined the Cucumber open source team as co-lead with the inimitable Aslak Hellsøy, joining a team of full-time SmartBear staff including Aurélien Reeves and Jo Laing. I want to look back on what we’ve achieved in that year.

Cucumber continues to grow

Across the Cucumber ecosystem, we’re seeing continued overall growth in the number of downloads. JavaScript and Java are the fastest growing, with the original Ruby version starting to shrink a bit, probably as test engineers migrate from Ruby to JavaScript.

Graphic: Cucumber Open And Friends Graph

Cucumber School is also growing

We’ve continued to build out our free video-based skills training for Cucumber and BDD practitioners, Cucumber School, with 12 new lessons being released across the different languages, including a C# version of the courses for SpecFlow.

Cucumber School now has almost 30,000 registered users, and we’re working on commissioning some exciting new content for this year.

The new contributors ensemble is thriving

Last year we committed to doing our part to tackle the structural sexism and racism evident in open source, and one of the great outcomes from that endeavour has been the new contributors ensemble. We started running a weekly ensemble-programming session where people new to open source could learn together and gain the skills and confidence to play a part in open source communities.

Graphic: The new contributors ensemble in action

The new contributors ensemble in action.

This group has developed it’s own manifesto, and each weekly session is streamed live on Twitch, with the recordings also up on our YouTube channel.

If you’re someone who’s curious about contributing to open source, especially if you’re from a background that’s traditionally been excluded from open source communities, we’d love you to come and join us! Join our community Slack and head over to the #new-contributors channel.

We continue to learn how to be more welcoming to new contributors

This change to broaden the diversity of our contributor base is not just like turning around an ocean liner, more like turning around the ocean itself.

Graphic: Maxar Technologies

Maxar Technologies

It’s going to be slow progress, and we’re learning to be patient, and to be prepared to try a lot of stuff that we may not see any immediate effects from.

not just turning around an ocean liner, more like turning around the ocean itself.

I’ve been encouraged to see that our regular Thursday community meetings have started to attract some new faces, and we’ve seen first-time contributions from people like Arianna Cooper (GoDog #468), Carl Menezes (GoDog #457), Emmanuel Ola (Cucumber-JS #1847#1824), and Mona Ghassemi (Cucumber-JS #1770).

All of those folks have benefited from the time Aurélien and I have been spending in 1:1 sessions, mentoring people in getting up to speed with the codebase, and from the support provided by our wonderful community.

I’ve learned so much from these sessions, especially about how we can improve our documentation to provide more context and signposting to people who are new in our ecosystem. You can book me at https://calendly.com/mattwynne/ anytime, if you’d like some coaching to get you started as a contributor.

The core contributor community is vibrant

Each Thursday we hold a Zoom meeting with an open agenda for anyone in the community. It’s a great place to discuss topics that can be challenging or time-consuming to figure out over messages in GitHub issues or discussions.

Graphic: Thursday Zoom Meetings

We have maintainers doing an incredible job of handling all the responsibilities of leading an open source project, mostly in their spare time (Rien Korstanje — Cucumber-JVM, David Goss — Cucumber-JS, Viacheslav Poturaev — Godog) backed up generalists like Luke Hill, Erik Huelsmann, Björn Rasmusson, Ciaran McNulty and others who contribute their time working on libraries and reviewing pull requests.

Almost all of our releases are automated

Cucumber is made of several libraries, and runs on different language implementations. This means that making releases to Sonatype, NPM, RubyGems etc. is a significant part of the maintainers’ workload.

Previously these releases had to be made from maintainers’ own machines, using a humongous docker image that includes every build tool for every one of the languages we support. It also meant that security credentials for publishing our packages were lying around on people’s machines.

This felt unsustainable, so over the year we’ve been automating this release process, first by moving the actual package publishing to a series of github actions, then running those actions from pushes to protected release branches, using GitHub’s Environments feature to protect the release credential secrets. We’ve also been building out tooling to help us make releases in our polyglot repos, where we keep the different language ports of a single library, like cucumber-expressions.

We still have a couple of projects to go, but we’re almost there.

We have an official VS Code Plugin

Cucumber now has an official plugin for Visual Studio code, using a newly-developed language server that offers some really awesome autocomplete when you’re writing new scenarios.

Graphic: VS Code gif

Major new versions of Cucumber-JS, Cucumber-JVM and Cucumber-Ruby

All three of our main supported language flavours received major version updates this year:

Godog, the Cucumber implementation for Go, is planning a 1.0.0 release soon.

So what’s next?

The team at SmartBear who works on Cucumber full-time (Jo Laing, Aurélien Reeves and me) remain committed to the mission to nurture and enable the community to solve its own problems wherever possible.

Nurture and enable the community to solve its own problems wherever possible.

In practice, this will involve us continuing our efforts to make the lives of existing maintainers and new contributors easier, with a goal to broaden the diversity of our contributor base, reducing the burden on the existing core team.

Through that work, I want us to become more flexible on two axes:

  1. make it simpler to write Cucumber implementations in new programming languages
  2. make it simpler to add new features to existing Cucumber implementations across programming languages

We’ve been gradually dismantling a large monorepo of shared libraries which we realised had become intimidating for new contributors and existing maintainers alike. I expect to see that effort completed this year, and as as result the number of release from and contributions to those libraries will hopefully increase. We’ve already seen some exciting discussions with the team building a Cucumber for Rust, for example, since the cucumber-expressions library was extracted into it’s own repo.

We’ll be continuing to improve signposting and documentation for contributors, and providing automation and tooling to streamline mundane tasks for maintainers.

New messages protocol

Cucumber’s been using a standardised NDJSON message format across the different language implementations for some time now, but it’s been mostly used internally, without much documentation available for 3rd parties to use for integrating with it. This year I’d like to see us formalise the message protocol as the de-facto standard for writing Cucumber reporting and other extensions, with well-documented examples and tutorials.

Cucumber School

We’re still working our way through the epic BDD with Cucumber course, with Chapter 9 (Support Code) still in development and Chapter 10 (Acceptance Tests vs Unit Tests) still to do.

Once that’s done, I hope to tackle some shorter, practical lessons centred around common uses for Cucumber, a bit like we did in our Cucumber Recipes book.

What do you think?

If you’ve read this far, you’re obviously someone who uses and cares about Cucumber! Do our strategy and plans align with your needs? Do you think we‘re spending our precious time on this earth wisely? Please let us know by tweeting me or @cucumberbdd, or come hang out in our community Slack for a chat.