Experience test-driven development (TDD)

Booster conf logo
Agile Testing Days
27 November 2025
Joep Schuurkes
Staff Test Engineer
Dutch Electoral Council
@joeposaurus@chaos.social
https://smallsheds.garden

prep for "Experience TDD"

https://codeberg.org/joeposaurus/
counterstring-codekata#setup-for-the-kata

https://tnyr.me/#G6eJSj-wo6

agenda

instructions (15 mins)

the kata (50 mins)

15:55 | break (10 mins) | 16:05

reflect & share (20 mins)

how to apply (20 mins)

instructions

the goal

experience test-driven development

understand the principles behind TDD

explore how the principles apply to your work

NOT the goal

become an expert in TDD

be able to teach devs TDD

apply TDD in your daily work

red - green - refactor

think of the next step

write a failing test

run the test(s) => red

write just enough code to get the test to pass

run the test(s) => green

refactor => refactor

run the test(s)

red - green - refactor

diagram
The Art of Agile Development (2nd ed.) - James Shore

The Three Modes of TDD

1. Obvious Implementation
2. Fake It 'Til You Make It

3. Triangulation

The Three Modes of TDD - Grzegorz Ziemoński
via The Many Schools of TDD: A Quick Overview - Andreas Jürgensen (ATD 2025)

Triangulation

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, ...


def test_fizzbuzz_1():
	assert fizzbuzz(1) == 1

def fizzbuzz(length):
	return 1
					

Triangulation

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, ...


def fizzbuzz(length):
	if length == 1:
		return "1"
	else:
		return "1,2"

def test_fizzbuzz_1():
	assert fizzbuzz(1) == "1"

def test_fizzbuzz_2():
	assert fizzbuzz(2) == "1,2"
					

a counterstring

*3*5*7*9*

the kata

code kata?

an exercise in programming
which helps hone your skills
through practice and repetition

invented by Dave Thomas

the setup

https://codeberg.org/joeposaurus/
counterstring-codekata

https://tnyr.me/#5UU*zuSpMA

disable your coding assistant (if any)

the exercise

work in pairs or on your own

starting point:
a function/method that returns an empty string
a (failing) test for a counterstring of length 1

reference implementation:
https://smallsheds.garden/counterstring

the steps

decide on the next small step

write a failing test

change the code to make the test pass

refactor if it makes sense

break

reflect & share

share experiencies & code

share with another person/group

and another person/group

What was different?
What was the same?

how to apply

a question

What kinds of code do you write?

reflect & discuss

three groups

rotate after 5 minutes

one person stays for a next round

summary at the end

my two cents

size of steps depends on length feedback loop

size of steps depends on level of confidence

amount of refactoring depends on level of experience

thank you!

agiletestingdays.com/session-ratings

slides at smallsheds.garden/my-talks/