Jean-Paul S. Boodhoo

Sponsors

The Lounge

Advertisement

Images in this post missing? We recently lost them in a site migration. We're working to restore these as you read this. Should you need an image in an emergency, please contact us at imagehelp@codebetter.com
Becoming Extreme - From the inside out

This is a hot topic for me right now, as I talk with lots of people who are working through trying to make their teams more “Agile”. That word is a little overloaded and overused lately, so I am going to focus on how you can make your team more Extreme through use of practices and strategies that live in the world of the development team.

I am going to point everyone to James Carrs great post today about A Tale of Two Teams. It is a great post that helps me start of by making a big bold statement (reiterating what James said).

  • Stop blaming other people for your inability to introduce practices and strategies that will make your team more effective.

As a consultant, I get the great joy of being “that guy”. The one who comes in to shake things up and challenge peoples assumptions about the way they build software and the software development process in general. Having a deep love for the practices associated with Extreme programming, I have crafted a set of strategies that I feel have helped infect every team/developer I have interacted with on the benefits of this “new” style of development. I want to share these strategies in the hope that they will inspire other developers who are in positions of influence (that is all of us) to encourage their development team to strive for something better.

Develop With Passion

This title is not a joke. My companies tagline is “Develop With Passion”. This is a crucial, but often overlooked element of introducing a team to a set of new practices. Whether people share the same values or not, people respect people who stand up with conviction for their beliefs. If you love what you do, other people will notice and (most) will want to share that passion you have for your work. If I come in completely fired up about the benefits of agile, yet am lukewarm in my delivery, the message will get lost.

Invest In Building Solid Team Relationships

Before you can hope to reach people at a technical level, and try to encourage them to improve their development practices, they have to know you are authentic. This is especially important for consultants, who are often viewed as the ninja paratroopers of the software development world. We swoop in, do a bunch of “magic”, then we leave!! This view has to be dispelled as quickly as possible. If a team that I engage does not believe that I truly care about them on a personal and professional level, they are not going to be able to listen to ideas that I bring to the table. My first couple of weeks on a new contract are spent building a level of trust between myself and the other developers that I am going to be working with. What does this investment look like:

  • Lunches/Coffee breaks getting to know developers outside of the workspace
  • Pair Programming Sessions where I can get an idea for each individuals skill level, providing me information I can use to focus future mentoring sessions
  • Encouraging open communication within the workspace, which helps identify each developers comfort levels, boundaries etc.

Focus On Small Victories

After that first couple of weeks of building relationships, I should have a great idea of how much work needs to be done to get the developers thinking and practicing in a more agile fashion. For the majority of teams out in the wild, the practices that are second nature to most agile developers are almost completely alien. There is a limit to how much an individual can assimilate at one time. This means that if I come in and throw TDD,BDD, DDD, Interface Based Programming, Automated Builds, Continuous Integration etc.. at them all at once, it will be too much information. Based on the level of the team I have to focus on individuals and practices in a piecemeal fashion. Think of running it like you own mini agile project, with the end result being having your development team completely immersed in an agile environment. My set of small wins is usually introduced incrementally using the following steps:

  1. Introduce the concept of an automated deployment script. If nothing else, to decrease the amount of manual time that is probably being spent on deploying applications that are going out to production. Some good tools for this are NAnt, MSBuild, or (my fave for deployments) FinalBuilder. The amount of individual time saved on decreasing the amount of human intervention required for deployment will allow your development team to focus on other tasks to ramp themselves up.
  2. Start leveraging an automated build script to compile your application. This will inevitably lead to some codebase structure refactoring that will make it more malleable to an automated build script.
  3. Introduce the concepts and practices of automated unit testing using an framework such as MBUnit.
  4. Bring a continuous integration server into the mix. My current fave for this is CruiseControl .Net.
  5. With the foundations in place, switch into a mode of pair programming with the client developers.

Once in a place where I can pair with developers that is where I choose to introduce the following concepts:

  1. The benefits of trying to achieve mouseless computing
  2. Real Object Oriented Programming
  3. Interface based programming
  4. Test Driven Development
  5. Domain Driven Design
  6. Object Relational mapping and all the other great tools that exist out there to facilitate rapid,testable development.

As you can imagine. It takes a bit of time to have this knowledge flow and be completely understood by each developer on a team. When it happens, amazing things start happening. Other teams start to notice, management starts to notice. Teams will be coming to your team asking you the secret to your success. And then the cycle starts again.

This is a way that teams, independent of management can start to achieve some gains associated with becoming more agile. I might be a little bit cavalier about my approach to team engagement/improvement, but I have always tried to follow this simple principle:

  • It is easier to ask for forgiveness than permission.

