Coté : Make the Iteration Fit the Deliverable, and Other Thoughts on Becoming Agile

Coté from the DrunkandRetired podcast has written a very good article called Make the Iteration Fit the Deliverable, and Other Thoughts on Becoming Agile.

Key points I took away are:

  • Agile development doesn’t mean planning less; as a matter of fact, it takes more planning
  • Planning should happen as part of the team not apart from it.
  • There is no fixed iteration size. You should plan your iteration size based on what you are doing.
  • Two week iterations require a pipeline of planning in order to work effectively. This pipline is normally not present unless your organization has reached a level of maturity
  • Agile development doesn’t mean throwing away design

In my mind, one of the misconceptions that people have when switching to any methodology is that there are a set of rules and procedures you must follow in order to be “doing the methodology”. I don’t think this is the case. The great thing about agile development is being able to adapt to the situation rather than be “stuck” having to follow a set of steps no matter what.

When I think about this idea, the quote from Bruce Lee about Jeet-Kune-Do, his martial art, always comes to mind:

Absorb what is useful, reject what is useless, and add what is specifically your own.

Bruce Lee was annoyed with traditional martial arts because it had “too much form”. The martial artist was unable to adapt to the unexpected. Rather he was limited by the forms he used while learning. (Before any martial artists start posting comments – this was Bruce Lee’s philosophy – not mine). Lee thought that the martial artist, given a set of tools, should be able to react naturally rather than having to think before responding.

I view development “methodologies” in the same way.

Things are going to happen. We have to be able to respond to them in order to be effective, and not get caught up in “how” we get things done. This to me is the power of the “philosophy” of agile development. It has nothing to do with iteration size or any of the other “guidelines” in the methodology.

Shorter iterations, however, do not mean that we do not design or plan during the process. It doesn’t mean working randomly. It means that we should do what is necessary in order to plan, design, and execute – no more and no less.

I think it would be more useful to explain Agile development as a philosophy in this way rather than a set of “methodologies”. People get caught up in “doing the methodology” rather than executing what they have set out to do. I have seen this time and time again as people try to change the way they do things. Agile development methodologies provide a set of tools, like TDD and the idea of iterations. Its up to you and the needs of the project to decide which tools are appropriate to get the work done.

Anyway, I digress. Coté has obviously set off a whole train of thought in my head this morning with this article. Perhaps it will do the same for you.

Charles Petzold: Does Visual Studio Rot the Mind?

Charles Petzold, author of Programming Windows (the Bible of Windows programming when I was coming up) has written an article called Does Visual Studio Rot the Mind?. In this very well written (and very LONG) article, Charles goes through the history of Windows programming as he sees it and explains how he feels Visual Studio removes a lot of the “real programming” out of Windows development these days.

I too have fond memories of the “old days”. I remember being the only one in my department that could recite all eleven CreateWindow parameters and being the “Windows API” manual for the department. Nowadays, as Charles points out, Intellisense and code generation have given programmers the ability to “opt out” of actually learning the environment that they work in, as the full API is only a keystroke away. The IDE does way too much for people these days.

Damn all this technology. Give me my BRIEF editor or EMACS any day.

Ed Gibbs: Selling TDD

Ed Gibbs talks about the difficulty in selling Test Driven Development (TDD) to his development staff. I agree with him 100%. I’ve been trying to express the value I’ve found in this technique for quite some time now and am not getting the best reception or adoption from my staff. We still find the majority of the tests are written after development has been completed and at a time when most of the relevant details that should be in the test cases are forgotten due to release schedules.

My first foray into TDD was invaluable and taught me quite a bit about the value of writing tests WITH the code you are writing. I was writing a set of object oriented Python scripts that managed our CVS repository. These scripts were originally written in PERL and I had begun learning Python and wanted a real project to use it on. This was also a very good project for object orientation and objects are something that I really despised doing in PERL, so Python was the obvious choice.

In the decision to rewrite these scripts in Python, I found that Python came with PyUnit and thought it was a great opportunity to try TDD since I had just read Kent Becks book, Test Driven Development: By Example. I’m one of those people that can force himself to try something new out of sheer will, even if I don’t quite believe that it will have benefit.

During the development of these scripts, I created an object model in which I could manage multiple source repositories and perform actions on them such as checking out a workarea, branching the repository, and creating new work areas with new build numbers assigned to them. The application wound up being more than I thought it would be, but I stuck with the TDD approach and wrote my tests.

When we made the decision to move to the Subversion Version Control System, I had quite a bit of refactoring to do in order to support both the CVS repository and the Subversion repository in order to reduce cutover time (we basically had to change a property file when we had completed to move to the new source control system). The tests that I had written during original development were invaluable in reducing the development time in refactoring the base source control objects to support the Subversion system and we wound up with a fairly robust application that supported the original requirements of the CVS repository on Subversion.

The best part is that I knew that all of my requirements were met, because I had the tests to run and prove it.

Even with this (I think pretty compelling) example, the TDD approach has been a hard sell. I think that reason #1 in Eds post is the reason. People just think it will take more time. It does take more time, but not that much and from my experience you really don’t notice it that much. As a matter of fact, for me it added a little extra excitement watching the tests pass at regular intervals during the development cycle. Furthermore, if the time is included in the original schedule, who cares if it takes more time? If you budgeted the time, you’ve set expectations!

Still after all of this, there is resistance. I would be very interested in hearing from others who have successfully implemented this in their organizations. There are instances in which ‘leading by example’ still doesn’t work, as people fear changing what they do and find any reason they can not to. Add to that that if the one “leading” isn’t involved in day to day project work, he doesn’t have the credibility as someone who is. It looks like just another “change” the manager wants to make.

So, if you’ve made this change, I’d be really grateful if you could post your experiences in the comments section of this blog. Tell me about what you did to make this change and, more importantly, the benefits you received as a result of the change. I’d love to read them and have a place where my staff can come and read them as well.

Developer Forced To Stop Development on Mercurial due to BitKeeper License

Ben Collins-Sussman pointed to this blog entry written by a developer on the Mercurial Distributed Version Control System which talks about Larry McVoy contacting his employer about his work on the project. His employer is a licensed user of the BitKeeper software.

I think its sad that an employee of a customer of a software company, with no access to the tools source code, can be told to stop developing open source software because of his use of another software application.

Think about this a minute. Before OpenOffice was useable, what if each developer who had to use Microsoft Word at work was forced to stop working on the software because of their use of the Microsoft products at work?

Much of what is going on in the Bitkeeper world right now was the main reason why there was such an uproar over the licensing of the product when Linus Torvalds started using it to manage the Linux kernel. Looks like the community was right again.

On another note, however, I’m definitely going to take a look at Mercurial. It looks like an interesting piece of software. I think its a travesty that its lost one of its developers due to the decision of his employer on what software package to license.

The full discussion on this can be found on the Subversion Developers mailing list.

Flickr Photo Album Finally Integrated

I was finally able to integrate the photo album on Flickr into the actual site, thanks to the FAlbum WordPress Plugin released at version .5 by Elijah Cornell. Once again, no brainer to install. All I had to do was modify the falbum-wp.php file to close the extra divs in my theme.

The plugin supports permalinks, tags, and all of the goodies you would expect from a Flickr based photo album.

To see the new photo album, go to http://www.bieberlabs.com/wordpress/photos, or click the photo album item in the menu at the top of the site.