/tdd

Towel Driven Development

Towel Driven Development

The product owner was the first to notice the problem. It looked ugly and he didn’t like it at all. He stomped to the developer’s office.

“Why is there water in the kitchen?”, he asked in a tone that made it clear this wasn’t a question. The developer didn’t hear him. He had his head phones on, listening to Death Metal at full volume. He had learned that this genre was the best at blocking out the product owner’s voice.

The product owner walked up to the developer’s desk and waved his hand in front of his face.

“What?”, the developer sighed.

“Why is there water in the kitchen?”, the product owner asked again. Against his will it started to sound like a question now. The developer was baffled by the product owner’s lack of technical understanding.

“It’s a kitchen.”, he said. “We need the water for the coffee machine and the dish washer. We can’t provide coffee and clean cups to our clients without water.”

The product owner frowned. The explanation made sense, but it still didn’t seem right. He had seen other kitchens before and they didn’t have so much water in them. He started to think about ways to hide it from the customers. Maybe a carpet would help?

“Can you still take a look at it?”, he asked the developer and left for his own office, to think about carpet colors.

The developer was glad that he could finally get back to work. He tried to remember the complex chain of thought he had been working on before he got distracted, but all he could remember was stupid questions about water in the kitchen. Back to square one.

“I need a coffee.”, he sighed and went to the kitchen. The developer was the second to see the problem. He also didn’t like it.

There was a large puddle of water on the floor in front of the sink. The developer cleaned it up roughly with a towel. Then he looked under the sink. The waste water pipes were dripping.

He dried them with the towel and then tried to reproduce the problem. He poured water into the sink. A little water dripped down, but not nearly enough to explain the puddle.

“Huh, this is weird”, he said to himself. He put a bucket underneath the sink, made himself a coffee and went back to his desk. He created a ticket on JIRA:

Water Leak in the Kitchen

Today PO found a large amount of water on the kitchen floor where it doesn’t belong. Tried to pour water in the sink, only minor leakage observed. Couldn’t reproduce the problem. Will have to keep an eye on this. Might be a one time thing.

He also considered human error as a possible reason for the water on the ground. He imagined the PO trying to find out what happens if you hold a glass upside down. But he was wise enough to not write that into the JIRA ticket.

With the problem properly addressed, his mind was at ease again and he went back to work. He didn’t put on his head phones though. This problem had made him curious and he wanted to keep an eye on it (or rather, an ear).

About twenty minutes later, he heard water splashing in the kitchen. He jumped up from his desk to catch the perpetrator in the act. And oh boy, did he.

The dishwasher had just finished a cleaning cycle and was pumping the dirty water out. And in the hose that connected the dishwasher to the pipes was a hole that spayed a geyser of boiling hot waste water all over the kitchen.

The developer quickly grabbed the towel and wrapped it around the hose like a bandage and put the bucket underneath.

Then he set the JIRA ticket to done:

Found the problem. Dishwasher waste water hose is broken. Found a temporary workaround for now. Suggest replacing ASAP.

He created a new ticket for replacing the broken hose and assigned it to the PO.

The next day, the PO and the finance guy showed up in the developer’s office.

“About that hose,” the PO started. “We looked at it and it seems to work for now.”

The developer stared at him. “This is not a long-term solution. We really need to replace that hose.”

The PO sighed. “Look, I know you want to work clean and by the book, and best practices and all that. But we’re a startup, we’re lean and agile and we need to focus on the product and develop new features. We don’t have time to replace a hose that still works good enough.”

“Also, do we really need the bucket?”, the finance guy joined in. “It seems like overkill, using both a towel and a bucket. We might cut down on one of those.”

“The bucket stays.”, the developer insisted. “The towel will get soaked with water and then you need a bucket to collect the water dripping from it.”

“Alright, alright, the bucket stays.”, the PO said, and the developer couldn’t shake the feeling that they had tricked him somehow.

Weeks went by and the towel and bucket did their job. Even the developer started to feel a little proud of his creative solution. Then the water tab of the sink broke.

At first it was dripping. A constant clonk-clonk that really started to annoy the developer, who could hear it from his office. He wanted to install new sealing rings but PO and Finance said the problem wasn’t severe enough to waste time and money on it, and it didn’t help the product either.

A few weeks later, the dripping had turned into a constant stream and Finance started to worry about the water bill.

“You have to fix the sink somehow.”, the finance guy told the developer. “I ordered the sealing rings, but they will only arrive next week and I don’t want the water running throughout the weekend.”

