Skip to main content

Apply TDD to everything

Red, Green, Refactor; the TDD mantra is about breaking things down into small pieces and repeating steps, building up from simple to complex, until you accomplish the larger goal. It gives you a framework for how to approach a problem and confidently and consistently solve that problem. Coding using TDD leads to better code and is less stressful.

So why not try to take what works well about TDD and apply it to everyday life?

First stop and think about what you are doing. What do you want to accomplish? Do you want to get a new job? Are you planning a vacation? Do you want to get in better shape? Whatever your goal is, you need to start by figuring out what you ultimately want to accomplish.

Once you know what you want to do, what is the smallest step that you can complete that will set you on your way? Update your resume, book a hotel room, go for a walk. Whatever makes sense for you to begin, do it and start the ball rolling towards completing your goal.

Now that you have the first step towards completing your goal, continue working on the next smallest thing you can do to further progress. Just with TDD, keep cycling through small improvements until you get to the end.

If you are trying to accomplish something and large, something that will take many steps, perhaps something that will take many years or the rest of your life even, you also need to remember to "refactor." Take some time out in pursuit of your goal and look at how far you have come, what you have accomplished, and how things might have changed along the way. Think about how differently you have been able to change code when you refactor because of different things that you have learned and new variables that have been introduced, well the same can applied to life changes and lessons.

So that covers the value that TDD provides, but what about the Tests themselves? In TDD you have tests to provide confidence when you change something. Tests will give you information about what the code is supposed to be doing, and probably about how you reached the ultimate solution.

So how can you get tests in real life? You need to keep track of your progress and the steps you have taken towards your goal. Get an Evernote account and make a note for everything you do. Get a pen and paper notebook and track what you are trying to do. Whatever method works best for you, but start tracking your progress.

No, you won't be able to run your "tests" fast or often, but having a log of what you have been doing will allow you to look back and see what has worked well for you and what hasn't. If you organize your notes well you should be able to go over them fairly quickly and see patterns.

As with TDD coding, you will continue to learn as you apply the mantra and you can refine your process to suit your needs.


Popular posts from this blog

Converting a Large AngularJS Application to TypeScript Part 1

I work on a project that uses AngularJS heavily. Recently we wondered if using a preprocesser like CoffeeScript or TypeScript for our JavaScript would be beneficial. If our team is going to switch languages, we would need to be able to convert existing code over without much pain and we would have to find enough value in switching that it would be worth the conversion.

I had read an article that stated that because TypeScript is a SuperSet of JavaScript, you could convert a plain JavaScript file to TypeScript by changing the extension to .ts and not much else would need to change. I wanted to test out this claim, so I took a file that I was familiar with, an Angular Controller, and tried to convert it to TypeScript to see how much effort it would take and then try to figure out where we would benefit from using TypeScript.

This is what the controller JavaScript file looked like to start out with:
(function () { 'use strict'; angular .module('app') …

Converting a Large AngularJS Application to TypeScript Part 2

In part 1 I was able to take an Angular controller written in JavaScript and convert it to a TypeScript file while doing very little to change the code. In this post I am going to explore transitioning that same controller to actually use the features provided in TypeScript. This is how I left off my controller:
declare var angular: any; (function () { 'use strict'; var controller: any = function($scope){ ... } angular .module('app') .controller('controller', controller); controller.$inject = ["$scope"]; })();
While performing the translation from JavaScript to TypeScript, I would make sure at every step that the functionality I expected still worked, so if anything I did broke the system I would change it back and try again with another approach. Also if something seemed like it worked too easily, I would break it on purpose to make sure I wasn't getting a false result through browser caching a previously working fil…

Gamify TDD

I like it when things that would not normally be associated with games add concepts from games as a way to incentives you to accomplish things. Why simply go for a run if you can have an app that will track you and give you a gold star if you do better than you did the last time? Why go to the coffee shop that only gives you coffee if the other one will give you points that you can redeem for free drinks eventually?

I was recently introduced to CodeSchool, an online training system similar to PluralSight, it has video courses and challenges you can take to prove that you retained what the video taught. CodeSchool also adds badges and tracks to your learning, so as you complete a video and its challenges you get a badge. Complete a collection of courses within a specific discipline and you become a master of that discipline.

Some of these incentives are not tangible and really don't mean much in the real world, but they tend to work for me. If I start working towards a large goal a…