Do you always clearly see the light at the end of the tunnel every time you start working on something? Do you set a clear, concise plan, and follow it point by point until you reach your goal? I know I don’t. Complexity in software development can be huge, and facing that Cerberus more often than not results intimidating even to the bravest heroes.
If you, like me, find yourself more often than you’d like in a “flee or freeze” situation when it comes to managing complexity, I’m happy to share great news: there are other ways to manage this! TDD can give you a clear framework to unblock your best pace and hit those high efficiency expectations.
Think incremental.
Complex software needs to be built incrementally to manage complexity and allow deep work results in simpler chunks. TDD works as the perfect framework to achieve this.
As an ashamed perfectionist, my nature doesn’t allow me to have something “half baked” out, but it also sets so high expectations that I often find myself without any demoable progress after a long run on work. With TDD, I can focus on specific parts of the functionality, and my mind allows me to leave the rest for later.
The value of tests is not retroactive, but proactive.
Tests in a codebase are the living definition of the software functionality: you can run them to demonstrate. “Showing over telling”, the recipe to success.
Whenever I want to see what some service, adapter, domain service or model does, I simply go to their unit tests. Whenever I want to confirm some functionality still works as expected, I go to functional tests. Whenever I want to understand an integration between subsystems or third party systems, I go to integration tests. As simple as that. No mode reading old code to understand what it does.
Fast feedback loops are essential.
Feedback loops are extremely valuable for the development experience (DX). They enable high performance because you can do smaller steps, fast, and know they they are ok, and everything else is ok. Tests enable just that: a button tap, green, all is well. We can move on. It’s game changer.
Final thoughts.
TDD has raised the quality of my work notoriously, and given me a peace of mind when coding that I haven’t felt in 14 years as a software developer.
I would love to share more insights of my experiences and learning. If you’d like to learn more about TDD, subscribe and write and we can be in touch.
