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.

Comments

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'

My idea for Hearthstone to add more deck slots

Recently someone asked the Blizzard developers for more slots for decks in the game Hearthstone. The response was that they are talking about it and looking into it, but no decision has been made yet. One of the concerns over adding deck slots is that it could complicate the UI for Hearthstone and make it more difficult for new players to understand. I have what I think would be a good solution to add more deck slots without increasing the learning curve for the game much if at all. First I would take a look at the current selection screen for starting to play a game. It defaults to showing the decks that are custom built by the player if they have any custom decks, and there is an option to page over to the basic decks. This basic deck screen is perfect for how I would change this process. Instead of having 2 pages of decks, 1 for basic and 1 for custom, you would just see the select a Hero screen. Then once you selected the Hero you wanted, you would see all of the decks that

Interns: Taking off the training wheels

My intern team has been working for several weeks now on our new website. We have already completed one deployment to production and are finalizing our second one. We started with a plan to release often adding small bits of functionality as we go and so far that plan has been working really well. We already feel like we have accomplished a lot because we have completed many of our project's requirements and should easily be able to complete the rest giving us time to do even more than just the original requirements. One of the things I have had some difficulty balancing has been how much to lead the interns and how much to let them figure out on their own. In deciding what our team process should be and how we should allocate our time, I think it was important for me to do more leading. I saw some deficiencies in how we were currently working and brought up some ideas for how we could address them. We had moved into spending all our time just working through stories and did not