Continuous integration lets us automate the software validation process so we can confidently make last-minute changes and get instant feedback when we’re introducing defects into the system.
Wrapping up this series of seven blog posts on burning down risk, I want to talk about validation. Validating our ideas, assumptions, and features is critical to tell us if we are on track. We want to get software in the hands of our users as quickly as possible so that they can tell us …
Continue reading “Validate Often”
Read MoreThis is going to be a short post. In agile software development, small is a big thing! When we talk about small in agile, we are talking about really small. The smaller, the better. When we break down big tasks into small ones, much of the difficulty around implementing them goes away. Small tasks give …
Continue reading “Build the Smallest Piece that Shows Value”
Read MoreA big part of managing a software development project is monitoring and managing the risks involved. Software development is a risky activity. Remember that throughout our tumultuous history in software development, according to the Standish Group, one-third of all software projects get canceled and never see the light of day. This was true in the …
Continue reading “Identify Areas of Risk”
Read MoreI’ve built my career on writing software to automate other industries. I’ve learned a lot about a range of disciplines and businesses, how they operate, and very often their “secret sauce” can be embodied in the software that they write to run their businesses. I believe that the quality of our build and the quality …
Continue reading “Invest in Automated Tests”
Read MoreI’m going to go out on a limb here (pun intended) and say that the purpose and benefit of continuous integration have to do with integrating our code continuously. That makes sense but I see so many teams use their CI systems to isolate their code in branches and prevent the code from being integrated …
Continue reading “Avoid Branching”
Read MoreThis is the first post in a new series of posts called Seven Strategies for Burning Down Risk based on the section with the same name in my book, Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software. Of all the agile technical practices the first and most important one …
Continue reading “Integrate Continuously”
Read MorePerhaps the most important yet easiest to implement of all the software development practices in Agile is continuous integration. Continuous integration is simply creating an infrastructure where the code that is being built can immediately be integrated into a project. One of the biggest challenges when writing software is the dependency relationship between the code …
Continue reading “The Importance of Continuous Integration”
Read MoreI finished my “Seven Strategies” series of 72 blog posts with seven strategies for implementing each of the nine practices from my book, Beyond Legacy Code: Nine Practices to Extend the Life (and Value) of Your Software. These posts are filled with practical advice for implementing the nine core practices from Scrum, Extreme Programming, and …
Continue reading “Summary of Seven Strategies Series”
Read MoreThere are good crutches and bad crutches in life. Being addicted to using heroin is a bad crutch but being addicted to using a working build is a good, healthy crutch. This is the kind of crutch that I want to encourage. A healthy, well-maintained build is the heartbeat of a project. Removing friction from …
Continue reading “Fix Broken Builds Immediately”
Read MoreI’m not a believer in having standards for test coverage. I know teams that require 60%, 70%, or 80% test coverage for their code. I don’t like having standards like this because different code has different requirements for testing. Straightforward code like getters and setters don’t really need to be tested. However, more complex code …
Continue reading “Keep Test Coverage Where it is Needed”
Read MoreThis has become my favorite subject because it turns out that testability, above nearly every other metrics, is important to strive for in developing software. All other code qualities seem to be a reflection of testability. When I say testable code what I mean is code that can be verified programmatically and in a very …
Continue reading “Write Testable Code”
Read More“You are done, finished. Time to move on.” How I long to hear those words when I’m working on a task. Specifications can be squishy and it can be difficult sometimes to determine if the task is complete or not. Software developers don’t want to gold plate. The problem is that we often don’t know …
Continue reading “Define Acceptance Criteria”
Read MoreI believe that continuous integration is at the very heart of Agile software development. It allows us to go fast by going small. What I mean by this is that we learn by building in small increments that it’s more straightforward to create modular software that’s independently verifiable and by building smaller it gives us …
Continue reading “Integrate Continuously”
Read MoreWe want to automate the build so that it is easy to use. We wanted to be so brain-dead simple to use that we use it all the time and we invoke the build whenever we make even a minor change to the system. This is how we get the most value from our build–when …
Continue reading “One-Click Builds End-to-End”
Read MoreVersion control is an important part of file management on every software development project I’ve ever worked on in the last two decades, regardless of the methodology. I’ve used Subversion and Git and several others in the process of building software. I always find it a bit surprising that other industries don’t use version control …
Continue reading “Use Version Control for Everything”
Read MoreOnce we define what we want and build the smallest increment, we want to integrate it into our system as soon as possible so that we can see it working and get a true measure of our progress. Continuous integration is at the very heart of every Agile project and so I wanted to introduce …
Continue reading “Why Practice 3: Integrate Continuously”
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 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 MoreOne metric that I think is most important to look at during an Agile transformation is the frequency of commits that developers make due to the build. This gives us a huge amount of information about several important things. First and foremost, it indicates the amount of friction in the build and how much work …
Continue reading “Commit Frequently”
Read MoreWe didn’t do a lot of automated testing as an industry back in the late 1980s, but I did. I was working for IBM on one of the first hypertext implementations, which later became HTML. Our authoring system created very complex data structures that required us to do extensive testing to validate they were correct. …
Continue reading “Early Automation Experiences”
Read More