RSSAmplifier

Blog

That TDD Fellow | Tech Blog | Screencasts

tddfellow.comRSS feed ↗20 posts

Latest posts

Why Best Software Engineering Practices Are Insanely Important, Really

“So, what software engineering practices do you like to use?” — I asked another developer the other day. And the answer has wholly shaken me: “What do you mean by “software engineering practices?” — was the developer’s response. When I explain what I mean by these three words (apparently, I took for granted), the person starts listing technologies. This conversation…

Are We Addicted to Complexity?

As software engineers, we tend to be lifelong learners. Suppose our current job becomes less challenging, and there is nothing more to learn. In that case, we usually resort to one of the following: Find a more exciting team or company. Start something on the side in our free time. Bring more advanced concepts to the current team and codebase. It’s the third one that is the most worrying…

Feedback Time at the End of the Pairing Session

Hi there! Today I want to share the technique that we are using to improve the collaboration inside of our teams. This technique is most useful in synergy with the pairing. It is so powerful that it can remove the tension from our work and make us more productive in two or three days. First, let me give you some context. Pairing ~100% of the Time At Pivotal we pair all the time. It is very rare to…

On Being More Productive in the Morning. Even if You Are an Owl

Hi there! Today I want to share my experience of a productivity shift from the late evening/night to the morning. First, let me tell you a story on how my day was structured before for countless years. Mornings That Start with a Lunch A year ago and before I was pulling out late nights almost every single day. Making an open-source contribution, working on the astounding side project idea, writing…

Drake's 24 Hours Challenge or How to Be Less Negative

Did you ever look at the chunk of code that is not very pretty, and immediately uttered some bad word or bad remark, such as “Who wrote this?” And not even noticed it? Or did you ever had an incident happening in production, and half of your vocabulary at that time was not normative? Also, did you feel stressed and down afterward? Or did you ever had to converse with a difficult person…

Build Your Own Testing Framework. Part 6: Test Suite Does Not Run All Tests!

Welcome back to the new issue of “Build Your Own Testing Framework” series! When trying to implement better formatting, we have discovered that some of our test suites do not run all tests! Today we are going to fix that, and we will make sure that such test suite will fail if it didn’t execute all tests. This article is the sixth one of the series “Build Your Own Testing…

Learning Test-Driven Development With Javascript: Laws of TDD

Level: Beginner Today we are going to learn the basic principles behind the Test-Driven Development Discipline. We will learn three rules of TDD. We will learn what are the benefits of doing Test-Driven Development. And we will take a look at the example application of these laws. " feedback " ( CC BY-SA 2.0 ) by Sonti Malonti Articles of these series have exercises and going through them would…

Learning Test-Driven Development With Javascript: End-to-End Testing

Level: Beginner. “Learning TDD with Javascript” is the series of articles where we learn basics of automated testing and test-driven development. While the language of choice for the code examples is Javascript, all described concepts are language-agnostic and are applicable in various technological stacks. In these articles, a reader is expected to do small exercises after each major…

Mobile Waterfall. Being Agile Again

Have you ever worked with mobile platforms, such as Apple Store or Google Play? How much time it takes to release a new version of the application? They have ~2-4 days manual review of your mobile application. What do you think that means? - You can release your application to production no often than two times a week. It became much better around this year - before it was 1-1.5 weeks. Would you…

Understanding Legacy Code Using Explorative Test-Driven Development Technique

Today we are going to learn how to eliminate the fear of changing legacy code. We will learn how to confidently and in small iterations understand the legacy code better while increasing the test coverage in the process. While code examples are in Ruby programming language, the technique applied is language-agnostic. For this article, we will need to define what Legacy Code means. Legacy Code…

Build Your Own Testing Framework. Part 5

Welcome back to the new issue of “Build Your Own Testing Framework” series! Did you notice, that out testing framework quits on the first failure? It probably should run all tests, collect all failures and present them nicely. This is what we are going to accomplish today: Make sure all tests run even when there is a failure. Make sure exit code is correct. This article is the fifth…

Do More With Baby-Steps TDD

Hello everyone! I’m usually advocating for the Baby-Steps Test-Driven Development with Triangulation. On the first encounter, this technique seems very verbose and everybody wonders how can it possibly work and why I am very productive with it. Let me tell you about that. First, let’s quickly recap both techniques: Baby-Steps TDD In Baby-Steps TDD the basic strategy is to get to the…

HighScore Kata

Hello, everyone. Today we will take a look into a little problem involving high scores in some sort of game. The game has only one high score and when current game’s score exceeds that number, it gets updated. Example acceptance test would read like this: Given high score is 174 When player scores 191 Then high score is 191 Current implementation stores high score in the web browser’s…

Meet Duck Type

Duck type Duck type is the concept in the domain of the type safety that represents objects, that pass a so-called “Duck Test”: If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck. In terms of programming language, it might look like this: 1 2 3 4 5 6 7 8 9 10 11 function Duck () { this . swim = function ( coordinates ) { ... }; this . quack =…

Introducing Test Doubles

A test double is a test object or a test function, that looks and behaves like its production counterpart, but is actually a simplified version that reduces the complexity and enables simpler testing. One can represent all types of test double as an inheritance tree like this: Where Double is an abstract test double, which has no functionality - it is a general concept to talk about test doubles.…

Build Your Own Testing Framework. Part 4

Welcome back to the new issue of “Build Your Own Testing Framework” series! As you might have noticed, currently, our testing framework only outputs failures and nothing else. It is impossible to know if it actually runs any tests when they all pass because there is no output. Today we will implement a simple reporter for our testing framework. It will report the name of the test suite…

Getting Stuck While Doing TDD. Part 3: Triangulation to the Rescue!

Welcome back to the “Getting Stuck While Doing TDD” series. Today we are going to learn the Golden Rule of TDD and how to not get stuck while doing TDD. TL;DR “As tests get more specific, production code gets more generic”. RED is as important as other in Red-Green-Refactor cycle. If next test does not fail, it is either: already implemented, or has to wait until a later…

Getting Stuck While Doing TDD. Part 2: Buggy Code and Forcing Our Way Through

Welcome back to the “Getting Stuck While Doing TDD” series. Today we are going to see the results of getting stuck while doing TDD and scratch the surface of how to avoid this outcome. Code examples today will be in Ruby programming language. The technique itself is, of course, language-agnostic. TL;DR It is painful and difficult to force your way through when getting stuck in TDD. It…

Getting Stuck While Doing TDD. Part 1: Example

Following 3 rules of TDD sounds really simple at first. In practice, there is a moment when one has to implement the whole algorithm at once to make currently failing test pass. This is called “getting stuck” in TDD. In this article, we will explore how exactly this happens and how to prevent that. Code examples today will be in Ruby programming language. The technique itself is, of…

Eliminating 'if' Statements: Legacy Endpoint Primer

if statements tend to duplicate throughout the code base. This may lead to subtle mistakes and bugs. One way to avoid that problem is to eliminate if statement completely. Today we are going to take a look at one example of such elimination. Code examples today will be in Kotlin. Problem at hand Our API has an endpoint for issuing some sort of verification token given device id and phone number of…