Refactoring

Refactoring

How to Test Software πŸ”

A practical and opinionated take on one of engineering's most divisive topics.

Luca Rossi's avatar
Luca Rossi
Mar 23, 2023
βˆ™ Paid
Upgrade to paid to play voiceover

Testing is an ever-controversial topic in software.

You would be hard-pressed to find any engineer who doesn't believe that testing is crucial to their workflow. Despite this, many teams struggle and are not happy with it.

Additionally, the general consensus around what good testing looks like seems to shift all the time. Testing is so ingrained into all parts of the dev workflow that any change to such a workflow leads to changes to testing.

For example, introducing feature flags, or switching to trunk-based dev, or adding or removing a Staging environment, or using AI to write code may all bring changes to your testing strategy.

In this article, I will write my take on what good testing looks like, and suggest a practical workflow that works today, in 2023.

Here is our agenda for today:

  • βš–οΈ Contracts vs Implementations β€” an important mental model to reflect on testing.

  • πŸ”¨ Regressions β€” figuring out the true ROI of tests.

  • πŸ—‚οΈ Types of tests β€” a basic classification with the main types you should know.

  • ⛰️ Testing Pyramid β€” a classic testing model made popular by Martin Fowler.

  • πŸ† Testing Trophy β€” a modern testing model which I personally prefer.

  • πŸ”„ My Testing Process β€” we put all of this together to design a practical testing workflow.

  • ✨ Other types of tests β€” we go beyond the basics with chaos engineering, load, security, and data testing.

  • πŸ’¬ Community examples β€” how Product Hunt and Swarmia do testing.

  • πŸ“š Resources β€” as always, further articles and resources to learn more

Let’s dive in!


This post is for paid subscribers

Already a paid subscriber? Sign in
Β© 2025 Refactoring ETS
Privacy βˆ™ Terms βˆ™ Collection notice
Start your SubstackGet the app
Substack is the home for great culture