Refactor Legacy Code

My Second Favorite Refactoring

In my last blog post, I shared with you my favorite refactoring and it might not have been what you were expecting. I can’t leave the topic without sharing with you my second favorite refactoring, as well. Like my favorite refactoring, my second favorite refactoring is also a safe refactoring, which means that if you …

Read More
Refactor Legacy Code

My Favorite Refactoring

Refactoring code is an essential activity when working with existing systems, as well as building new ones. Refactoring techniques allow us to safely transform code into designs that are perhaps better suited for future extension. The techniques used to refactor code range from very simple to quite complex and there is a strong emphasis to …

Read More
Refactor Legacy Code

Surgery on Legacy Code

One of my early blog posts that I wrote nearly 10 years ago that I called Sony Baloney discussed how the electronics giant cultivated some unusual, yet highly successful practices. One of the practices that Sony is known for is taking young and inexperienced engineers and putting them on new product development, while their senior …

Read More
Rants

Sharing Knowledge

In my early days of computing back in the late 70s and early 80s, having an interest in microprocessor design was unusual. I remember getting almost monthly updates from Motorola and Intel on their latest chips and my shelves were filled with technical manuals. Information flowed freely and it felt that we were part of …

Read More
Create CLEAN Code

Encapsulate Change

Software development is a unique human activity but it bears resemblance to other activities such as math, writing, and engineering. I think of writing software as a modeling process but unlike modeling physical things that occur in space, we’re modeling processes that occur in time. Therefore, writing software is a process of creating models that …

Read More
Rants

Why XP After All These Years

I have been an advocate of Extreme Programming (XP) practices for well over a decade. To me, Agile software development means more than just an agile development process, it means that our code is agile and able to respond to change easily. This doesn’t happen by accident. It’s a result of following good programming principles …

Read More
Rants

Scrum and XP

I’ve been fortunate enough to speak at several conferences on Agile developer practices. I presented at many Scrum Gatherings both in the United States and in Europe. I’ve also presented at several of the big Agile conferences as well as the smaller technical conferences such as deliver:Agile and most recently Craft Con in Budapest. Most …

Read More
Rants

The Agile Community

Have you ever stopped to consider how fortunate we are? We are part of a community of Agile practitioners and there are many benefits to being part of this community. I am fortunate that I get to speak at many of the Agile conferences, including the big Agile Conference, the deliver:Agile Conference, Scrum Gatherings, Better …

Read More
Bits and Pieces

Independence

Well, happy Independence Day. Functional independence is one of the key characteristics of testable code so I thought it fitting to discuss today. We want to make each piece of our code as functionally independent as possible and make those pieces as small as possible. This is not always easy to do but most of …

Read More
Specify Behaviors with Tests

Introducing TDD to Managers

In my last blog post, I discussed different ways of introducing test-driven development to teams. The bottom line is to give developers an experience of benefiting from doing TDD. Once they see how their tests catch bugs that otherwise would have perhaps escaped and had to be fixed later, and how TDD helps them keep …

Read More
Bits and Pieces

Introducing TDD to Teams

When managers find out that I teach test-driven development to software development teams, they sometimes ask me how they can introduce TDD to their team. Unfortunately, it’s not always easy. We software developers are jaded. And for good reason. It seems like nearly every day we are hit with new technologies or methodologies that are …

Read More
Specify Behaviors with Tests

Code Coverage

Like most metrics in software development, code coverage can be a good indicator or it can be heavily abused. I know many teams that have a code coverage standard. For example, 80% of their code must be covered by unit tests. The problem with having a standard for the percentage of code coverage is that …

Read More
Write the Test First

Make Your Test Fail First

The test-first development cycle means that first we write a failing test and prove that it fails by running it and seeing the red bar. Then we implement the test so that it passes and we see the green bar. Finally, we refactor the code and the test for quality and maintainability. That’s the test …

Read More
Write the Test First

Don’t Write All Your Tests Upfront

I find that different people have different ideas about what test-driven development really means. Some people think that test-driven development is about writing all of your tests after you write your code. To me, that is not test driven development. I call that test-after development and when we do TDD we write our tests before …

Read More
Write the Test First

It’s Not a Test of You Write it First

Although I am an advocate of test-first development, I also acknowledge that there’s a bit of a conundrum in the name test-first development. How can you write a test for something before you write the something? There’s nothing yet to test so how can it be a test? The answer to that question is that …

Read More
Write the Test First

Why Write the Test First

As you can probably tell by reading my blog, I am a proponent of TDD. But my enthusiasm for test-first development took a long time coming. It took me a long time to convince myself that TDD had great value and was worth the effort. Software developers already have too much to do and not …

Read More
Integrate Continuously

On Implementation Independence

I’ve been looking forward to writing this blog post for a while because I’ve been misinterpreted in the past on what I mean by implementation independence. And this is entirely understandable because the concept is slippery and difficult for people to easily grasp. Yet I feel implementation independence is one of the most important concepts …

Read More
Integrate Continuously

Continuous Integration Requires the Right Tests

I see continuous integration as a “gateway practice” because it will lead to other Agile practices. Continuous integration and automating the process of validating release candidates represents a large part of the Agile vision realized. We spend nearly half of our time and effort integrating and testing code. Many companies do this manually, which makes …

Read More
Integrate Continuously

Avoid Long-Lived Branches

If you ask a hundred consultants what Agile is, you’ll likely get 100 different answers. So, here’s my answer. Agile software development can be summed up by the first principle of the Agile Manifesto, which states, “Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.” To my mind, …

Read More
Rants

What’s Agile Software Development?

For many complex processes, there are several ways to do them wrong and only one or a few ways to do them right. This is true with Agile. Many organizations claim that they’re doing Agile, but they really aren’t. Many of these organizations are frustrated because they’re not getting the benefits they expected but that’s …

Read More
Rants

The WIP Whip

WIP stands for work-in-progress. It’s a fundamental concept in queuing theory, which has become a central part of Lean Software Development. Some of us like to work on several projects at once. It feels like we’re getting a lot of things done sometimes but often that’s not really the case. Work-in-progress means that we have …

Read More
Integrate Continuously

The Power of Continuous Integration

As an Agile technical consultant, people often ask me how to get the most value from their Agile technical practices. My answer is often the same, which is start with continuous integration. Continuous integration is at the heart of all Agile software development. I see continuous integration as the defining characteristic of Agile software development, …

Read More