Posted on August 31st, 2009

Right now my good friend Corey Haines has a Pledgie campaign going to help him continue his pair programming tour.

Some people may question why they should donate to something like this. After all, their are tons of tales in the software industry about people making it big in short amounts of time. Further, I’ve heard some people question what value Corey is delivering to the community.

Corey has been an influence on my own career since he and I met at Agile 2006. His passion for software and the community has led me to further my own outreaches (including the Day of Ruby events I put on in Florida and that he helped co-teach with me). Further, his conviction of outreach led to the very tour which has inspired many, many people in the community about what it really means to put your money where your mouth is and show us that if we put the impossible aside and trust that we’ll be taken care of, we really will.

I’m honored to have been able to host Corey several times at my own house, and to spend many hours chatting with him. And to watch his interactions with other members in the community – well, if you’ve talked to Corey, or talked to someone you have, the thought that his contributions back to this community of professionals approach zero are laughable at best.

It is with great pleasure that I support Corey in his campaign, and in his future ventures. He’s truly a sign of what can happen when one reaches out to the community – and the community reaches back.

Click here to lend your support to: Corey Haines Pair-Programming Tours and make a donation at www.pledgie.com !

1 Comment


Posted on August 29th, 2009

On Wednesday I had the absolute pleasure of speaking at the first Software Craftsmanship North America conference in Chicago. I gave a talk entitled “Software Craftsmanship in the Enterprise” which covered the issues surrounding development in the enterprise today, and the steps necessary and both an organizational and individual level to adopt it in your organization.

You can download the slides in PDF format (13 MB) with the notes I used at the bottom of each slide. (And if anyone knows how to get Keynote to export a smaller PDF, please let me know. And yes, I’ve already optimized the images)

I think there are two key points to summarize the talk. The first is that the core of the craftsmanship movement is personal responsibility. You as an individual need to stop allowing fear to kill the passion you have for software development. This often boils down to (in the words of Martin Fowler) Change Your Organization, or Change Your Organization.

The second is that, if you are setting out to do the first half of the above quote, you recognize if organizational values aren’t in-line with what you are trying to bring about that you will be on the tail end of a very bloody battle. Or, as I told Pat Maddox on the cab ride to the airport – organizations are like arguing with stupid people. They will simply bring you down to their level and beat you with experience.

Thanks again to Obtiva, 8th Light and Corey Haines for helping organize the conference and inviting me to speak. From what I understand the sessions were video taped and should be posted Real Soon Now (and I’ll update once they are).

No Comments


Posted on August 27th, 2009

One of the things I’ve been thinking a lot about lately is how our industry has grown to this point. By industry I refer to both the Software Development Industry as well as the cottage industry around agile software development. Throughout Agile 2009 and the Software Craftsmanship North America conferences this week, the two most complained technologies and processes I hear about are the Certified Scrum Master program and Visual Basic.

Visual Basic is probably the most-oft joked about programming language, primarily because one of the scariest things one wants to hear from a customer is, “We have this app we wrote in VB…” as any hopes of good design, good code and other elements of maintainable software usually are thrown out the door. However, it’s hard to dispute that Visual Basic is also one of the most used languages in the world. It brought an amazing capability of being able to build programs to people who either would have had to otherwise hire a programmer or, in some cases, not be able to get anything at all.

