Lessons Learned by Quitting TDD
By working with some of the most successful tech-product companies, I realised that code is NOT an asset, it's a liability. We should strive hard to minimise code. In 2011, when I started to hack on ConfEngine, I questioned my belief in TDD. I had also started playing around with APL style Array-Programming and Functional Programming. I felt, may be, I was getting a bit too dogmatic about TDD and automated tests in-general. As a thought experiment, I decided to build ConfEngine without ANY automated test. At first, it was really scary not to have the safety-net of automated test (something I took for granted for almost a decade.)
As I scaled ConfEngine without any automated tests, I had certain interesting realisations:
- How to embrace Simplicity and Minimalism WITHOUT automated tests
- Why Throwing Away Code frequently helps you achieve a better decoupled-design and how this helps in better experimentation
- Fear of Refactoring WITHOUT Tests is over-rated (Good IDE and safe-refactoring techniques can take you a long way)
ConfEngine grew from a pet-project to a 8 member product team. It has over 60K users and has done financial transactions worth over half-million USD. And we continue to push forward without ANY automated tests. Its not perfect, but it has certainly helped me challenge my dogma around TDD.
Background: In 2001, I stumbled upon the Test Infected paper. For the next 2 years, I struggled to really apply the test-first concept on real projects. Finally in 2003, I felt that I had fully internalised TDD and was able to apply on almost all projects. Then I started playing around with FIT and FitNesse, using ATDD on some of the projects. In 2006 I published "Avatars of TDD" paper in which I explained various styles of TDD and its design implications. Until 2011, I was a very big advocate of TDD, ATDD and BDD. I still like those practices, however I would not recommend it in all projects.
Outline/Structure of the Talk
- Context/Background - 3 mins
- Programming WITHOUT Automated Tests - 3 mins
- Functional Programming and APL Style Array Programming - 5 mins
- Impact of this style of programming - 5 mins
- Lessons learned - 5 mins
- Drawbacks/Limitations of this approach - 2 mins
- Next Steps - 2 mins
Learning Outcome
- How to embrace Simplicity and Minimalism WITHOUT automated tests
- Why Throwing Away Code frequently helps you achieve a better decoupled-design and how this helps in better experimentation
- Fear of Refactoring WITHOUT Tests is over-rated (Good IDE and safe-refactoring techniques can take you a long way)
Target Audience
TDD Practitioners, Programmers, Architects