Agile CMMI

Wednesday, January 23rd, 2008 at 10:47 am by Trevor Tunnacliffe

“Are we a CMMI certified company?”

I was speaking with a business associate the other day. We were learning a bit about each other’s companies and he asked me this question. I answered as well as I could, trying to balance the art of diplomacy with frankness. I confessed that we were not, and that while there are many good things about the Software Engineering Institute (SEI) and its processes, we are a rather different software company than those that benefit from their Capability Maturity Model Integration.

“CMMI prescribes an intense process, and requires a lot of documentation in order to guarantee quality, repeatability and ongoing improvements, while we are an agile shop that is focussed on delivering high quality software with a well-defined but very lightweight process,” I told him. “CMMI is geared toward keeping a symphony-orchestra-like software company on track. There are a lot of players and the organization needs to move seamlessly forward when new players are switched in. We are more like a jazz ensemble: our extraordinary achievements are accomplished by recognizing the star power of the individuals in our team, and we are oriented toward freeing and empowering them.” I went on to describe a bit about the agile methodology, and how both the SEI and agile thought leaders are attacking the problem of managing software development from different directions. We are very interested in the quality of our software, and are constantly revising our processes to that end — its just that our context and techniques are different from CMMI.

After our meeting, as is often the case after I have charged forth with an off-the-cuff speech, I reflected on whether what I had asserted was really true. Are my previously held opinions of CMMI actually valid? I did a search on agile and CMMI and a few interesting articles dropped out. There are not a lot of good hits, and those that I viewed all validated the apparent antipathy with phrases similar to: Agile and CMMI: Oil and Water? It does seem that the community concedes that Agile and CMMI appear to be at odds. However, it seems that there may have been a spark of interest in reconciling the two methodologies a couple years ago. And although there are less hits discussing the topic more recently, it appears that agile thought leaders are participating in defining the next version of CMMI, and I will certainly review version 2.0 when it appears.

I’ll just pass on one article, which is provocative and well-written:
http://www.agilemanagement.net/Articles/Papers/StretchingAgiletoFitCMMIL.html
This article justly received a healthy distribution, so you will also find it on other sites. It describes David J. Anderson’s 2005 experience in designing an agile process for Microsoft’s Solutions Framework that was CMMI Level 3 compliant. The article is remarkable in providing details on the theoretical compatibility of CMMI and agile methodologies, drawing on the thinking of W. Edwards Deming, as well as describing how the principles were put into practice for Anderson’s MSF method.

While 2Paths is not currently in a position to begin the process of becoming CMMI compliant, there is much food for thought in Anderson’s article, and I expect that some of our upcoming process improvements will benefit from our studying it.

In this case, I learned a lot from attempting to speechify on a topic I was not fully abreast of!

Solstice fireplace

Friday, December 21st, 2007 at 9:23 am by Trevor Tunnacliffe

It happened again, I got tangled in the eddy of the winding years

Just a moment ago, I stood in a thicket of pale green buds, yearning up toward the waxing light
There was no horizon there, just branches hung with sparkling drips, the first spring warmth, a gentle gurgle from the melted snow

I was down on haunches to take in a bright uncoiling fern
Delicate slow motion gesture
Every frond outstretched, exquisite grace
Each formed of tiny fractal copies of itself, and each alive

With the subterranean throb of waking life,
I slowly breathed the rising sun-warmed funk of last years mulch
Lost until I reeled and swooned toward the the tiny spiral there

With a microscopic crackle and electric hum
The frond unfurled with a creeping pace
I saw it grow!

—<0>—

Jarred awake, I stood and marked the passing time
Set off at once with determined steps toward the falling sun
Now the world was drowsy hot
Tawny golden wheat shimmered in the heated air, stirred with undulating ripples to the distant sky
Bees buzzed in the dun parched hollow

—<0>—

My footsteps plodded down the shadowed forest path
Cracked sudden on a thin-iced puddle
Jagged slivers traced a star out to the lace-edged frost
Concentric angles radiating from minute points

Like the veins in maple leaves above
Touched with flame, ablaze against a lacquered sky
That birch: a tumbled chandelier, leaves hued like candle flames

—<0>—

The sky bled fast to clotted indigo
Stars wheeled unchecked their arcing course
My crunching footsteps ringed with lilac in the snow
Beneath stark criss-crossed branches to my home, familiar cul de sac

Inside is gloom, it seems to be the end, so cold and dark and still
But at the hearth a ghost of warmth remains

Digging into ashes, there’s a sullen ember still

Blow gentle breath, the glow revives
With straw and twigs and crisp old leaves,
A ruddy light infects the stove, ignites

Soon leaping flames reveal the nestling room
Shadows stir and wave
The tinge of warmth invokes the memory of sun and light and growth

The fire’s heart: a den of coals ripples with its in-drawn breath
and flings it up as flame
Gives me hope and strength to abide the lull,
To ride the coiling year
Till Spring curves round again