For most professional software developers, it isn’t the language per se as the representative base of people using the language that trips up Visual Basic. I personally prefer more C-like languages (such as Java and C#), but from experience I know that it is possible to write well-designed, well-tested, easy to understand code with Visual Basic (especially with VB.NET).

If we turn our attention now to Scrum and the Certified Scrum Master (CSM) program, we’ll see some interesting parallels. It’s hard to deny that the CSM was a genius of marketing. “Take a two-day class to learn about an easy-to-use system that will help you build your software better, faster and cheaper!” And, in fact, that’s what many people did, taking back a program of three elements (Backlog, Sprints and Stand-Ups) without the context that to be truly effective you have to have the context and team maturity to also be able to inspect and adapt those things that are not working.

What then happened was that the corporate world got a hold of this and started sending people in droves. When I took my CSM class, there were over 30 people from the same company there, and when I asked them why they were there, the answer was, “We were told to come by our company”.

Because of the big push to be “Agile” (big-A), what this led to were newly-minted CSMs being turned out in droves and unleashed into a corporate world which did not value and was not ready for the kind of change that needed to happen. This, in turn, led to things like ScrumBut and Cargo Cult Adoptions of Scrum. In other words, companies had turned a valuable process into just another stick to beat the horses with without taking into account the true change model and goals of what they were adopting.

Similar to Visual Basic, if you talk to many agilists, the principles of Scrum aren’t the issue. Many may argue they don’t go far enough (to include things like engineering practices), but the principles themselves are sound. And indeed, if you have one backlog, work in iterations to commit to and complete the work, communicate on a daily basis, and frequently inspect what is going on and adapt your practices, you will likely see an improvement in how you work.

So, two things, both which have pushed their respective base growth, equally despised by the thought leaders not because of the things themselves, but how the people using them have taken and twisted them.

There is a very interesting difference between the two of them. With Visual Basic, the applications are written. And once they are written, they have to either be rewritten, or retired, and if we want to help those who wrote those programs, we can work to teach them fundamental programming principles. But most of those “VB developers” are workers in fields other than software, who likely don’t want to take the time to do something about it.

On the other hand, there is something that we can do about the CSM, and Scrum in general. The Scrum Alliance offers a Certified Scrum Practitioner program. To qualify, you have to be a CSM and have done Scrum for 12 months on a project. You then have to describe in detail how you used Scrum on that project, and that application is reviewed by a board to ensure that the practices and principles were followed. It isn’t perfect – it would be great if there were more personal conversations involved – but it shifts the focus away from “I took a class” to “I successfully brought the ideals of Scrum to my organization.”

In fact, there is a similar thing with the talked about Certified Scrum Developer program. Instead of just requiring a 5-day class, we as an industry need to reject anyone who isn’t at the Practitioner level (a level which hasn’t been defined by the Scrum Alliance). Then the focus becomes not just on the learning model, but on the application of the learning model in a real-world environment. I’ve also heard rumors that the CSM will only be allowed to be kept as a certification for 2 years, at which point you either should be a CSP, or you won’t be certified at all.

So, I truly do believe that the CSM program is the VB of agile development. The difference is that we as a community can demand changes to the model of CSM, and begin rejecting those which simply take a class or give lip service to it. In fact, I would even be willing to say that the reason that these programs are like they are is solely because of our lack of integrity to stand-up and say, “This is utter crap, and needs to be fixed.”

So let’s stand up and say that, and begin making our industry something we’re proud to be in

7 Comments


Posted on August 10th, 2009

In TFS, we use a branching model which is pretty in-line with the normal branching models you’ll see out there. It looks like:

  • $/
    • branches
    • releases
      • 1.0
      • 1.1
    • trunk
      • Database
      • Managed
      • Unmanaged
      • Test

This morning I was trying to create a branch for a release we did over the weekend. I wanted to take the contents of trunk and branch it to $/releases/2.0. I already had a folder called 2.0 in the releases folder, so I right-clicked on trunk, chose the branch option, and chose $/releases/2.0 as the target, and then let it go.

What I ended up with was: $/releases/2.0/trunk. It branched the subfolder trunk under the releases folder. I undid the branch, and tried again. I tried many things before finally stumbling on the solution:

You can’t use an existing folder.

Yep. If you want to end up with $/releases/2.0/Database, $/releases/2.0/Managed, etc., you can’t use an existing folder. In other words, you right-click on the folder you want to branch:

image

Then pick the releases folder:

image

Which shows up in the dialog like:

image

Now, you have to type in the folder name you want to use. So, since in our example case it was 2.0, the dialog would now look like:

image

Note that if you already have a folder called 2.0, you’ll have to delete the folder (right-click, choose delete, and then check it in). This only works if you don’t already have an existing folder.

Once you do that, your branch will correctly look like:

  • $/releases
    • 2.0
      • Database
      • Managed
      • etc

1 Comment