Skip to content

Mob Programming presentation at vNext OC

We’ve been giving presentations on Mob Programming and doing Mob Programming Dojo sessions whenever we get a chance.

Woody Zuill will be up at the vNext OC meeting Newport Beach on April 10th to share our “Whole Team Approach”.

Here is a link to their Meetup post: http://www.meetup.com/vNext-OrangeCounty/events/110942562/

Here is our “Blurb” for the vNext OC Mob Programming Presentation

Mob Programming, A Whole Team Approach

Mob Programming is a development practice where the whole team works on the same thing, at the same time, in the same space, and at the same computer.

This is a “Whole Team” approach to doing all the work the team does – including coding, designing, testing, and working with the “customer” (partner, Product Owner, user, etc). We have expanded the “team” nature of all the work we do – not just planning, retrospectives, and a daily stand-up or other meeting – but all the work that the team does. This could be thought of as Pair Programming++, or continuous collaboration, perhaps.

In other words, this is an evolutionary step beyond the pair programming, face-to-face communication, team alignment, collaboration, and “self organizing team” concepts of the Agile approach to software development.

We’ll share how we’ve been using this practice to super-charge our development efforts and deliver high value software for almost 2 years. We’ll see what it looks like, the benefits, and how to do it yourself. In our workplace we “Mob Program” all day, every day, but we’ll also explore some ideas on how you can employ all of the concepts and practices (and get the benefits) of “Mob Programming” in your own company even if you can’t do it “all day, every day”.

We will also do a Mob Programming Dojo, and work on a programming Kata with audiance participation, as a “Mob”.

Time/Date/Location:

  • vNext OC
  • 6:00 pm – Wednesday, April 10th, 2013
  • TEKsystems – 100 Bayview Circle #3400, Newport Beach, CA

I hope to see you there!

How does the mob get away with no estimates?

How much do you estimate to get across?

Does the mob really use no estimates?

In the time that we have done development as a mob we have done no estimates for management. We value our time as a mob highly and spending that time making guesses about how long it would take us to do something rather than using that time to accomplish that goal does not make sense.

So how do you do it you say?

Well the answer is disappointingly simple. We keep the application deployable between each feature and often deploy it as soon as any one feature is complete. Since we have tests around all of our work we have a high level of confidence in what we have created. There is a light amount of exploratory testing before we are happy with releasing the application.

Making estimated will leave you falling short…

What about hard deadlines?

We have had projects that needed to be complete by a certain date. A hard deadline. This is an interesting scenario. I have been on projects at previous companies that had similar hard deadlines and we would spend a large amount of time estimating tasks that would then get prioritization and finally worked on only to find that the estimates were wrong and some features would be cut. The inverse is to use no estimates and prioritize each feature after the next.

Can you explain how you prioritize a little more?

SURE! When we start working on a project we meet with our end user and show them what we currently have. Then we ask them what the next feature they need the most is. We may collect 2 or 3 features, then send them off and work on those. As soon as each feature is completed we ask them if the others we have are still a priority. We find that usually they have new priorities because they have been using the latest features we developed. They often ask for something completely different. In this way we steer the project toward a better result than if we had predicted and estimated all the features.

Is this approach only for the Mob?

No, you can use the no estimate approach too! Anyone can approach software this way and I recommend it. If you are estimating projects you should consider what value (if any) they bring you ultimately. Ask yourself how often have estimates been wrong? How much time did you spend up front making the estimates only to find out they were useless. Did you prioritize a feature that is rarely used over a feature that was cut just because of an estimate?

The Reason Why

Each bit of work someone does in software development should not be repeated if possible.  We want to automate repetitive work. Therefore any work done by a programmer is presumably new work. This is why estimates have no value, you cannot accurately estimate something you have not done before.

Don’t need estimates if you just build it right away!

So No Estimates

It is a simple decision. Do you want to spend money on information that seems to have value but truly does not or do  you want to spend your resources on more important matters? In my opinion, software development evolves at such a dramatic rate that estimates cannot be useful.

Link to other writings on No Estimates (by Woody Zuil):

http://zuill.us/WoodyZuill/category/estimating/

The Power of Retrospection

What’s the most important “Agile Practice”? : Do Regular Retrospectives. Getting good at retrospectives is well worth the effort.

The basic idea is to take a look at how things are going, decide on some thing (or things) to make better, decide on action(s) to take, take the action(s), and then repeat the whole thing sometime soon.

