I've taken a long, meandering road to appreciating TDD/BDD. When I started programming, I looked up to _why and his hacking approach to coding. Sadly, I could not express his brilliance and my code was not just untested and sloppy, but fragile and inundated with smells. As the scale of the projects I develop increases, I've learned to use testing to decrease the potential breakage and to better understand the libraries and features I'm working on. Of course there is an exploratory spike here and there, with tests coming in later to glue it all together, but those are now exceptions to my normal practice. When debugging legacy applications, simply creating test coverage for problem areas goes a long in solidifying the patches. Testing is not fail proof elixir, but it certainly improves my workflow and my product, and those results are hard to argue with.