The developer agreed. He wasn’t sure if the towel could handle all this additional load. So he crawled under the sink and closed the valve. Then he wrote an announcement on Slack:

“I had to turn off the water tab in the kitchen. There is no tab water available until further notice.”

Seconds later, the PO came to his office, fuming.

“You can’t turn off the tab water! How are we supposed to make coffee now?”

The developer leaned back in his chair and sighed. “I only do what Finance told me. Talk to them if you want it back on.” He enjoyed this revenge more than he should.

The PO stomped into the kitchen and desperately looked around. A really important client would come by in fifteen minutes, he needed the coffee machine to work, now! A lesser man would just give up at this point. But you don’t become product owner by giving up when faced with an unsolvable problem. So he started looking for alternative sources of water.

He looked in the fridge. Maybe he could use milk or Club Mate instead of water? But that would probably just break the coffee machine. He searched through the drawers. Cups, plates, knives, forks, no water. He looked under the sink. And his eyes went wide.

“Wow, I’ve never had coffee like this before!”, said the client. “I love this slight soapy note. And I think I can make out a hint of citrus and vanilla and bacon.” He was a hipster.

The hipster bought another cup of waste water coffee and paid a ridiculous sum of money for it once he was assured that he was the first person ever to try it, before it was cool.

The PO told marketing, finance and the CEO about this and they all agreed that this was a major turning point for the company and that waste water coffee should be the new focus. The developer got a bonus for inventing the towel-bucket water filter and felt very smart although deep down he knew that he really shouldn’t.

From that day on, the dishwasher was running 24/7 to make sure the bucket was always filled with enough hipster coffee water. The developer politely declined the offer of free waste water coffee and started buying Soya Latte at the café across the street instead. Just weeks ago he despised this as a hipster place and now he saw it as a reminder of the good old times. "Is this how you get old?", he wondered.

After a few weeks, the developer decided to check how the towel was holding up. Being such an important company asset now, he had to keep a closer look on it. He waited for the dishwasher to finish and unwrapped it from the hose.

He almost had to throw up. The towel was covered with a slimy mold through and through and the developer was sure that this would sooner rather than later make someone sick. He replaced it with a fresh towel and put the moldy one into the dishwasher, hoping that the heat and detergent would manage to clean it up.

He informed the PO about the maintenance action and he wasn’t happy.

“How do we know that the new towel will still have the same aroma? What if the mold is what made the coffee special? You can’t just make changes to the product!”

But when the developer explained about the health risks, the lawyer and the CEO took his side. They didn’t want to risk a lawsuit. Marketing attached a “New Improved Formula” label to the logo. Some of the customers complained how the new recipe was shit and sent death threats on Facebook. But all in all, it didn’t hurt sales at all.

The company hired a new Towel Administrator whose job was to monitor the towel health and replace it when it becomes too moldy. He got paid better than the developer. The developer didn’t care, he had already decided that he would start looking for a new job soon.

Eventually, waste water coffee was an established brand and lost its novelty appeal. Sales started to decline and marketing was looking for a way to renew interest in it.

“There’s this upcoming tech conference. Don’t you want to give a talk about the challenges and solutions with the towel filter?”, the marketing girl asked the developer.

Why not, he thought. Conference talks are a great way to land a new job. So he prepared a talk about Towel Driven Development, explained how the towel approach to leak sealing was more cost effective and agile than the classic hose replacement. And how it was possible without downtime of the dishwasher.

He went on to explain how they achieved high availability using multiple towels and how the whole towel-bucket-dishwasher stack worked. The lawyer insisted that he leave out the bit about the mold though.

The talk was a great success and soon after, developers all over the world were hyped about that new technology. Everyone wanted to work Towel Driven, investors insisted that their companies switch to the new paradigm because it was clearly superior, even if the company didn’t even have a kitchen.

TDD frameworks popped up left and right that promised to make life easier for TDD developers. Private schools offered expensive courses for certified towel administrators. The developer quit his job at the software company and became a highly sought-after TDD consultant.

People started to work around the drawbacks of TDD. Someone found out that if you wrap the towel around a non-leaking hose and pour clean water into the bucket, you produce much higher quality coffee. And after a while, everyone started doing it like that. At least until the next hype.

They say you don't want to see the kitchen of your favorite restaurant. I say it can't be worse than how the software is made that recommended this restaurant to you.