Developer Productivity Engineering Blog

Preventing Flaky Tests from Ruining your Test Suite

Do you hate flaky tests? If your application interacts with browsers, external services, or has asynchronous behavior, it’s likely your team has suffered from flaky tests.

Non-deterministic tests are a ruinous infection that wastes developer time and reduces confidence in your test suite.



Read More →

Improve CI Performance by Optimizing Maven and Gradle Builds

A fast and efficient CI pipeline can make or break your team’s developer experience and productivity. But what are the biggest determinants of CI pipeline performance? How do CI platform infrastructure and build/test performance impact each other and where should you focus your efforts?



Read More →

Identifying and analyzing flaky tests in Maven and Gradle builds

Flaky, or non-deterministic, tests are a serious and prevalent problem in modern software development. If your application interacts with browsers, external devices or services, or has asynchronous behavior, it’s likely you have suffered from flaky tests. Martin Fowler has this to say about flaky tests:

Non-deterministic tests have two problems, firstly they are useless, secondly they are a virulent infection that can completely ruin your entire test suite. As a result they need to be dealt with as soon as you can, before your entire deployment pipeline is compromised. — Martin Fowler on Eradicating Non-Determinism in Tests

Flaky tests compromise deployment pipelines by slowing them down and decreasing confidence in the correctness of changes. When changes regularly fail due to unrelated flaky tests, time is wasted, features are delayed, and developers are demotivated to make changes.



Read More →

Analyzing unstable and slow tests using Develocity

Testing takes the overwhelming majority of time during software builds. A single test can waste countless hours of building time — a single failure may cause an entire CI pipeline to have to be re-run. Ugh.

In this post, I will show you how to identify slow and unstable tests using the new Tests Dashboard in Develocity 2019.4 for Gradle and Maven builds. The dashboard visualizes test results across many builds for tests executed by Gradle’s built-in Test task and Maven’s SureFire plugin.



Read More →

Five Things That Slow Down Your SBT Build

We pride ourselves by going the extra mile in our support channels, and we often get asked for help for both Scala and Sbt issues where Hydra is not always involved. It’s time to share some of the lessons we learned.



Read More →

How SBT Works: Rock Your SBT Build

In this first installment we lay the foundation to understand how sbt works. We cover what a setting is, and we build an intuition of why it takes long for sbt to load a build in memory (on large projects loading the build can easily take more than 30 seconds!). On the way, we learn about a few utilities that are readily available at our fingertips and that can brilliantly help us debug problems (say goodbye to println statements!).



Read More →

The cost of downloading dependencies

Although ephemeral builds can be nice to test changes in isolation, there are trade-offs for doing so. One of those trade-offs is dependency download times.

In Develocity 2019.3, the dependency download metrics in the performance and trends dashboards can be used to look at dependency download times and debug issues. For example, let’s look at the dependency download times for the Gradle project itself for all builds run in the last four weeks.



Read More →