Paul Julius > Blog

Cup of Coffee Metric for Continuous Integration

September 14th, 2009

How much can you learn in the time it takes to get a cup of coffee?

How much can you learn in the time it takes to get a cup of coffee?

What happens in the time it takes to get a cup of coffee can tell you a lot about the quality of your continuous integration system. Try something out for me. Commit some code. Leave your desk to get a cup of coffee, or some other tasty beverage. When you get back to your desk, do you know whether your changes were any good? No? Yes? I hope so, and so should you. It’s called the cup of coffee metric.

The idea is simple. In the about the amount of time it takes to get a cup of coffee you should be able to get information about the quality of your changes. Look at it this way. You just committed some work. You need a short break before you move on to your next task. You don’t want to wait too long, or you might find yourself surfing the web instead of writing code. So, leave your desk. Get a coffee. Take a bathroom break. See what’s hot around the water cooler. Once refreshed, return to your desk. You don’t want to move on until you make sure your last commit didn’t cause any immediate problems. A good CI system will support this behavior by giving you some feedback in about that much time.

The level of information may not be complete. Enterprise build systems are notorious for the length of their builds. Enterprise systems are also notorious for waiting to provide any feedback until the end of the build cycle. That sucks. A little information would be better than none. It might only be an initial piece of feedback, like “Your changes compiled!” If that’s all your CI system can get done in cup of coffee time, that’s better than nothing. Your CI system might tell you everything is going smoothly, only to return later to tell you something broke. No worries, sometimes that will be the case. Hopefully not always.

As a build engineer, I am going to try my darnedest to provide you with as much information as possible while you are getting your refreshment. That’s how I keep my team humming along. I might even use a “build pipeline” to help facilitate this sort of thing, but that’s an implementation detail. I am always asking myself, “What’s the most I can possibly discover about a commit within about 5 or 10 minutes from the time a developer presses the button?”

This idea came from Jeffrey Fredrick‘s real life experiences. He and I co-present on various topics. We talk about CI a lot at CITCON, of course. Invariably we discuss the cup of coffee metric when talking about evaluating CI systems. I stole the idea from him for use in my consulting. (Most of my good ideas come from our community. Thank you internet!) With his permission, I figured it would make sense to write it up for the world. So, here you go.

Enterprise CI Culture Maturity Model

September 14th, 2009

Last Friday, Jeffrey Fredrick posted my “guest” article on the Anthill Pro blog. The article reflects on a culture addendum to Urbancode’s Enterprise CI Maturity Model.

I use the maturity model. It has worked well for me. It works especially well as a communication tool with my clients. I was feeling, though, like something was missing. The aspects listed on the original maturity model were thing focused. Here’s an example, Historical Reports are listed on the Intermediate level for Reporting. Excellent point, and I agree. But that’s a thing. One could publish historical reports until they are blue in the face. If nobody looks at them, then what’s the point?

OK, so most of the maturity model implies some action, I know. I wanted to call that out a little more explicitly.

In fact, I wanted to bring out the People side of this equation. People over process, remember? Actually, People over Automation tools, should also be true. So, that’s what I did. I tried to pull together some People aspects that will help you gauge your company’s success. I hope it helps. As Jeffrey noted when he emailed the CITCON mailing list, he looks forward to seeing the maturity model continue to evolve. I do, too. I think it has the potential to level the playing field a bit and mediate the “tool wars”. Those wars cloud the real mission – working software.

Please read the full post. Feel free to comment there. I will be interested to see where we go from here.

Got CI, TDD, Pair Programming, …?

February 11th, 2008

Are you tired of fighting with management to get them to let you setup a CI server for your team?

Are you tired of tiring to prove that TDD will actually make your team developer faster?

Are you fed up with watching QA run their tests by hand, over and over again?

You need Stelligent!

At Stelligent, we are hiring the brightest minds in the industry to help us help our clients. What do our clients want? They want to do all those things that you have been trying to do at your job, to no avail.

So, join Stelligent and become part of the Agile engineering movement that really makes a difference!

Email your resume to jobs@stelligent.com

Test-Driven Everything!

November 6th, 2007