We do frequent retrospectives. As a team, we like to reflect, tune, and adjust every chance we get.

We did a retrospective back in August about “pain points” with the purpose of identifying things that were daily “pains” for us.

This is what the affinity groupings and other “artifacts” looked like over a few months (Aug. 8 to Oct. 25).  I’ll cover a little of each below.

Pain Points

In our first retrospective in this series, we found that two important areas that showed up as “pain points”.  One of these areas was developer skills.  Here is the affinity grouping about developer skills:

The items include:

  • Code fluency
  • Coding skills
  • IDE skills
  • Typing skills
  • Language fluency (C#/SQL)
  • Resharper Skills
  • Shortcuts

Give it a name

When an affinity group gathers enough post-its to clearly show we have an area we feel needs fixing, we try to come up with a name for it.  This one was easy to name: Developer Skills

We always discuss the things we discover during a retrospective and try to find some action we can take.  In this case, we decided to take some time to mull things over and meet later to discuss how to proceed.  We are flexible – remember: no practice is written in stone. Except for DO RETROSPECTIVES.  That actually IS written in stone.

The basic process we followed for this particular discussion was similar to a “Lean Coffee”.  We all suggested topics and wrote them on post-it notes, prioritized them, and discussed them in prioritized order, taking a few minutes per item, until we had sufficient actionable ideas.  We gathered a list of about 20 ideas on ways we could improve our developer skills, and we talked over about half of them.  Some of the ideas seemed to fit together naturally so we grouped them, and pretty soon we had a few things we decided we’d like to try.   These are what we call “action items”.

Here is what we ended up with:

Action Items

Here is what we decided to do

  • Create a “cheat sheet” or “check list” for the steps for some common tasks
  • Review and learn the motivations behind some code generation we were doing
  • Hold a daily 1-hour practice period focusing on MVC, TDD, and basic coding skills

A Daily Practice Period!!!

Well, what do you know.  Seems like something we should have been doing from the start… I think we had talked about it now and then over the past year or so, but that’s how it is with good ideas sometimes: they stay stuck on the back burner until they’ve simmered just enough and then we move them to the front, I guess.  For over a year and a half we have had a weekly study and practice period and it has been very beneficial, so in the spirit of Extreme Programming – we decided to try doing a daily practice period.

We’ve been using the “practice” of daily practice for about 4 months now – almost every morning we practice doing a coding activity.  We’ve refined it a bit over time, but the basic idea has stayed pretty much the same.

Another Retrospective, another step forward: The 12 Days of Index

12 Days of Index

After a while (about a month I guess) we had another retrospective about our practice sessions, and although things were very positive we noticed that we were not gaining a mastery of one of the things we were practicing: Creating an Index controller and it’s related parts and tests.

We discussed our approach and a few ideas we might try.  One approach we adopted is very similar to how I used to practice the banjo when I was first learning (many, many years ago):

  • Practice a little bit of a tune you want to learn (just a measure or two).
  • Once you have that down, learn the next little bit in isolation from the part you already learned.
  • Once you have that down, combine it with the part you already learned, and practice those together until it works nicely.
  • If the transition from the first part to the second part gives you trouble – isolate and practice the transition.
  • Once you have the “combined parts” working well, learn the next little bit, then combine…
  • And so on.

We gave this “practice of practicing” a name: “The 12 Days of …” (you fill in the …. with the name of the thing you are practicing).  It is a little like the song “The Twelve Days of Christmas”.  You sing the first part alone, then the second part AND the first part, then the third part AND the second part AND the first part.  Hopefully, you get the idea.  So, in this case since we were practicing the coding of an Index Controller, we called it “The 12 Days of Index”.

The concept is to truly master each small part “in order”, adding the result to what we have already mastered.  Everything is learned “in the small” and builds to encompass the whole concept we want to learn.  So far, it’s been working pretty good.  We’ve had a few retrospectives on this since we started using “The 12 Days of …” and we’ve kept it so far.

Things to notice

  • We pay attention to try to figure out what needs attention.
  • We experiment and try things that might be an improvement.
  • We review and make changes as often as needed.
  • We name things in a way that makes it easy to “get the idea” and talk about what we do.
  • We practice doing the work we do.
  • As we become better at a practice, we start to look for ways to improve that practice.

So… have fun, retrospect, and keep on practicing.

One last thing.  We are starting a regular practice session for practicing retrospective techniques.  There is a great book on the subject: ”Agile Retrospectives: Making Good Teams Great” (Diana Larsen and Esther Derby) – I’ve actually worn out my first copy of the book.  I ordered 6 new copies of the book and a group of folks here at work are going to get together weekly to practice the the techniques in that book.  Very cool. We are now retrospecting on our retrospectives, and practicing getting better at it.

Agile Retrospectives

 

Happiness – A Guest Article by Llewellyn Falco

Llewellyn Falco has visited our Mob Programming team many times.  I asked Llewellyn if he could write a guest article for us about his experience with Mob Programming, and here it is.  Thanks Llewellyn!

I have had a different experience.

I sat with a team that was happy, joyful even. They were hopeful, energetic and engaged. There was a high level of trust and respect for everyone in the team. People felt safe to voice ideas and suggestions, and when weakness were shown, they were acknowledged without ridicule. The team even set aside time each day to help other members of the team become stronger in the areas they needed improvement in.

Trust in the workplace

An example of this came about a month after a new teammate joined the mob. One day the new guy came out and said that he wasn’t very good at typing and wanted to learn to touch type. Think about that; he had been programming his whole career, but finally got to a place where he felt comfortable enough to admit a weakness, not only to himself but to his whole team. And the team rallied around getting typing tutor programs for him to practice with each day, and creating a box to put over his hands to prevent ‘cheating’ by looking at his hands when he took the keyboard.

It shouldn’t be much of a surprise that this team was extremely high preforming. They actually felt more like a team you would see on TV than in the real world, and there is lot’s of evidence that high morale leads to high productivity. As Michael Johnson said on the podcast Freakonomics [http://www.freakonomics.com/2012/02/23/the-dilbert-index-a-new-marketplace-podcast/]:

“[workplace morale] may be the only remaining competitive advantage that organization’s have. Organization’s that do this well tend to do well financially as well”

But what can you really do to create long-term happiness at work?

There are a lot of short-term solutions to this problem. Off site meetings, parties, cake. All of these bring up the temporary happiness of the people who work at you company, but is that the same thing as being happy at work?

All too often it seems companies fall into a death spiral of misery.

“The beatings will continue until morale improves”

I believe that long term happiness comes from a combination of fulfilling your potential and experiencing a series of successes. These are both things this team had in spades. They had been working together for a while before I sat with them, and they had been succeeding. Moreover, they had been obviously growing in skill and talent over the year I have known them.

A series of small successes

If you ask a long distance runner how they run, they will tell you that you don’t run 10 miles, you run to the next sign. Each next sign post gives you a win and these little wins become more important than the bigger success of finishing 10 miles.

One of the things the mob has enabled is the ability to be “done done” with a small feature. That means they are deploying on the order of once a day. This means at the end of the week, they have solved 5 problems for the company. Not just hypothetically, these problems are solved now, people and benefiting from the work this team did today. That feels good. That feels damn good.

It was clear that Mobbing had been the event that facilitated the transformation for this team. One thing I learned from the book “Switch” was that while most people tried to implement change by looking at what was wrong and trying to fix it, a much more successful strategy was to look at the bright spots of that were working and try to imitate them.

To this end, I am using Mobbing more and more often with my teams. I am enjoying the improvements in productive that I have seen. But really, I just want to be that happy again at work.

Llewellyn Falco

Jim McCarthy Visits The Mob

McCarthy Bootcamp

This week Jim and Michele McCarthy brought the McCarthy Bootcamp to San Diego (with the help of the amazing Erik Meade, and perhaps a few other local Agilists).

This post isn’t about the Bootcamp or the Core Protocol – which are well worth reading about and experiencing.  You can learn more about these and the McCarthy Show at their website: http://www.mccarthyshow.com/ - I particularly recommend you watch the 23 rules videos: http://www.mccarthyshow.com/the-23-rules-of-thumb/

Anyway, this post isn’t about the Bootcamp or the Core Protocol – it’s just about how jazzed I am to have had Jim Visit the Mob for a bit on Thursday.

First, a word about The Dynamics of Software Development, a book

Of the countless software development management books I read in the 90′s only one book stands out as being worth remembering. That book is The Dynamics of Software Development by Jim McCarthy.  It was clearly based on reality (or something pretty close to reality) and addressed many of the problems in software development that I had seen or experienced.  I’m not saying this book had (or has) all the answers, it just had/has a lot of great thinking about the issues and provided some clear ideas about how to deal with those issues.

“The Dynamics” continues to be an important and useful book to me even with all the advancements and changes that came with the Agile Movement and Extreme Programming.  It is about real stuff. You can learn a bit more here: http://bit.ly/115W4OG - get the book and read it. Use the parts that you can, and remember all the other parts because some day you will need them.

Agile San Diego brings Jim to town

I met Jim a couple of months ago at the Agile San Diego monthly meeting. He was the featured speaker on the topic of Culture Hacking.  Great talk, great meeting.

Shortly after that I heard that he was bringing the Bootcamp to San Diego.  As much as I wanted to go, I wasn’t able to attend the Bootcamp (which happened this week), but one of our Mob members (Chris Scripca) attended. I am envious.  Perhaps Chris will write an article about his experiences with the Bootcamp – which is all about rapid team building, shared vision, innovation, and other stuff all very nicely connected to our “Mob Programming” approach. [This is the nice thing about life. Once you find something meaningful to you, somehow everything else seems to confirm how brilliant you are for having done so. It's nice, right? I'm not mistaken about that being a good thing, am I? ... I didn't think so]

So, Chris had talked up our Mob Programming approach and Jim decided to stop by for a short visit on his way out of town so we could share a few of our ideas about teamwork and mobbing and perhaps share a few pointers about teamwork and shared vision.

We had a great time – and I think Jim did as well.

We shared our Mob Programming time-lapse video with Jim and Michele and explained how we go about doing our work.  We just sat around and talked for about an hour and a half.  Sitting and talking is good.  He gave us a number of interesting things to think about.  Here’s a short list of some of his ideas and observations:

  • One: Get more women on the team.
  • Two: Don’t tell anyone about what we are doing.  (Seems we’ve little chance of that now, doesn’t it)
  • Three: We (the Mob) are very lucky. There are a lot of people who want what we’ve got.  Work hard to keep it.
  • Four: Next step is to figure out the minimum we can do to serve our “customers” needs for software, and focus on discovering the big things we are capable of inventing – the powerfully innovative things that only a true team can accomplish.

Well… like I said, that’s just a few of the thoughts he shared. You’ll have to wait for the movie to see the rest. Now I am trying to figure out how to get him back sometime soon.  We really are just getting started.

So, I’d like to say “Thanks Jim and Michele for visiting with us – We had a great time, and hope you did too!”

Don’t be jealous.  If you close your eyes, and wish really, really hard, dreams can come true.

All it takes is faith and trust, and just a little bit of pixie dust.

 

Teamwork vs Meetings

Meetings are great

Meetings are great.  I’m pretty sure that we would all prefer to have meetings all day if we could.  But life isn’t perfect.

Not Really

Ooops. Did I say Meetings are great?  I meant to say meetings are mostly USELESS.  Note I said mostly – not all, just mostly. To clarify (so people won’t complain too much): In my experience meetings are typically not an effective way to get things done.  Seems like they should be, but they AIN’T. Mostly.

[Disclaimer: If you haven't already guessed, I am talking about meetings in software development.  Nothing else. Especially whatever it is you do, unless you are doing software development.]

Regardless, some meetings are ‘necessary’ in some organizations.  Did you notice the clever use of quote marks around ‘necessary’ in that last sentence?  That is my way of saying ‘mistakenly thought to be necessary’.

Like I said, life isn’t perfect.  Stranger still, in some rare cases meetings are actually useful.  Please don’t quote me on that.  It’s just between you and me.

If you MUST have meetings then make them meaningful.  I can’t help you much with that in this post.  Maybe some other time.  I’ve seen a lot of articles, book chapters, books, and training materials on “how to have effective meetings”.  You can even take week long trainings on this. So, read those, take the courses, listen to a podcast about it, and then make sure that whatever meetings you have are effective.

Teamwork

Teamwork is about people working together to do something.  If your work lends itself well to teamwork, being good at working as a team might pay off.  Working together is not the same as a meeting.

Definitions

A few definitions of words as used within the scope of this article:

Team: All the people needed to create the software being creating and who work together to get the software created. (Also goes for maintenance work).  ALL the people needed MUST work together.  Otherwise – it’s not really a team AS DEFINED FOR THE PURPOSES OF THIS ARTICLE.  Okay?

Teamwork: Teamwork is people working with each other to create the software they are creating. The key part of that is “working with each other”. Teamwork is working together.

Meeting: A gathering of people to communicate about the software they are creating.  Examples: Daily Standups, design meetings, requirements gathering meetings, bug assessment meetings, planning meetings, etc. [I am purposefully NOT including these: Retrospectives, Lunch, Trainings, Pair programming]. Meetings are often used for deciding things, communicating things, assigning things, allocating things, and selecting “action items”.  Rarely for doing the work of creating software.

[Disclaimer: You don't need to work as a team to create software, even when many people are involved.  You can have meetings, communicate via documents, send emails, respond to emails, forward emails, draw charts, email charts, correct charts, completely redo charts over and over, create requirements documents, have more meetings, sign-off on things, base-line things, hand-off things, then repeat, eventually write code, enter test and fix cycle, desperately polish up resume, and so on. There are lots of ways to manage making software.  Good luck on that.  Some famous person once said something about "the definition of insanity" that would be appropriate to point out and reflect on here.  Please recall that quote and chuckle at how appropriate it is.]

No Meetings Rule

Strive to arrange how your team works and interacts so that you never find a need to have a meeting.  That’s the rule.  It’s something to shoot for.  In some workplaces I’ve experienced this, and in some others I haven’t, and I’ve seen lots in between.  The key here is to get as close to this as possible.  It’s a lofty goal.

Meetings are a “smell” in your “process” in the same way that long methods are a “smell” in code, and in the same way that the rotten egg smell is a “smell” in your living room.  These smells are indications that there might be something that needs to be fixed.   Potential solutions (respectively): Fewer meetings, shorter methods, smaller pile of dirty socks in the corner.

Of course, fewer meetings need to be replaced with some other way to get the work done that you are trying to get done that we thought the meetings were helping us do.  Got it?

But Woody, how can we work without meetings?

If everyone works together in the same space (more or less), and is working on the same things (more or less) at the same time (more or less) then we are working as a team (more or less).  Hopefully you can see that this eliminates the need for meetings.  But really work towards the more than the less in each of those.  It works like this:

Same Space

If everyone needed for doing this work is sitting within easy talking distance then communication can be made “in real time”.  Easy talking distance is 5 or 10 feet with no walls, doors, or cubicles in between.  When I have a question I can ask it – and get a response right away.  If no one knows the answer, we have discovered something we didn’t know – right away!  This is always fantastic.  The less time it takes to get answers and discover the things we need to discover, the better off we are.  Being close physically allows us to be close “in time” as well.

Same Things

A “greater than the parts” effect happens when we all work on the same thing. This idea of  synergy happens easily when all the brain-power and effort is being applied to the same thing.  The answer to a question is likely already in the brain of the person being asked (the askee?) because the asker and askee are thinking about and working on the same stuff (more or less). And if that answer hasn’t yet been thought about, it is simply another thing we are going to pay attention to RIGHT NOW, because it is what WE are ALL working on.  It is no interruption for the askee because she is working with the asker on the same stuff.  Ideally, WE are all working to get the same exact thing done and delivered.

Same Time

When the whole team is working at the same time on the same thing we shorten the feedback loop for all interactions.  Work speeds up by an order of magnitude (your mileage may vary). The conversation happens quickly -

  • Asker: “I was wondering about how this detail fits in” -
  • Askee: “Yes, it’s like this…”
  • Asker: “That’s not what I meant, I am asking about this part of that…”
  • Askee – “Ohhhh, I see, right – it’s like this…”
  • Asker – “Great! thanks”

That might seem like an exaggeration.  However, even when we don’t know the answer, the quick communication gets to the point very quickly:

  • Asker: “I was wondering about how this detail fits in” -
  • Askee: “Yes, it’s like this…”
  • Asker: “That’s not what I meant, I am asking about this part of that…”
  • Askee: “Ohhhh, I see, right – you mean this thing here?”
  • Asker: “Yes, that is where I am stumped”
  • Askee: “hm, I’ll need to figure that out.  I’ll do that now… can you help me look at a few things?”
  • Asker: “Sure! Let’s take a stab at it” (This is LTASAI driven development, by the way).

Okay.  This is just a little, quickie blog post so I’m not covering all the types of communications we need to make. Hopefully you get the idea.

Working in the Same Space,  on the Same Thing, at the Same Time “side benefit”

To do this same space, thing, and time approach we need to have relatively small things to work on.  Very little of what we do is “small things”, but almost everything we do is made up of small things. You get the idea.  BREAK IT DOWN.  But, only break it down just before you work on it.  You have a pile of big things to work on (some call that a backlog, but it’s just a pile of big things to work on). The key is, that “backlog” is a pile of BIG things.  You peel off a small thing when you are ready to do more work, and you work on it – all together, in the same space, at the same time.  If it turns out to be too big, you’ll discover that – and you just peel off a smaller bit.  If it’s dependent on something else, you’ll discover that and you’ll work it out.  I have confidence in you.

So the side benefit is you will need to get really good at breaking things down and working on the smallest reasonable part of everything you work on.  They’ll tell you it can’t be done.  Prove them wrong.

But Woody! We still need meetings for certain things

Of course you do! I’m just suggesting that more and better teamwork is a way to lessen the need for meetings.  It’s like this little paraphrasing of one of the Agile Manifesto Principles.  We can call this the Principle Of Meetings:

Simplicity – Maximizing the number of meetings NOT HELD – is essential.

And remember.  There is no Agile Manifesto Value of “We Value Meetings Over Getting Work Done”.   Although, way back when, I have worked at places where it seemed that way.

 

 

Mob Programming Exposed

Mob Progamming:  You will be exposed

Andy Warhol - Exposing Himself

Andy Warhol – Exposing Himself (Using a Polaroid. Remember those?)

Perhaps the title of this post is a bit misleading.  It should probaby be titled, “Mob Progamming:  You will be exposed”.  That’s exactly what happens to members on a Mob Programming team.  The interesting part is that it isn’t all that bad and if you are working on a real team it is beneficial.

If you are part of a team that is practicing Mob Programming, every aspect of your interaction with the team will be exposed and on display.  Everything from personal hygiene to technical expertise.  When you get stuck on a problem and use Google to search, the team will see exactly how you think when coming up with search terms.  There is no where to hide, but is there really any reason to hide?

Hunt and Peck

I have been a hunt and peck typist for most of my life, it is a terrible habit and I had become fairly proficient at it.  Not as good as a touch typist, but I did OK.  In previous work environments where most of my time working was spent solo and most group interaction was limited to meetings, typing profiency wasn’t a big deal.  In a Mob Programming environment where typing proficiency impacts not just the typist, but every other person on the team, it becomes an issue.  Typing delays that happened because I was looking at the keyboard and not the screen started to add up.  Not so bad when that time adds up for one person, but when you multiply that by 4 for the number of people on our team, it is time to inspect and adapt.

Shortly after I joined our Mob Programming Team a developer on the team approached me and pointed out that if I practiced touch typing a couple of minutes each day, I could break the hunt and peck habit, improve my speed, and have better keyboard posture.  Peer pressure, the great motivator!  So I gave it a try and to no surpise to anyone anywhere, my typing has improved.

As a member of a Mob Programming Team, my poor typing skills were exposed.  Together, we inspected and adapted.  My teammates offered me help, because that’s how a team is supposed to work.  Another great benefit of mobbing is that you have to be a team and not just call yourself a team, but that’s a blog for another day.

Trust

I don’t mind being exposed because every exposure is a learning opportunity and a chance to grow.  That’s why it works for our team, because everyone has enough trust in one another to let their guard down.  We all know that no matter what weakness we have it will be embraced as a learning opportunity and not a point for ridicule or embarassment.

Teaching and Learning

If we find a weakness across the team, we build a learning session around it and confront it head on.  For those that have mastery it is an opportunity to teach, for those without the knowledge it is an opportunity to learn.  Most importantly, we grow as a team, with some benefits for everyone.

Exposure = Insight

By being exposed, everyone on the team is aware of the strengths and weaknesses of their teammates.  If we need to spike on a topic in a hurry, it is easy to determine who the best navigator/driver would be.  The non native speakers on our team lean on the native speakers for help with proofreading documents and emails.   Those with strong DB skills know when they need to step up on DB related tasks.  Since we are usually mobbing, this helps to normalize profiency across team members.

Team vs. Mob

Of course, any team can expose the weakness of individuals, but traditional teams do not have the same level of interaction as a Mob Programming team.  A traditional team might note that one team member is a slow typist.  If they only meet once a day for 30 minutes it is more likely to be ignored or not even noticed.  It is only a problem for a short period during the day and tolerating the problem or mentally noting that the person is a poor typist is probably easier than having an uncomfortable conversation. On a Mob Programming team, that is sitting together in close proximity for 6-8 hours a day, a slow typing teammate is not easily ignored.  We find these conversations are also not nearly as uncomfortable, because everyone on the team recognizes the situation as an opportunity for change that will benefit the entire group.

FUD

Fear, uncertainy and doubt can lead to skepticism of Mob Programming.  Fear of weaknesses being exposed to the mob.  The uncertainty, either perceived or real of how the team will react to your weakness.  The doubt we all have in ourselves and in our abilities.  The root of most fear is the unknown.  If you don’t know what Mob Programming is or haven’t tried, it is natural to question it or be skeptical.  But what will it hurt to try?  At the worst you waste the entire day and get to know your team a little better, at best you get some work done and get to know your team a little better, and maybe even get to know yourself a little better.

Expose yourself to Mob Programming.

Failure to Communicate

Individuals

Individuals are pretty much the smallest chunk of humanity available for doing software development, and  probably for a lot of other things too. Individuals are a key part of software development. Regardless of what we disagree about, we can hopefully agree that at some point an individual has to do something, or we end up with no development – no new software.

Communication

When there is more than one person involved in a software development effort (and there almost always is), communication must happen.  No communication = no result.  Let’s agree that at least some communication must happen.  The “customer” communicates with the “developer” about a feature, a “developer” communicatoins with another “developer” about some technical concept, and so on.

Document Driven Development

In the phased (Waterfall) approach communication is typically done via documentations of some sort. There are many failures with Document Driven Development and I’m not going to cover much of that here. A critical failure is that the thinking that goes into a document becomes stale very quickly.  There is no way to prove that it is correct and complete until someone does some REAL WORK based on that document – and that can be weeks or months later.  I have also found that the “original thinking” we are trying to capture does not typically translate well into a document.  It becomes more misleading than helpful for the “user” of that document.  Why waste time and effort on something like this?

[NOTE: I am just talking about Software Development.  There are likely many situations where documents are useful.]

Something Completely Different – Interactions

In Agile Software Development we take a different approach.  Most communication is done “face-to-face”.  Two people talk to one another, or a group of people gather to discuss something.  This communication is best done at the time that the work being discussed is ready to be coded.  Discussion has a shelf life that is pretty short.  In about a day or two, and sometimes within an hour or two, the clarity and meaning starts to diminish.  So we want to go from commuication to code we can run as quickly as we can. Let’s talk and code, code and talk. Make something that works, make sure it works, try it, tweak it, tune it, adjust it.

There are many ways we can enhance this sort of commuication: Draw something on a white board, use some sticky notes, use some 3 x 5 cards, code up a test, code an experiment, move things around.  Settle on something to try, and then CODE IT and run it. Revisit, re-discuss. None of this turns into documents.  All this stuff is just part of the communication which culminates in Working Software.

If you still need documents

If you need documents, then make sure they are at a high level, and make them as short as possible.  “We need a sales report” is a good document. The rest of the commuication about that Sales Report can happen when we are ready to code it.  Then that original document can be thrown away.

Communication is not a Result

In the end, communication of this sort is not a result – it is a critical component to getting a result, but it is not the thing we are after.  The result we are after is Working Software.

And don’t forget my Agile Maxim #4: “Working Software” is software that users are actually using. Until it’s in use it is truly useless.

Radical?  I hope not.

Does this sound radical?  I don’t think it is.  My suggestion: Try a few things this way and see how it works for you.  Then, you can blame me.  Okay?

The Agile Maxims:

If you want to read some of my other Agile Maxims, they are here: http://bit.ly/AgileMaxims

Team, Team, Team, Team, Team – I even love saying the word: Team.

You ever watch The IT Crowd? There is a nice little skit in an early episode where the boss [Denholm] fires a whole floor of workers who can’t work as a team, and then he prepares to fire the security team if they can’t work as a team.

Here is a quote from Denholm just after the firings:

“Team! Team, team, team, team, team. I even love saying the word ‘team’. You probably think this is a picture of my family? No! It’s a picture of The A-Team. Bodie, Doyle, Tiger, the Jewellery Man.”

Of course, as important as “Team” is to Denholm the boss, he never actually does anything remotely team-like. Fortunately, most bosses are not like this, right? Well, that is for some other post, I suppose.

Denholm. ‘Team’ is important to him.

I hear a lot of people talking about team

I hear a lot of people talking about ”team”, and how important it is, and how to encourage people to work as a team, and all the team stuff they do, and etc.  Team, team, team.  Seems pretty important. Seems like something we need to nurture and grow in our organizations. So how important is it?

How important is “Team”? Very! But not as important as…

Well, I think “Team” is very important, but even more important is communication. As soon as you have more than one person involved in making software, you have to find some way to communicate. There are many ways to communicate. I advocate communicating in whatever way works best for you and for the stuff you are trying to communicate.  You have to figure that out for yourself,  and for the situation you are in.

What we noticed

When creating software, writing code results in a lot of immediate need for communication.  Often, regardless of how much we know “ahead of time” about the problem, the problem domain, and the technical parts of the work, doing work reveals questions we didn’t know we would have until we start doing the work.  Perhaps you have seen it otherwise – and I’d like to know all about that if you get the chance.  But I haven’t – so far, anyways.  And it isn’t just in writing code, but just about anything that has to do with creating software.

I have a saying about this: It is in the doing of the work that we discover the work that we must do.  Doing exposes reality.

If this is true, we can’t answer questions “up-front” because we don’t know what those questions are “up-front”.  The questions are discovered as we do the work.

So, if we are coming up with questions during development we’ll need a way to communicate quickly so we can work at a reasonable pace.  When an unanswered question is slowing us down we want to get the answer as soon as we can.

The need to quickly answer questions

Why do we need such quick answers?  Maybe you don’t, but here is what I have seen: If it takes 2 seconds to get an answer, then we can work as quickly as possible.  If it takes 2 minutes, then we can work about as quickly as possible.  If it takes 20 minutes, we are pretty much slowed down to a crawl.  So, we want answers quickly.  There is a lot more to this, obviously, but hopefully you get the idea.

Discovery is critical

Some questions cannot be answered quickly – but many can be if the right person is nearby.  However, for the questions that can’t be directly answered, the sooner we know this the better – we might learn that we need a process of discovery of some kind.  We might need to spend time doing work that will allow us to  discover the answer, or to discover other questions that we need to answer – or things that remove the need to even get that answer (sometimes things become irrelevant once we dig into them).  You see how this works, I bet.

So the question becomes – how do we become good at discovering questions and answers, and all the other discovery sort of stuff that needs to happen.  Of course, I have no idea in the long run, but one thing that I think helps (and has been working well for us) is to have ALL the people involved working at the SAME TIME on the SAME STUFF in the SAME SPACE.  That’s how I define a team.  The interplay of all those brilliant minds and all that creative ability is powerful.

Team, team, team

So – having teams is a good thing for providing fast discovery and communication.  This we need.

So, teams in and of themselves are not important. Communication is important.  Team enhances communication.  Let’s figure out how to have teams and see if it helps.

One last thing.  In my world, a team is not some people who have meetings.  A team does their work together.

 

 

Mob Efficiency

The General Idea

As a mob we put a lot of effort into increasing our productivity and capabilities. In other companies I have worked, the improvement of capability seemed to be a second class citizen to “getting work done”. When looking at the number of repetitive tasks a typical dev team does you may find that the potential for improvement has been completely ignored in favor of the continuous manufacturing of software. Templating, Code generation, easy configuration, and automation of typical maintenance tasks are key factors in eliminating waste in software development.

Repetitive Code and Templating

In particular the mentality a development team has around increasing their productivity can dramatically affect their output. Complacency is a key detriment, in a perfect world a developer who writes boilerplate code over and over should template it in some way, and a Mob that writes boilerplate code over and over will waste that much more time if they don’t. Ideally the Mob I work in writes a template in the development environment every time we notice a repetitive coding task. Templating solves the smaller problem however if a group creates and maintains a large number of individual projects they will quickly notice the need for code generation and easy configuration.

Maintaining Configurations and Automation

When working with applications that require continuous configuration changes, be sure to make it easy for a customer service department or even the product owners to configure the changes themselves. Much of the waste I have seen in the past has revolved around groups of developers being OK with the idea that they will have to take 2 to 4 hours out of their day to manipulate configurations. With a Mob it quickly comes into focus that the time being used for configurations is worthless and it needs to be cut out or automated out of the daily routine.

Maintaining Code and Permissions

Finally I want to talk about working on maintenance tasks which is closely related to configuration. Adding permissions for a user to use an application is unacceptable for developers to be doing a production environment. A developer should know how to do this in order to test the environment, but it should not be part of their daily routine. Changing code regularly in the same place repeatedly begs for the inspection of a team and the automation of tasks that would otherwise eat up development time.

Conclusion

Create an environment that can only move forward, and eliminate the idea of a “treadmill tasks” or tasks that are repetitive and could otherwise be automated in some way.