Whenever I hear about Mob Programming people always talk
about how great it is for the hard
problems.
But let’s explore a fictional example of some trivial work because I believe this is where things really start to shine.
At the Institute for Boring
& Monotonous work (IBMw) there was a team of 6 developers that whose
large code base had all become destroyed due to a large disk crash.
Fortunately, all of the code had been printed out before the destruction, but
it had to be re-typed in. The estimated work was going to take the 6
programmers 8 months. It doesn’t get more trivial than this, IBMw was really
living up to its name.
Nonetheless, Mob Programming was the new buzzword so this
team said, “why not try it out?”. Here’s what happened.
Day 1 (Many eyes):
The team started typing in the pages. They quickly started
to arrange focus so that a couple would be manning the physical paper and
couple eying the projector to keep everything in tack. They were definitely
slower with only one person typing, but they also realized that they weren’t
making any typos. This is very important as the code had to be perfect or the
whole system wouldn’t fit together again.
At the end of the day they retrospected as it is recommended
for mobs. They came up with 2 big findings.
1)
quality is up
2)
some people can’t type
Idea for improvement: “Let’s spend 20 minutes tomorrow
working on typing”
Day 2 (Countable Improvements)
The mob downloaded a typing tutor and started the day
working on keyboarding. It didn’t make a huge difference, but it was nice to know the slower members were
working on it. Made it easier to be patient with them during the day.
But one part of the day went a bit off, something went wrong
with the typing and they had to debug a bit. As they did someone counted the
number of words. Paper: 304 Computer:303. Damn. Eventually they found the
missing part.
At the daily retrospective, a couple of post-its showed up
in the positive side with ‘word count helped debugging’
Day 3 (Checks)
They continued with the typing practice in the morning. A
little progress but not much, some members had moved from 15 words a minute to
16.
The word count was really helpful so they started doing that
with each part. It usually wasn’t wrong but there was something reassuring in
knowing that the computer matched the paper so they kept doing it. It was extra
helpful when it didn’t match. However programmers can be extra lazy and someone complained
that it sucked that they had to count the words on the computer as well. Everyone agreed,
and then they suggested they write a small programmer to count the words for
them. Easy enough; No more manual counting of the words.
The retrospective had a lot of sticky notes with “auto
counter” written on them in the what went well section.
Day 4 ( Auto-enhancement)
It was great having the ability to know the word count when
they matched up, but still a bit hard figuring out where the missing part was
when it didn’t. So they would add improvements to the AutoCounter to allow for
easier debugging. It was interesting to note that some of the best ideas came
from the most frustrated people. Team members that never would have been able
to implement those ideas on their own.
At one point, they just couldn’t get past one section.
“I know something is wrong”
“But the word count is the same, even the character count is
the same”
“but look at it, it doesn’t feel the same”
“yes, but, oh the printed font is different. That’s why it
feels different”
The retrospective had a bunch of “font caused frustration”
in the negative side.
End of Week 1 (double check)
After typing practice the first thing suggested was to change
the font to match the paper. This made the day a lot easier. They would hold
the paper up and do a quick sight match. Still programmers are nothing it not
lazy. The retrospective included “arm tired from holding up paper”
Week 2 (Seeing words)
The second week seem much easier than the 1st.
They brought in a second projector to overlay the paper so it was even easier
to see the differences, but this also got them thinking why do we need to count
the photo? It was too hard to program up something to read the printouts, but
it wasn't to hard to detect the words. They could figure out the boxes around
words. It wasn't great but it helped.
Now WordCounter could also help a bit with the physical world.
They were still doing typing, but it wasn't helping much the
slowest was up to 22 words per minute on Friday from 21 words per minute
Thursday.
Oh, someone was sick and out for 2 days, didn’t really
matter.
Week 3 (Word counter sees letters and bugs)
The team was able to get the boxes from words to letters.
This really improved the speed of the checking and we are almost completely
sure there are no bugs going in from typing now. Of course there were some bugs
in the original code. We got in one argument over a weird compiler setting that
has different effects on how a struct would end up in assembly code. It was
rather goofy, but we added setting to Word Counter to notify us if this shows
up again.
Typing still isn’t helping much, our slowest is barely making
26 words per minute.
Week 4 (Splitting Word Counter)
The team split up the Word Counter into a separate program
that detects the patterns of common bugs. We only have 3 patterns so far but
its pretty neat and we are removing some bad code because of it. We were also
able to run this over the previous code so fixed some stuff from the first 3
weeks.
We also had an idea of how to detect the letters from the
printouts, but it didn’t work.
On the failure side, typing is still not really improving.
Slowly McTypesABit is only doing 30 words a minutes.
Month 2 (OCR & Linting)
This month we were able to add a lot to the bug finder. Up
to 13 patterns. We’ve even shared the program with other teams to help them
check their code. We also got a way to do a bit of automated reading of the
characters from the printouts. It’s not very good (about 50%) but it gives us a
starting point which is nice and we are doing good overall. Might even be a
month or two early to finish this project.
On a side note: because of a 2 week vacation we have a new
slowest typer! It’s very close though (40 wpm vs 39 wpm)
Month 3 (Done Done?)
The WordReader is still having problems (only 80% accurate)
but it’s been helping us move really much faster. With the combination of
BugFinder we are going to be done with the rewriting by the end of next month. The
teams still has budget though and it looks like both WordReader and BugFinder
might be useful outside of just helping us finish our original Task. We are
looking into making them more robust…