Now that I am working at Stelligent, I get to post blog entries on the company blog at TestEarly.com. TestEarly provides a wealth of information about the types of things we are doing in the industry. You might want to read through some of the back posts, including a very intriguing one by Paul Duvall on why you should fire your best people.

For a while now, I have been meaning to write up how one of my teams used FitNesse to automate testing throughout the full lifecycle of the application development process. We even convinced business analysts and customers to think about testing from day one. I hope you enjoy my first post to TestEarly on Test-Driven Everything!

P.s. Don’t worry, I will continue to post relevant information on this blog as well.

Accepted New Position at Stelligent!

October 22nd, 2007

I made the first public announcement about my new position whilst at CITCON Brussels 2007. But, today an official press release came out announcing the move.

Stelligent Logo

I am very excited to announce that I have officially accepted a position at Stelligent. Stelligent’s an innovative, small company doing cutting edge consulting on Agile, Continuous Integration, Testing and Deployment.

As some of you probably remember, the folks from Stelligent are the co-authors of the new book on Continuous Integration published in Martin Fowler’s signature series at Addison-Wesley. As I teased them at CITCON Dallas 2007, the best part of the book is the forward that I wrote… ;) . Of course, the entire book is a great read!

I can tell Stelligent’s at that breakthrough point…where we are ready to go from a small consultancy to a great consultancy, leading the world with new ideas and approaches. In other words, it’s right up my alley!

CruiseControl 2.7.1 Final Release

September 4th, 2007

The final release for CruiseControl 2.7.1 has been posted to SourceForge.

Download the new release here.

Some cool things in this release include:

* Upgraded Ant bundled with CruiseControl to 1.7.0.
* RPM / Debian packager updated to include most features from the binary
distribution.
* Dashboard displays artifacts in a tree structure.
* CC-config project is now included as a link in the dashboard to use
for configuring CruiseControl.
* Basic integration mechanism for project management tools (e.g. Mingle,
Trac).
* Dashboard bug fixes.
* AllFusion Harvest plugin switch to SDK instead of command line.
* New CompoundPublisher to create groups of publishers.
* TFS support with sourcecontrol and bootstrapper.

The complete release notes are at here.

Thanks to everyone that helped make this release a success.

Contributors
* Allan Wick
* Barrett Nuzum
* Bill Wohler
* Brian Egge
* Dan Fabulich
* Dave Kilroy
* Gisbert Amm
* Ilkka Laukkanen
* Ingo Richter
* Jason R. Hull
* Jeff Jensen
* Jerome Lacoste
* Joseph Benavidez
* Lars Gehrken
* Martin Woodward
* Maxim Butov
* Nayan Hajratwala
* Nicolas Ternisien
* Paul Heaberlin
* Ram Singaram
* Robert Thornburrow
* Robert Watkins (committer emeritus)
* Szczepan Faber
* Tim Brown
* Willem Verstraeten

CruiseControl Committers
* Jason Yip
* Jeffrey Fredrick
* Hack Kampbjørn
* Dan Rollo

And the CruiseControl Enterprise Team:
* Chad Wathington
* Chris Read
* Chris Turner
* Cyndi Mitchell
* Erik Doernenburg
* Hu Kai
* Jayne Barnes
* Jenny Wong
* Jez Humble
* Jon Tirsen
* Li Guanglei
* Li Mo
* Tom Sulston
* Wang Xiaoming
* Yuan Yingjie

Alt.Net Open Space Conference | Austin, TX | October 5 – 7, 2007

August 21st, 2007

Bret Pettichord just told me about an exciting open space conference that he, and a bunch of other people are organizing in Austin, Texas. It is called Alt.Net.

The website is not up as of the writing of this post, but Scott Bellware provides the logistical details as:

“The ALT.NET conference will take place in Austin, TX from 5PM on Friday, Oct 5th, through noon on Sunday, October 7th at the St. Edwards University Professional Education Center.”

In a post by Dave Laribee, one of the conference hosts, he answers the question “What does it mean to be Alt.Net?” as:

  1. You’re the type of developer who uses what works while keeping an eye out for a better way.
  2. You reach outside the mainstream to adopt the best of any community: Open Source, Agile, Java, Ruby, etc.
  3. You’re not content with the status quo. Things can always be better expressed, more elegant and simple, more mutable, higher quality, etc.
  4. You know tools are great, but they only take you so far. It’s the principles and knowledge that really matter. The best tools are those that embed the knowledge and encourage the principles (e.g. Resharper.)

