Test. Code. Refactor. Repeat.

Since I know I can, I'm driven to.

Changing Your Non-Agile Shop to an Agile Shop

This weekend at the monthly Alt.NET Seattle meeting we discussed changing a non-agile team into an agile team. This is an important topic. At it’s core it seems to parallel a lot of what our community is about: Fostering change, helping developers become more productive, and increasing the quality of our work.

The problem that we’ve all seen occurring, however, is our community beginning to be labeled as one of elitists. We’re seen as saying, “If you aren’t always doing the latest thing you’re wrong.”

For our part as advocates, we get frustrated because people won’t know how good our ways are until they try them. I’ve been at this point a lot honestly. I was even one of those people who finally just needed to dive into unit testing and TDD before I got it. The problem is all of these developers who don’t really care about what they do and who hold back their teams with their complacency. They’re lazy. They’re dinosaurs.

Wow. Pretty harsh stuff isn’t it? I used to feel that way. I used to nod my head when some of my peers would make similar remarks. It’s all bullshit. I’d like to take the time right now to explain why it’s so hard to convince people to adopt these agile methodologies and Alt.NET philosophies. I’d like to help us all understand our roles as advocates (not to be confused with dogmatic elitist) and how we are meant to *co-exist* in the software development ecosystem with everyone else. Being an advocate really means nothing more than you have a loud voice. Becoming a respected advocate. That’s something different entirely.

So there’s all of these people at your job and you think they could be so much better at what they do if only they would just heed your advice and try some new techniques (TDD, BDD, SCRUM, XP, DDDD, w/e Thoughtworks is doing, etc.). These techniques are things that you can’t explain or show you just have to try it to completely grok it.

Really? You sure? I mean I know I feel like this a lot. My managers and such have too. But is it actually correct? Is it that this stuff is beyond explanation and is just so pure and so transparent that it really requires hands on interaction to understand? Do people have to be willing to go through the same pain we went through to get the benefits, or is it our role to help them get the benefits without the pain?

I think it’s the latter. If we as advocates can’t save people effort, time, and money, why do we do it aside from giving ourselves another opportunity to pat ourselves on the back?

Alt.NET is a Great Community Getting Better

The bright side is that most of us aren’t that way… not most of the time. We all like a little pat on the back right? Maybe I’m just rationalizing for myself :D Overall, Alt.NET is a well meaning group that has really helped to give Microsoft a lot of good direction for its latest products and offerings.

So then if we all mean well, and if everything we’re talking about works, what other reason might we have for not being able to get through to people?

One big reason that I suspect is lack of social communication skills. I’m not talking words, vocabulary, and grammar here. I’m talking those kind of communication skills that attract women and help you draw crowds when you come into town. It’s charisma and charm. It’s all about human psychology and helping people help you to help themselves.

People Don’t Need Fixing. You Do.

That’s gotta be your attitude the whole time you’re selling your ideas. You need to come at people from the angle that you’re wrong and that you just don’t get it. Now that means you have to put your pride aside and that can be hard. The plus side of this approach though is that even to just utter the words *forces* you to put your pride aside which is fundamental to being able to help anybody. Know what happens when you’re still prideful? You sound like a condescending elitist Alt.NET jackass. Wouldn’t you rather sound like an inquisitive respectful Alt.NET enthusiast? Without the pride, no one can feel like you’re above them and I bet more people are willing to try some of your ideas.

Case in point: Pair programming. I have heard so many people complain that no one enjoys pair programming. People never want to do it and some even quit over the very idea of it! Either pair programming really sucks or people are *really* scared of it. I think it’s the latter. I used to have similar issues with getting people to do it until I kind of turned the situation around.

You want the magic words that will get you pair programming 98% of the time? I’ve never heard no or seen so much as a grimace.

Turn to the developer you’d like to pair program with and ask nicely, “Would you mind helping me for a minute?”

Right about now maybe you’re thinking, “But I’m not the one who needs help!” Now, you might be right but let’s take another look here. *You* want to introduce a new process of pair programming because *you* think it will make *your* company/team/etc better. Sounds like a you problem to me. Don’t be angry if people don’t want to help you solve you-problems, instead turn your you-problems into team-problems and watch them melt away.

So in this last example, you’re asking for help on code from another team member. Just because you’re asking for help doesn’t mean you are dumb. Think about this. Compare what you say to what you think:

You think: “My god this code that Joe wrote is a total clusterf*ck. WTH is going on? Why can’t he keep his code understandable?” See? And you thought Joe was the one that needed help! Ha!

You say: “Joe, would you mind helping me understand some code? Maybe you could sit with me for 10 or so minutes to help me organize my thoughts and make the changes I need to?” You’re not even lying or being easy on him, you’re just not assigning blame. *Shrugs* Doesn’t really help to blame him, he knows it’s his fault, you know it’s his fault, and now you’re getting an opportunity to learn more about *why* he does it that way and you’re also getting an opportunity for him to see a little bit of how you handle similar situations. It’s a kind of passive leading.

