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 …
Continue reading “My Second Favorite Refactoring”
Read MoreRefactoring 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 …
Continue reading “My Favorite Refactoring”
Read MoreOne 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 …
Continue reading “Surgery on Legacy Code”
Read MoreIn 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 …
Continue reading “Sharing Knowledge”
Read MoreSoftware 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 …
Continue reading “Encapsulate Change”
Read MoreI 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 …
Continue reading “Why XP After All These Years”
Read MoreI’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 …
Continue reading “Scrum and XP”
Read MoreHave 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 …
Continue reading “The Agile Community”
Read MoreWell, 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 …
Continue reading “Independence”
Read MoreIn 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 …
Continue reading “Introducing TDD to Managers”
Read MoreWhen 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 …
Continue reading “Introducing TDD to Teams”
Read MoreLike 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 …
Continue reading “Code Coverage”
Read MoreThe 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 …
Continue reading “Make Your Test Fail First”
Read MoreI 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 …
Continue reading “Don’t Write All Your Tests Upfront”
Read MoreAlthough 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 …
Continue reading “It’s Not a Test of You Write it First”
Read MoreAs 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 …
Continue reading “Why Write the Test First”
Read MoreI’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 …
Continue reading “On Implementation Independence”
Read MoreI 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 …
Continue reading “Continuous Integration Requires the Right Tests”
Read MoreIf 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, …
Continue reading “Avoid Long-Lived Branches”
Read MoreFor 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 …
Continue reading “What’s Agile Software Development?”
Read MoreWIP 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 …
Continue reading “The WIP Whip”
Read MoreAs 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, …
Continue reading “The Power of Continuous Integration”
Read More