I am excited that the Open Space conference format is spreading in the software industry. The mission of the Open Information Foundation, founded by Jeffrey Fredrick and myself, is to help these types of events which endeavor to make the sharing of information available to anyone, without financial impediment. We have been hosting CITCON, around the globe, to further this goal.

If you can make it to Austin for this event, I am sure it will be a very educational, enlightening and fun event!

CCMenu: Mac version of CCTray released

August 21st, 2007

One of my colleagues from ThoughtWorks, Erik Doernenburg, has just released a Mac version of CCTray called CCMenu. Finally, the Mac CruiseControl users can enjoy the same continuous integration bliss that us Windows users have been experiencing since the CruiseControl.NET team came out with their system tray CI monitor a few years back.

Erik and I worked together on the CruiseControl Enterprise project for several months. I found him to be extremely innovative and great to work with. I am glad he is expanding the CruiseControl universe by giving back to the open source community.

Podcast about CruiseControl Enterprise

August 15th, 2007

The other day, from the Minneapolis/St. Paul Airport, I recorded a podcast interview with Megan O’Meara from CMC Media. She had some great questions about CruiseControl Enterprise, it’s relationship to CruiseControl Open Source, and how one adds a commercial offering to a long-standing open source project.

Although it sounds like I am reporting from a small cavern on a different continent, I hope that everyone finds the information helpful. Have a listen to the podcast.

CruiseControl 2.7.1 RC3 released from Agile 2007!

August 15th, 2007

I am here at Agile 2007, but found time while working the ThoughtWorks booth to finalize Release Candidate 3 for version 2.7.1 of CruiseControl.

IMG_1736

The CruiseControl Enterprise team, along with the crew of dedicated open source committers, have put in a lot of effort to stabilize the release. Please download the release candidate and try it out. If you have any issues or comments, please let us know on the CruiseControl-devel mailing list.

The changes in this release include:

CruiseControl Release Notes – 2.7.1

general
======================
* Upgraded Ant that is distributed with CruiseControl to Ant version 1.7.0.

cc-config
======================
* Fixed cc-config\3rdparty\libsystray4j.so causes build to break on Windows (CC-684). Patch by Brian Egge.
* Updated cruisecontrol’s main build to allow setting a proxy prior to downloading and including the cc-config application (CC-687). Patch by Ilkka Laukkanen.

contrib
======================

