Friday, November 18, 2005

Interview with Paul Duval

Shahid points to Andy Glover's interview with Paul Duval about Duval's new book on software project management.

What is Continuous Integration?

In defining continuous integration, most people refer to the article that Martin Fowler and Matthew Foemmel from ThoughtWorks wrote several years ago. In it, they refer to CI as "a fully automated and reproducible build, including testing, that runs many times a day". I expand on this definition and describe CI as "an automated process of building software whenever a change is applied - this may include automated testing, inspection, reporting, deploying, and notification."

It's amazing how their paper has become the touchstone for defining CI even though it's been around in some form or another for awhile! Given that is not some new revolutionary tool or technique, why should I care about CI?

Because it does the dirty work for you, so you can write software for your users and not spend time on infrastructure issues. It reduces common risks, improves the software quality, and ensures timely feedback. I don't know about you, but I don't like paying bills so I use automatic bill pay. Why? Because paying my bills is a mundane, repetitive activity that drains money from my account. I still haven't found anything to prevent the draining of money, but at least I don't need to do the mundane repetitive work any more. I like working on interesting and unique problems when developing software and there is far more in software development that is "dirty work" than you might imagine. It is the "little things" here and there that add up to decreased productivity and efficiency. Of course, "building the software" is something that we must do, yet I have seen far too many shops who haven't even automated their builds. In fact, an MIT study conducted in 2003 indicates that only between 20-25% are even running daily builds. There is so much more, including the execution of regression tests, static analysis tools, SCM labeling, database integration, notification, and deployment that can and should be automated - and run continuously.

This is the first time I have heard the expression, continious integration, so it is something I am going to have to look into. I don't think you can flack this stuff if you don't know what it is.

No comments: