Most companies want to deploy features faster, and fix bugs more quickly—at the same time, a stable product that delivers what the users expected is crucial to winning and keeping the trust of those users. At face value, stability and speed appear to be in conflict; developers can either spend their time on features or on stability. In reality, problems delivering on stability as well as problems implementing new features are both related to a lack of visibility. Developers can’t answer a very basic question: What will be impacted by my change?
When incompatible changes hit the production servers as a result of bug fixes or new features, they have to be tracked down and resolved. Fighting these fires is unproductive, costly, and prevents developers from building new features.
The goal of Continuous Integration (CI) is to break out of the mentality of firefighting—it gives developers more time to work on features, by baking stability into the process through testing.
- Document the intended feature
- Write one or more integration tests to validate that the feature functions as desired
- Develop the feature
- Release the feature
This workflow doesn’t include an integration step—code goes out automatically when all the tests pass. Since all the tests can be run automatically, by a testing system like Jenkins, a failure in any test, even those outside of the developers control, constitutes a break which must be fixed before continuing. Of course in some cases, users follow paths other than those designed and explicitly tested by developers and bugs happen. New testing is required to validate that bugs are fixed and these contribute to a library of tests which collectively increase collective confidence in the codebase. Most importantly, the library of tests limits the scope of any bug which increases the confidence of developers to move faster.
Testing is the Secret Sauce
As the workflow illustrates, the better the tests, the more stable the application. Instead of trying to determine which parts of the application might be impacted by a change, the tests can prove that things still work, as designed.
Continuous Integration is just one of the many ways our DevOps group engages with clients. We also build clouds and solve difficult infrastructure problems. Does that sound interesting to you? Want to come work with us? Get in touch!