My Struggles with TDD ( Test driven development )
Tags: programming, testing, typescript, javascript
Published: 2023-05-07 13:28:50

With nearly 15 years of experience in software development under my belt, one area I've consistently found challenging is Test-Driven Development (TDD). It's not that I don't appreciate the importance of writing tests, nor do I neglect to write them; it's just that I don't adhere to the TDD methodology. To better understand my perspective, let's first explore the what is TDD:

> Test-Driven Development (TDD) is a software development approach focused on writing tests before writing code. Developers create tests for expected functionality, write minimal code to pass those tests, and then refactor for optimisation. This iterative process promotes code reliability, maintainability, and easier debugging.

Another way to look at TDD:

> Loop(Red->Green->Refactor) - until equilibrium

Despite its apparent simplicity in theory, I've grappled with TDD throughout my professional journey. Driven by a desire to uncover the underlying reasons for this struggle and improve my practices, I am determined to embrace the TDD methodology more effectively, ultimately resulting in the production of robust and reliable code.

Here is what i’ve uncovered so far:

#1: Personality
Upon delving deeper into my personality traits, particularly optimism and pessimism, I discovered the following:

I generally lean towards the optimistic side. But how does this optimism influence my tendency to write code first and test later? It's possible that my optimistic nature leads me to believe that my code will function as intended, causing me to prioritise writing code over testing.

#2: Mindset
As an inherently optimistic individual, I possess a success-oriented mindset accompanied by an innate aversion to failure. This fear has held me back from pursuing numerous opportunities in life. But how does this relate to my reluctance to adopt TDD? It's plausible that my fear of failure deters me from writing tests first; instead, I gravitate towards writing code initially. Once confident in my code's functionality, I then create tests, reinforcing my optimism and success-driven mentality.

#3: Processes
In a team or company setting, adhering to established processes is crucial. While TDD may initially appear time-consuming, its long-term benefits are undeniable. However, some teams fail to recognise the advantages of TDD, opting instead to prioritise a high output of code and features, inadvertently sacrificing quality for speed. This shortsighted approach can lead to an accumulation of technical debt. My reluctance to follow TDD may be influenced by working in environments where teams disregard the methodology, focusing on short-term productivity while neglecting the long-term stability and maintainability of the codebase.

#4: Rewards and Recognition
Closely connected to the previous point, there is often a tendency to celebrate teams that rapidly deliver features and code, while inadvertently overlooking those who prioritise quality (a byproduct of TDD). Driven by the desire for rewards and recognition, I may find myself inclined to sidestep TDD methodologies in favour of accelerated output. This behaviour not only impacts my adherence to TDD but also perpetuates a culture that undervalues the long-term benefits of quality-focused development practices.

In conclusion, my journey to understand the factors contributing to my reluctance in adopting TDD has led me to identify four key areas: personality, mindset, processes, and rewards and recognition. These aspects have shaped my approach to software development, resulting in a tendency to prioritise code creation over testing. Now that I have a some understanding of the underlying reasons, I am better equipped to make conscious efforts towards embracing TDD in my development practices. In my next post, I will outline the strategies and steps I am taking to mitigate these influences and fully integrate TDD into my workflow, ultimately producing more robust and reliable software.