Highly cohesive, loosely coupled

Wednesday, December 19th, 2007 at 9:16 am by Geoff Webb

With great vigor and a sense of wonder we headed into the great wide open that is Whistler Mountain. It’s not often that one can enjoy a day (or weekend even) on the slopes thanks to one’s workplace yet that is indeed what we were able to do as our work Christmas do.

Most of us stayed together within the confines of a lovely condo within Whistler Village itself. This allowed for some more relaxed socialising and a distinct family feel to the weekend as we all got to know each other better. The weather was fabulous and the snow was in immaculate condition, being so early in the season. As a group, those of us more comfortable with the terrain managed to stay together and enjoy the skiing/boarding together which is sometimes rare with larger groups as the more hardcore lose patience and trail off to find their own powder moments.

The thing that struck me most of all, apart from the great conversation, excellent skiing and riding and all round good times, was the fact that in two days of constant interaction, we all managed to NOT talk shop. This indeed is something that I think highlights our abilities to gel as a team (and as people) in that it shows we can actually have interesting and constructive interactions which do not necessarily bare any relation to our work selves.

The many “eyes” in “team”

Monday, November 26th, 2007 at 7:40 am by Trevor Tunnacliffe

In every team, there is a dynamic energy that brings it together. We recognize that the individuals in our team are not only critical to our success, but are also motivated by it: the key is simply to enable each of us to most effectively play our part.

As a small shop, we must all play different roles at different times. Our effectiveness is based on adapting to the shifting demands on our team throughout the project lifecycle. Each of our developers is both a specialist and a generalist. Besides constantly enhancing our general abilities, we actively cultivate complementary individual specialization, enhancing our ability to deliver technically distinguished software.

While shifting roles and specialization help us remain interested and committed, effective leadership is required to ensure everyone is playing the right role at the right time. We are oriented to shift roles as needed, and this includes the leadership role. While some team members possess natural leadership skills, others have particular knowledge and insights which are critical at certain points in a project. Smoothly transitioning leadership — sometimes on a daily basis — is a sign that our team is adapting well to the shifting needs of the project.

Such a dynamic culture is only possible with timely open communication. This includes communication between our team and the client, as well as within our team. We need to quickly share information as it becomes available. At a minimum, we have internal daily project meetings, and must be ready to remove impediments as they arise. We require our client to be available throughout the project to provide clarification and direction as needed.

Its not easy to establish and maintain such a dynamic team environment, but it is highly effective. We are able to deliver high quality software more effectively than either a solo developer or a large organization. This is very rewarding for all of us, which galvanizes our commitment to pursue and refine our approach.

Webapp Configuration - the Spring Way

Thursday, November 8th, 2007 at 5:37 pm by Geoff Webb

Most Java applications will need some context specific configuration when deploying to a certain environment. This configuration could be username, password and JDBC URL for a specific database configuration or the details of an SMTP server for java mail deployments amongst others.

There are many ways to to provide runtime configurations for Java applications. For web applications, two popular mechanisms are the use JNDI configurations managers and using properties files. Both mechanisms have their limitations and caveats.

When using The Spring Framework, we are presented with a few more options to enable configuring web app projects.

The traditional approach involves using property placeholders which are then munged at runtime with a specific properties file to ensure the placeholders have valid values before executing the application. Another approach is using the newer (Spring 2.0) PropertOverrideConfigurer to override pbean definition properties at application startup. This approach allows the default spring config file to be usuable w/out needing a valid property file as no placeholders exist in the config itself but properties are merely overridden at runtime if need be. This is slightly nicer as it means that a default spring context XML config file will run w/out needing any special property merging. This allows for projects to be run within an IDE (like Eclipse) without having to jump through hoops or run special ant/maven targets to stick the correct properties file in the classpath when wanting to run your app embedded in Eclipse.

Essentially, the default Spring context configuration will work out of the box but can be overridden at runtime with other property file based properties to ensure things run properly at deployment. It’s not that dissimilar to the PropertPlaceholderConfigurer but allows for an easier workflow when wishing to work seamlessly with an IDE.

Not sure if any of this makes sense but there is more info out on the InterWeb:

gMail IMAP

Tuesday, October 30th, 2007 at 12:18 pm by Geoff Webb

Finally google have implemented IMAP for GMail. I set it up and it works quite nicely. Your ‘labels’, if you have any, are top level folders in IMAP and the google list of categories (All Mail, Drafts, Sent Mail, Spam, Starred, Trash) are all listed as folders within the [GMail] folder. Nice.

There are however a few things to note especially is using Thunderbird which has some interesting quirks when setting up IMAP accounts. Once you setup a new account (and before you login) its best to make the following changes to ensure smooth operation of your IMAP accoutn at gMail.