packager
———————-
* Fix build root and rpm destination for rpm target. Patch by Joseph Benavidez.
* Init script improvments based on patch by Nicolas Ternisien
* Upgrading a package will no longer overwrite users config
* Packages now depend on Java and subversion
* Package now includes dashboard and cc-config
* Now includes working connectfour sample
* Stops CruiseControl on uninstall
* Now only builds CruiseControl if needed
* .svn folder in connectfour.zip now points to correct sourceforge repository url(http://cruisecontrol.svn.sourceforge.net/svnroot/cruisecontrol/trunk/connectfour)

Documentation
======================
* Added docs for the Darcs scm plugin (CC-626).
* Fixed issue with logo appearing incorrectly placed in IE6. Patch by Jerome Lacoste.
* Add missing step in X10 publisher instructions. Patch by Bill Wohler.

dashboard
======================
NOTE: The dashboard has known display issues in Internet Explorer 6.
* Allowed artifacts to be kept in an arbitrary locations.
* Allowed config.xml to be kept in an arbitrary location
* Can render html/xml/txt in the browser.
* Can display the unit test output for passed builds.
* Enhanced the dashboard to display artifacts directories as tree structure.
* Added the cc-config (http://cc-config.sourceforge.net/) application so that it can be included in the dashboard (CC-658). Patch by Allan Wick.
* Allowed artifacts to be shown and downloaded in case of a failed build
* Allowed project name to contain hyphen (-)
* Allowed integration with project management tools
* Allowed using dashboard-config.xml to configure the dashboard
* Deprecated the way to configure the dashboard via web.xml
* Modificationset and Bootstrapping are no longer considered as building status in summary section.
* fixed unresolved velocity variable $build.build.duration in build detail page.
* Applied the patch of CC-436 which committed by Szczepan Faber
* Added error details in the dashboard (CC-665).
* Dashboard can now parse logfiles with testsuite elements without time attribute (CC-670). Patch by Ilkka Laukkanen.
* Dashboard can now parse logfiles with non-default date formats (CC-671). Patch by Ilkka Laukkanen.
* Fixed case where long project name would not wrap within Toolkit and Tooltip divs.
* Fixed layout problem with tabs when wrapping.
* Added Errors and Warnings tab. Removed Errors tab. Moved the test errors and test failures to Tests tab.

build loop
======================

AllFusion Harvest
———————-
* Added support for CA AllFusion Harvest via SDK (CC-513). Patch by Robert Thornburrow and Nayan Hajratwala. Removed previous command-line based support.

AntBuilder/Bootstrapper/Publisher
———————-
* Add ant propertyfile attribute (CC-664). Patch by Willem Verstraeten.
* Provide support for configuring additional Ant libs and listeners (CC-542). Patch by Dan Fabulich.

Builder Progress messages
———————-
* Add a Progress signaling api to the builders: <composite>, <maven>, <maven2>, <ant>, and CCDist <distributed> (CC-686).
Experimental impl for <ant> builder to showProgress can be disabled with showProgress=false.
Progess messages are shown on the reporting/jsp project pages, below the project state text.

build.sh/release.sh scripts
———————-
* Set JAVA_HOME properly on MacOSX (CC-681). Patch by Ingo Richter

CommandLine and Process exec handling
———————-
* Close process.outputStream to avoid deadlocks. (CC-527) Reported by Jason R. Hull

Compound Publisher
———————-
* Introduced a Compound Publisher (CC-656).

ConcurrentVersionsSystem/CVSBootstrapper
———————-
* Added the ability to set the cvs compression level (CC-579). Patch by Maxim Butov.

default-plugins
———————-
* Added darcs to the default plugins (CC-626).

Main
———————-
* Put the ccname command line parameter back, after being inadvertently removed (CC-651). Patch by Lars Gehrken.

MavenMapper
———————-
* MavenMapper extracts the email address for a certain committing user as configured in Mavens project.xml or pom.xml (M1 or M2) (CC-618). Contributed by Gisbert Amm.

Plugins
———————-
* Introduce a “ControllerAware” interface for plugins (CC-680). Patch by committer emeritus Robert Watkins.

Project
———————-
* Added a property named “buildforced” that will get passed to builders for conditional control (CC-653). Patch by Dave Kilroy.

PropertiesMapper
———————-
* Refactored validation for cleanliness and removing duplication with ValidationHelper (CC-642). Patch by Gisbert Amm.

Schedule
———————-
* Added trap for zero or less interval and updated docs to indicate that they are not legitimate values (CC-652). Suggested by Jeff Jensen.

SVN/SVNBootstrapper
———————-
* svnrevision property set incorrectly (CC-683). Patch by Tim Brown and Brian Egge.
* svnbootstrapper documentation incorrectly lists “checkExternals” flag. Must be moved to the “svn” modificationset element (CC-678). Reported by Ram Singaram
* Improve error message when there is no valid localWorkingCopy for SVNBootstrapper (CC-679). Patch by Robert Watkins.
* Set svnrepository property so that it can be used by builders, etc (CC-639). Patch by Brian Egge.
* Prevent “premature” SVN modifications being detected (CC-677). Patch by Robert Watkins.

TFS/TFSBootstrapper
———————-
* TFS Support – new sourcecontrol and bootstrapper plugins (CC-666). Patch by Martin Woodward.

TimeBuild
———————-
* Fixed problem when you set time build to 23:55 and the first modifcationcheck occur at 0:01 you won’t get an modification (CC-650). Patch by Lars Gehrken.

UCM
———————-
* Fixed ClearCase/UCM mode when rmver event found in history (CC-660). Patch by Paul Heaberlin.

Veto
———————-
* Improvement to provide detail in log as to what changes caused the veto (CC-676). Patch by Barrett Nuzum.