More people need to start taking chances. Every single developer on a team , regardless of years of experience or title, is in a position to initiate change. Do you see room for improvement, introduce it. Be the catalyst for change that inspires other people. Don’t hide behind excuses that shield the fact that, more often than not, the problem lies with developers who are content to whine and do nothing, vs doing something and “maybe” receiving some heat.

Wanna be more extreme? Do what it takes to make it happen. It’s that simple.


Posted Wed, May 23 2007 11:11 AM by bitwisejp
Filed under: ,

[Advertisement]

Comments

Mr_Tem_Programming_Not wrote re: Becoming Extreme - From the inside out
on Wed, May 23 2007 6:33 PM

O barf.  Team programming again - probably in cubes too, or how about just a plain open workspace to foster communication.

Barf.  Like golf, programming is not a team sport.

bclubb wrote re: Becoming Extreme - From the inside out
on Wed, May 23 2007 11:34 PM

Great post Jean-Paul.  This does seem like a lot to introduce to a team.  Do you always have enough time to cover all of this or do you sometimes have to revise this complete overhaul?

Chuggle wrote re: Becoming Extreme - From the inside out
on Thu, May 24 2007 4:53 AM

"Barf.  Like golf, programming is not a team sport."

mmmm like the Ryder cup

Agree with everything you say JP...especially about your enthusiasm rubbing off on other people - which is often easily introduced by using something like paired programming (although I think it is often over used in many agile environments)

bitwisejp wrote re: Becoming Extreme - From the inside out
on Thu, May 24 2007 11:46 AM

@Brian,

It is typically the reason why I won't look at contracts that are shorter than 6 months in length. This gives me plenty of time to implement the plan of attack I outlined above. Again, I can't stress enough that in order to successfully disseminate this information, there has to be a level of trust that is built up between you and your other team members. Again, part of being agile is being adaptive to the environment, being able to gauge where people are at personally and professionally can often cause you to "tweak" the plan as required.

Fregas wrote re: Becoming Extreme - From the inside out
on Thu, May 24 2007 2:04 PM

@Mr_Tem_Programming_Not

"Barf.  Like golf, programming is not a team sport."

I don't agree with everything Agile or everything on this site, but Mr. Tem, you're DEAD WRONG.

Even if you don't buy into practices like paired programming, having every programmer "do their own thing" is a recipe for disaster.  Consider the following:

- Having junior developers go it alone on new projects without guidance and mentoring means you'll end up with a bunch of crappy code you'll have to maintain.  

- Having each developer write code according to their own standards (or no standards) naming conventions, favorite third party utilities, means every project looks different.  Which means a higher learning curve every time a new developer works on that project.

- Having several developers (or many, some teams are 20-50 developers!) work on one large project without communication, trust, guidance and standards means that different parts of the application will look and act completely different.  An architecture "by accident" will evolve as will lots of hacks, duplicated effort and stepping on each other's toes.

If you're a consultant or freelancer that works on small solo projects, then you're right, its not a team sport.  For the rest of us that work at jobs where there is more than one person in the development group, we have to deal with these realities, and having each developer go it alone causes massive problems later down the road.  I say this not because i've been indoctrinated by the agile mindset, but because i've experienced the problems above over and over.

jdn wrote re: Becoming Extreme - From the inside out
on Thu, May 24 2007 2:35 PM

@Fregas

Each bullet point you mention after "Consider the following:" can be avoided without having to do Team/Pair Programming.  

It isn't an either/or "Either you do Team/Pair Programming or everyone does their own thing with no standards."

Bob wrote re: Becoming Extreme - From the inside out
on Thu, May 24 2007 5:41 PM

jdn

No kidding.  How did the point of your post  get changed from "no pair programming" to "no standards at all" so quickly??

jdn wrote re: Becoming Extreme - From the inside out
on Thu, May 24 2007 9:11 PM

@Bob

Well, Fregas went from tem's comment of "Barf.  Like golf, programming is not a team sport." to listing why "doing your own thing" was bad.

As if they were in explicit contrast.  

That's all I'm saying.  I don't disagree with what Fregas said, just that it follows as a consequence.

Fregas wrote re: Becoming Extreme - From the inside out
on Fri, May 25 2007 9:32 AM

Guys,

Maybe i misunderstood the point that that Mr. Tem was trying to make.  I'm not saying its an all or nothing or that XP is the only way.  I don't even do XP or PP where i'm at right now.  

All i was illustrating was that regardless of whether you buy into Agile, paired programming, etc. we are in a team sport whether you like it or not.   Mr. Tem acted like open communication was a bad thing, much less paired programming.  I think he was the one going to the extreme.

Fregas wrote re: Becoming Extreme - From the inside out
on Fri, May 25 2007 9:35 AM

But then again, mabye i was overreacting to someone else's overreaction....  ;)