Developer Productivity Engineering Blog

Faster Quarkus builds, productivity vs. joy, flaky tests, and AI—with Holly Cummins

#BuildPropulsionLab at #DPE Tour London with @trisha_gee and @holly_cummins.

#BuildPropulsionLab at #DPE Tour London with @trisha_gee and @holly_cummins.

In June, Gradle hosted a Developer Productivity Engineering City Tour in London. I was fortunate enough to grab Holly Cummins, Senior Principal Software Engineer at Red Hat, to interview her for the Build Propulsion Lab video series (all quotes below are from Holly).

During this interview, she spoke about the journey of using Develocity to accelerate Quarkus builds, we explored whether developer productivity and developer joy are opposites, and we discussed how helpful AI is for developers.

The Quarkus team’s challenge with slow builds

Quarkus is a large OSS project by Red Hat that boasts nearly a thousand community contributors. Like many complex systems that contain multiple components, the team’s Continuous Integration builds were becoming cumbersome. Despite parallelizing the builds across numerous GitHub Actions, build times were still lengthy, taking about 4 hours of elapsed time and over 24 hours of machine time.

“When you run a build, we’ve parallelized it across zillion GitHub actions, but it still takes about 4 hours of elapsed time. And the total machine time is over 24 hours. That’s kind of annoying.”

Obviously, long build times presented a significant challenge, especially during releases. Contributors ran multiple long-running builds, making the release process difficult. As hardware availability became an issue, builds were frequently canceled, creating a bottleneck.

Holly shared how Guillaume Smet, Principal Software Engineer on the Quarkus team, collaborated with the Develocity team to incorporate caching solutions. This led to remarkable improvements in build times and overall efficiency. The notable benefits included reduced contention on machines, faster feedback loops, and a less stressful release process. To see what we mean, click around in the public Develocity instance for Quarkus.

“We never have a queue for a build machine, builds run quicker, and everyone is less stressed because we can do releases efficiently.”

The holistic benefits extended beyond mere build times. Reduced stress and chaos during releases and a significant sustainability aspect were apparent. The team eliminated waste from redundant tests, making their processes more efficient.

Intangible benefits of faster builds

While speeding up build times is an obvious benefit, Holly pointed out the often-overlooked intangible advantages like reduced frustration and toil.

“Speeding up build times is significant in its own right. Still, the knock-on effects such as reduced frustration and toil are equally important.”

The journey to faster builds also revealed another benefit—making builds more reproducible. This effort had a positive impact on supply chain security, ensuring more reliable and secure builds.

Does developer productivity come at the expense of developer joy?

Despite the apparently conflicting nature of developer joy and productivity, Holly and I established that these concepts are complementary. Efficient and enjoyable development processes go hand in hand.

“When is a developer happiest? When they’re productive. Developers hate wasting time on inefficiencies.”

While discussing developer productivity, we touched upon the importance of treating the build as a production-level process. Continuous attention and improvement help ensure a smoother and more efficient development lifecycle. We want code that goes into production to be tested, reliable, and secure, and our build process and continuous delivery pipeline are fundamental to ensuring this.

Introducing building caches, reliably resolving dependencies, and improving test performance allows developers to contribute more effectively. Holly elaborated on their classic problem of flaky tests and how they reduced testing time using test acceleration solutions.

Why no one likes handling flaky tests

No one likes flaky tests—they are a significant and unwelcome challenge for developers. These unpredictable and inconsistent tests can pass or fail without any changes in code, casting doubt on an application’s reliability. They disrupt a workflow, creating confusion and wasting precious time. Holly shared how their earlier approach led to inefficiencies and how using Develocity provided a more structured solution.

The Quarkus team’s public Develocity dashboard reveals flaky and passed tests

Drilling down into a specific flaky test provides the details needed for the Quarkus team to address the issue

With Develocity, identifying and fixing flaky tests has become more manageable, streamlining their development processes.

“Now I get a nice report that says, ‘You did run a huge amount of tests. One or two of them failed, but it’s not your problem.'”

AI in Development: A boon or a bane?

When we presented together at DevoxxUK, Holly and I spent some time exploring the role of AI as a productivity tool for developers, a topic we both enjoy discussing. While AI can enhance productivity, it’s crucial to apply it correctly. Not understanding code that is generated by AI or not taking the time to critique it can worsen existing problems by introducing unnecessary or poorly written code to a project.

“AI might generate lots of code, but a good developer will focus on writing efficient and maintainable code. [It] can be beneficial for generating test data, considering cases outside our experience, enhancing test coverage and reliability.”

AI’s ability to generate test data or explain code offers significant advantages. Holly shared her experience using AI to generate test data, which often considers edge cases humans might overlook.

Additionally, AI tools like JetBrains’ AI assistant can help provide different perspectives by explaining code, which can complement well-written code or make it easier to understand code for which we have little context.

Bridging the gap: Developer productivity and joy

The core message of our conversation emphasized that developer productivity and joy are intertwined. Efficiency in mundane tasks, like builds and tests, leaves more room for creativity and innovation.

“I do my best problem-solving when I’m not at the keyboard. Allowing time for rest and creativity leads to better outcomes. Creating that space for creativity is crucial. It’s not about typing more; it’s about having the freedom to think and innovate.”

We also highlighted the significance of downtime and rest. It’s during these moments that developers often find solutions to complex problems or ideas for new projects. Promoting a balanced workflow can lead to higher productivity and joy.

Conclusion

“Thank you very much for Develocity. It has personally made my life happier. It’s all about developer happiness.”

Our session at the Build Propulsion Lab highlighted the seamless integration of developer joy and productivity. By leveraging tools like Develocity and Quarkus, and incorporating AI thoughtfully, we can create an efficient and enjoyable development environment designed to foster innovation.

Thank you for joining this conversation with us. Let’s continue cultivating a space where productivity and joy coexist, propelling us towards greater achievements.

Some resources you may enjoy:

Learn more about how your own builds and tests can be accelerated with a free Build Scan®