Some of you will make up excuses for why this method will fail more often then it will work. Some of you will make up excuses for why this will succeed and how you can use this as a tool in other areas of your life (both professional and personal). Those of you in the latter group keep reading. Everyone else, you can stop. You won’t get the rest of this anyway.

The Nash Equilibrium

See? Those other people would’ve looked at that heading and thought.. wtf? Then they would’ve jumped right over to wikipedia and looked it up unlike you and me. Well you anyway (I had to look it up too). Anyway, you obviously know more about this than me so I’ve sure the rest of this stuff will make perfect sense and maybe the pedantic of you can send me corrections. My major background in the subject is that I saw A Beautiful Mind and that I also think that Jennifer Connely is hot so I know what I’m talking about.

Okay, if I haven’t completely destroyed my credibility with those of you are left, let’s move on. Put succinctly, in our ordinary day to day life (you know where we’re bugging people to do things “the hard way”), everyone has a strategy to gain the most benefit they can for themselves. A Nash Equilibrium is the point where no one could gain anything more for themselves even if they changed their strategy in light of the strategies of those around them.

If you saw the movie you remember that bar scene where three guys all rush towards a group of girls but each only want the most lustful of them all. She rejects all but one and then the other girls feel like sloppy seconds and tell the rest of the guys to go away. Well, instead of that, one guy can take one for the team and target the 2nd most desirable female, the alpha babe grows jealous. One of the other guys throws himself on the grenade and takes 2nd runner up babe. Alpha babe at this point is wondering if Lady Speed-stick is all it’s cracked up to be. The third guy will follow behind though and close the deal on her as well.

By changing your strategy and working towards the common good you can get more than if you treat life as though it’s every(wo)man for him(her)self. That’s what we did in the example above to begin pair programming and that’s what’s in play in this next example.

So let’s say you know that your team can benefit from agile patterns and practices via intuition but you’re just not sure how to approach it. You would really like it if people weren’t so self involved and that they would help you help them and the team out. It’s another you-problem! These are the best because they’re always actionable. Whenever you can take a problem at work or in life and turn it into a you-problem then you only need to make changes to your self to affect change. It’s like taking messy equations and solving for y instead of x. Sometimes the shift in perspective can make the problem tractable.

According to the Nash Equilibrium, you don’t actually know if you’re stuck (in an equilibrium) until you know what the strategies of the rest of your teammates are. How do you figure that out? Maybe they write it down somewhere… or you could bug their phone conversations… or you could… oh wait.

Just ask people what they’re doing so you can help them.

Have you ever noticed that people are much more likely (read: **MUCH** more CERTAIN) to come to their own aid than to come to someone else’s? Ask people what you can do to help them out. This gives you a reason to need to know their strategy now and since your being so nice they’ll gladly tell you without the need for you to create any HR violations.

Your boss or product owner might tell you they’re frustrated because they are having a hard time keeping all of their project requirements in order and sometimes features get lost between the cushions of the company couch. Zing! Sounds like a job for a backlog! They don’t currently use any bug tracking software or project management software? ZING! Yet another opportunity!

QA is falling behind and is consistently acting as a bottle neck (QA is upset about it and so is your boss)? They aren’t automating any tests?? Sounds like an opportunity for some XP and automated regression testing!

Your team is doing great. Management is pleased, they are please, and everything is copacetic but you know it could be even better? Ask your manager if they’d like to impress their boss by doing even more for the next release. The weakest link in a structure will be the first place to break under periods of greater pressure. In this instance you’re constructively *making* an issue out of thin air so that you can solve the larger issues you see. At the end of the release if you didn’t get as much done as you had hoped I bet everyone will see a common weak point that everyone feels held them back.

Just from these few examples you can already see the whole. You have 2 or 3 strong ways you can begin to bring agile processes into your workplace that will serve the collective whole. Things aren’t as easy as I make them of course. It’s going to take you taking a lot of time talking to people and most importantly listening. Remember, you can’t find an optimal solution to your team’s problems until you understand everyone’s strategies.

No Dogmas Allowed

How do you know you even need agile methodologies until you’ve talked to everyone about their pain points? Agile isn’t just inherently better. Some business models actually can not be agile. Not because they’re too stupid but literally because agile contradicts their business model. They might use some of the tools from the war chest though. That’s really how I would recommend you view your company as well. Assume agile as a whole is impossible and just replace processes one at a time. Who know? It might be that in the end you end up replacing them all and in the end no one even realizes they’ve made a shift to the cutting edge of software development process management.

So that’s it. Changing to an agile shop is more of a road to self discovery than anything else. It can be done. It just requires an open mind and a sprinkling of humility. What you’ll get out of the strategy I present here is more than just an agile shop but also a well unified team. A team that sees you-problems and understands how much they’re really team-problems.

P.S. Judging by the length of this post, can you tell who my coding hero is? I’m still trying to write my own 20 page post like Steve’s compilers manifesto. I’ll get there some day. ;)

Tags: , ,

Reader's Comments

  1. Alexander Byndyu |


    My previous company was…
    “The problem is all of these developers who don’t really care about what they do and who hold back their teams with their complacency.”

    It was the main reason why I found new job.

  2. Eugene |

    Nice article. Thanks. :) Eugene

Leave a Reply