Server Settings

  • Security Settings
    You need to ensure you use SSL (port 993) when setting up your account connection in Thunderbird (and any other mail client I guess) as thats the default for gmail IMAP. Thunderbird does not allow you to specify this during the wizard account creation (as far as I am aware) but you can access it from the Server settings panel in the account configuration dialog box.
  • Server Settings
    Instead of storing deleted messages in the trach, its best to mark them as deleted this allowing gmail to manage the trash for you.

Copies and Folders

  • Deleted items
    The nice thing about gmail is that if you send using googles SMTP server, your mail will automatically be saved in your gmail ‘Sent Mail’ category. As such its kind of redundant to get Thunderbird to also store the mail in the Sent Items (either locally or on gmail) so you may like to disable this.
  • Drafts and Tempaltes
    Thunderbird by default stores Drafts and Templates (has anyone ever used these?) - to avoid these being created unnecessarily, you can select which folders to use or just set it to or store locally if you wish.

Once these things are setup you should be good to go. It is quite nice to have IMAP access to gmail as it means you can access your IMAPed gmail from other machines (and of course the web interface) and you have a consistent email experience. It seems to work much nicer than their POP access which was always a bit flakey - message status are nicely synchronized and centralised.

g.

Tricking Continuum : Self-Dependencies and the Antrun Plugin

Wednesday, October 24th, 2007 at 12:54 pm by geidsvig

A project I’m working on was recently added to continuum to track build success. Unfortunately, we had to include the maven antrun plugin to handle two self-dependencies that the project has. I say unfortunate, because it made life hell to get the project to build when we changed version numbers. But, I have a solution.

The theory:
- before changing the version of the project, create the future version’s self-dependency jars.
- to do that, we need to change the antrun scripts to create new jars that will be used in the next project version. Commit to subversion and run continuum build.
- then we can change the pom to the next project version and when run in continuum it uses the jar created by the last version of the project. Maven2 then thinks it has the right jar, so the dependencies pass. The antrun scripts then fire off, and create the correct new jars that will be included in the project build.

The Implementation:
- if we’re on version 32, then change the scripts to create jars for version 33, and leave the project as version 32. Commit to subversion, then in continuum run build. Now we have project 32 that created jar 33 for us.
- The version for the project can finally be updated to 33, committed to subversion, and run successfully in continuum builds.

Now, for those of you not familiar with how to get antrun working in maven2, you need to add in the pom.xml in the plugins section:


<plugin>
<artifactId>maven-antrun-plugin</artifactId>
<executions>
<execution>
<phase>generate-resources</phase>
<configuration>
<tasks>
<echo message="To skip install modify pom to not include maven-antrun-plugin"/>
<exec
dir="${basedir}"
executable="${basedir}/installLib.sh"
failonerror="true" />
<exec
dir="${basedir}"
executable="${basedir}/installXmlbeans.sh"
failonerror="true" />
</tasks>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>

For the installXmlbeans script we have something like the following: (directory xsd contains those files to be converted to xml beans)

VERSION=33
touch src/main/xsd/*
mvn -P installer xmlbeans:xmlbeans
mvn -P installer install:install-file -Dfile=target/projectname-xmlbeans.jar -DgroupId=com.twopaths.projectname -DartifactId=projectname-xmlbeans -Dversion=$VERSION -Dpackaging=jar

Hopefully this saves other people from the same continuum self-dependency versioning hell.

-Garrett

Eclipse update, fix for home and end keys

Friday, October 19th, 2007 at 9:32 am by glea

2Paths Eclipse Distro v2
I’ve put together a new disto of the latest Eclipse wtp with some added plugin goodness. I’ve found this version to be much more stable than v1, and it even works on Lorill’s machine without too much trouble. Among the new features is a regex tester plugin, and a filter plugin that allows you to run command line tools such as sed against a selection in the text editor.

Also note that I’ve put together a 2Paths preferences file that remaps the home and end keys in eclipse, and adds in the 2Paths code formatting templates. To import, once you’ve got the new eclipse up and running, select import and choose preferences.

Download Eclipse 2Paths Edition v2 (155.6MB)

Fix for home and end keys
If you’re anything like me, you are used to having your home and end keys go to the start of the line of text and the end of the line, respectively. The way OS X does it drives me insane, and I’ve finally found a solution that even fixes it in firefox: KeyFixer.

KeyFixer is a free utility that remaps those keys, there are 2 versions, the standard one that remaps it in OS X and most apps, and KeyFixer for Firefox which is self explanatory. I recommend installing them both if you want your home and end keys back.

Download KeyFixer (60KB)

Download KeyFixer for Firefox (80KB)

Friday, October 19th, 2007 at 9:32 am by glea

Seriously, No BullFluff

Friday, October 5th, 2007 at 2:33 pm by chico

Last week’s No Fluff Just Stuff symposium was undoubtedly the best Java event I’ve attended thus far, and the icing on the cake was Brian Sletten’s talk on “Beyond Cute-sy Mashups”. It was worth showing up for that alone. It’s not very often that it happens, but I’m stoked.

Below is my newly updated ‘Bleeding Edge Learning Curve Road Map’: