Archive for January, 2014

Coding in the Clink 9 in the Can, Part II

If you’re warping directly in here, you should know that this story has a Part I.

When I got to the prison on CITC morning, I was determined to be the first one there, so that I could greet the other attenders as they arrived.  I arranged to get there just under an hour early.

But it was not to be.  Joel Helbling from Indiana and I arrived at the same time and walked in together.  (Turns out he hadn’t driven all the way from Muncie that morning; he’d driven in the night before and stayed at a hotel in Marion.)

After that, the only bump in the road as people were coming in was that Officer Evans behind the counter in the A building had no gate pass for us.  I had been told that the gate pass had been prepared and signed, so Officer Evans began searching for it.  It occurred to me to call my boss, Jo Dee Davis, and see if she knew anything about it.  As it happened, yes she did: she had it in her hand, she was having coffee in Marion, and would show up at the prison a good ten minutes before we went through security.  So…not really much of a bump in the road after all, except for Officer Evans who had to do some fruitless searching.

By 9:00, we had everybody we were expecting (we all knew Alyssa Diaz had decided to stay home and keep her flu to herself) except Sherief Gharraph, Guy Royse, and Wes Tarpley.  I gave the folks who were there a short briefing on what to expect through security and inside the prison, and then we filed through the metal detector, signed in (except for a shall-remain-nameless few of us who forgot), got an invisible-ink hand stamp, and received a visitor-badge envelope with a clip into which we slipped our driver’s licenses so that our picture was showing through a cut-out corner.

We waited for awhile in a back room for Sherief, Guy, and Wes, but then decided to go on in without them to get things started, and have them escorted in later when they arrived.  However, just as we made that decision they showed up, so we got to go on in with them.

One addition since the last CITC was a new crash gate just outside the A building in the back. Now, when the door is buzzed open and you walk out the back of the A building, you’re in a big chain-link cage with another locked door on the other end, which won’t be buzzed open until the door in the A building locks shut.  We filed quickly out into the cold so that we could get the building door shut, and the inner door was immediately opened for us so that we could hustle out of the cage, across the wind-swept gap, and into the warm main building.

I had an interesting moment inside Control 1, which is another crash gate in the main building, this one between the region where the administrative staff has offices and prisoner country.

We had a large group of people coming in–sixteen strong–and the security folks in the A building had sent us all in on the strength of my escort, since I have a contractor badge. However, contractors are small fry in the prison when it comes to escort duties. Usually we escort groups of two or three; larger groups are escorted by correctional officers or even white-shirted sergeants or lieutenants.

The officer in Control 1 wasn’t ready immediately to accept a contractor escort with fifteen charges, so he gave me a grim look and got on the phone with somebody.  It took about three or four minutes, during which I figured we’d be sent back out of the crash gate to wait until a CO could be spared to escort us; but eventually he was satisfied and sent us on into the prison.

After that, a long walk back to the Lifeline complex where CITC is held, several minutes doing another round of sign-ins, and we were–among friends.

Mark and the guys had everything set up, with a cramped circle of chairs in the front room (31 participants is the most we’ve ever had, by at least half a dozen), and pairing stations in two of the other rooms, each with an installation of the development tools we’d need, a sheaf of scratch paper, a pen, and a stapled-together copy of the Evercraft kata from George Walters’ github page, compiled by George Walters and Guy Royse.

I had a sack containing a number of decks of story cards I had made from the kata, so I engaged Dean Preston to put a stack next to each machine.  At the time, I didn’t know the stations also had printouts from George’s github page, so the pairs ended up with both a deck of cards and a printout, which would prove confusing.

One thing I notice about CITC in general is that when the outside folks first come in and sit down in the circle, there’s a fair amount of self-segregation going on: long stretches of outsiders, then long stretches of insiders, then more outsiders, and not much interfacing between the two groups.  Usually that changes as the day wears on, but CITC9 started out right down the traditional path in that respect.

Once we had everyone seated, I talked for quite awhile about the kata and methods for addressing it.  I was aware of the fact that we had three women in the group (Amber Conville, Chelsey Baker, and Margaret Pearce), and I remember from high school that Dungeons & Dragons (on which the kata is based) wasn’t particularly popular with girls, so I was trying to be clear about the nature of the kata to avoid confusion.

Uncle Bob reassured me, though.  He said, “Don’t worry, I used to play with girls all the time in high school.”  Somebody clarified: “You mean play Dungeons & Dragons with girls?”  Yes, he did; but we all had a nice laugh anyway.

Finally, we got down to introductions, which were done in a way I had never experienced before.

Each person, before he introduced himself, had to repeat the introductions of everyone before him in the sequence.  This helped cement the memory of those introductions not only in the person introducing himself but in everyone who heard those introductions so many times.  Moreover, an introduction consisted not just of one’s name, but also of an accompanying noun that was connected to the name in some way–perhaps by rhyming, or by starting with the same first letter.

It took a long time, but I have to admit that it worked.  It’s possible that, a day later, I may even still remember not only the names of the people in the circle and their chosen nouns, but also the order in which we all sat.  Let me see:

Dean with Green
Micah with Machine
Will with Washboard
Gareth with Grapes
Ezra with Everything
Brian with Bike
Ron with Radio
Matt with Map
Mark with Ark
Will with Willpower
Rick with Ridiculous [not a noun, but we let it slide]
Nick with Noodles
Jason with Java
Dusty with Data
Guy with Try/Catch Block
Jesse with Juice
Ovi with Olives
Chelsey with Challenge
Margaret with Memory
Amber with All the Shortcuts [reference to her well-known goddesshood with Eclipse]
Bob with Uncle
Jeff with Jams
Joel with Jalapeños
Tim with Tomatoes
George with Goal
Wes with Mess
Sherief with Leaf
Mike with Mistake [perhaps a comment on the wisdom of the introduction method]
Ron with Red
George with Gooey Cheese
Dave with Dragons
Dan with Plan

Well, I’m pretty sure I got everybody (there are 32 in that list because Matt “Map” Hutzler participated in the introductions but didn’t code with us), but I may have addled the order in a couple of places.  However, other participants who read this blog may well be able to correct those mistakes in the comments below, which is still a testament to the effectiveness of the method.  But it was after 10:00am by the time we finished, so perhaps it isn’t appropriate for all groups of 32 people.

But once we were duly introduced, the time came to pair up and get to work.  Since there were 31 people in the group, fifteen from the inside and sixteen from the outside, I was odd man out and took a facilitatory role.  I just wandered back and forth between the rooms and among the desks, looking for folks who, given the lack of Google in prison, might have questions about Java syntax or semantics.  Many of the inside folks were just starting into Java (one of them had programmed in nothing but line-number BASIC on a Commodore 64 before Tuesday of that week, when he joined the Java class), and many of the outside folks did not have Java as their first language.

I got a few simple questions, but mostly what I saw were pairs of developers hard at work on an interesting problem.  I was looking for body language telegraphing stress or discomfort, from all the outside folks but particularly from Chelsey and Margaret, since they were both A) women and B) new, but I didn’t see any.  Except for the women, and except for Uncle Bob, who will stand out in just about any crowd, it quickly became harder than I expected to distinguish the inside folks from the outside folks.

Since we were in a prison, and since I was largely responsible for the event, I spent a fair amount of time counting, just to make sure nobody had wandered off.  For several minutes during that first cycle, I became concerned because my counts weren’t coming out correctly.  Then I noticed–hopefully he won’t be offended–that I had been counting George Walters as a prisoner.  Once I corrected for that, everything was fine.

As it turned out, there were some video folks there who were interested in getting footage for an upcoming documentary on Coding in the Clink (perhaps along with other similar programs at MCI) to be shown in the prison.  They wanted to record people pairing, they wanted to record our retrospectives, and they wanted to pull various people aside at intervals to interview them in front of a green screen.  I asked them to let the first retrospective go completely unmolested, since most of the people there had never been to a CITC before and needed the experience of a whole cycle for context; but then they were welcome to anyone who agreed to be interviewed, as long as they didn’t take too long.

The first cycle ended all too soon, and we congregated back in the cramped circle of chairs for a retrospective. There was a little more mixing between insiders and outsiders this time, but the three women remained jammed together in a clump.  The contribution I remember most from that retrospective was a deferred discussion of why try/catch blocks are bad–I’ll have to explain to the guys later that they’re not intrinsically bad, but if abused they can lead to some really pernicious problems–and a comment from Uncle Bob that it seemed that most of what we were testing was getters and setters, because of the way the kata started.  He hoped that we’d eventually arrive at a point where we could refactor the design to get rid of the getters and setters.

Presently, we picked new pair partners and sat down at new machines and continued with somebody else’s code.  The rule was that, even though what we encountered was probably not much like what we had started with, we would try not to rip out the existing code and replace it, but rather do our best to be faithful to the original design intent of the pair before us, so far as we could divine it.

I say “we”–really I mean “they,” because once again I was relegated to wandering in and out and around and around and facilitating.

While answering a question, I discovered that there were some pairing stations that didn’t have decks of story cards at them.  Huh, I thought.  I went and found Dean and interrupted him and asked him where the missing decks were.  There aren’t any, he replied.  He had put a deck at every computer until he ran out of decks, and just left the stapled-together kata printouts at the others.

Well that didn’t compute: I had had the print shop print more than enough decks of cards.  I had taken the number of outside attenders–17–and rounded up to 20, and planned to order that many decks of cards.  Then I thought, whoa, we’ll be pairing, we only need a deck for each pair, not each individual.  So I ordered ten decks instead.

But of course I was forgetting that each outside attender (almost) did represent a pair: there would be fifteen pairs, not seven and a half.  So I printed ten decks when I should have printed at least fifteen.

Oh well–nothing for it now but to improvise.  So we (they) improvised.  I was really glad Mark had printed out the kata.

Once again I was watching for tension and discomfort in the pairs, and this time (at least I believe I remember that it was the second cycle) I saw something.  Margaret Pearce was pairing with Dave Travis.  They were talking together about something on the screen, and it happened that they both reached to point at the screen at the same time.  Their hands might have inadvertently touched, but Dave snatched his quickly away to avoid any contact.  That’s reflex: prisoners can sustain non-trivial punishment for initiating physical contact with just about anybody (but especially women) if it’s judged to be in the wrong context, so in general they just don’t, by habit.

As I continued, I noticed that Amber Conville was perching on her chair, rather than sitting in it.  I thought to myself, “What posture would a woman assume if she was subconsciously expecting at any moment to have to use her feet to shove herself back from the desk, jump up, and run away?  Probably she would not curl them up under her and sit on them.”  Of course, being Amber in general and a CITC veteran in particular, she’s not a very random sample, but it was still gratifying to see.  Later I saw Chelsey Baker playing idly with her long hair, as though it were an old habit, as she paired with her partner.  While I don’t know her at all, it at least seemed good that she was able to relax enough to fall into an old habit.

During our next retrospective, we discovered that some folks had taken the “be faithful to the direction of your predecessors” rule a bit too far, in that bad code–and even incorrect or dead code–had been allowed to stand and even built on, in order to avoid damaging the Vision of the Predecessors.

One of the other retrospective questions was, “For the outside folks, how do you find what’s happening here today to be different from what you experience pairing with people on the job?” The answers were a little surprising.  I expected to hear, “No different, really, it’s pretty much just the same.”  But no: the answers we got all contrasted CITC positively with work.  I believe it was Mike Cornell who said that he found that the engagement was much higher: that nobody seemed to have a pair partner who was constantly running off to the break room or the bathroom or finding other excuses to get away.  Somebody else said that the relationship between pair partners tended to be nicer and more considerate in prison than out.

After the retrospective was another cycle; toward the end of this cycle we definitely began to smell lunch, which worked out to be delivery pizza (fifteen of them, I believe) and soda–Mountain Dew, Coke, and Diet Coke in 2L bottles.  As soon as the cycle ended, I led an expedition to the bathroom (you’re not allowed to go to the bathroom individually, and even a group has to be escorted by somebody with escort authority), so when we got back almost everybody already had their food.

There was a lot of standing around and talking and not much sitting in the circle at first, but we gravitated eventually toward the circle, and I noticed that while Margaret and Chelsey (who were both CITC rookies this time) were still sitting right next to each other, Amber had broken off and was sitting on the other side of the circle with a prisoner on each side of her.  Outside of the women, we were beginning to get some fairly significant mixing.  Joel Helbling commented to me that instead of sitting with their group (insiders or outsiders) it seemed to him that people were mostly sitting with their pair partners from the previous cycle.

I noticed that the circle seemed less crowded than before, so I did a quick count and came up with some folks missing.  After a couple of questions, I found out that the Martins had been spirited away across the hall to be interviewed in front of the green screen.

Once they came back, we launched into our next cycle, and managed to get two in after lunch before the Martins had to leave at 3:00 to catch their plane.  They each got a T-shirt with a CITC9 logo on it, and they were shown a music video that Mark Roberts had made to a Katy Perry song.

For our next-to-last cycle, George Walters did something very nice for me and offered to facilitate, so that I could actually pair with somebody and get some coding done.  That was a lot of fun, although most of what we did was refactoring of tests to make them clearer–for example, if somebody wanted to prove that a Strength modifier of +1 was enough to make them able to hit even with an attack roll one less than an opponent’s armor class, by writing code like this:

attacker.setAbilityScore (Strength, 12);
attacker.attack (defender, 9)
assertEquals (4, defender.getHitPoints ());

we would refactor the code into something like this:

attacker.setAbilityScore (Strength, scoreThatProducesModifierOf (+1));
attacker.attack (defender, defender.getArmorClass () – 1);
assertDefenderHasBeenInjuredBy (defender, 1);

We didn’t get any progress made in the kata, but it was still fun.

For our last cycle, traditionally we go back to our original Cycle 1 pair partners, and our original Cycle 1 machine, and see what CITC has made of the code we wrote at the beginning.  For CITC9, though, Uncle Bob and Micah were gone, so Nick Cochran and George Gonzalez had no pair partners to return to.  Instead, I tripled with them on a handy machine and we at least had some fun for the final forty minutes.

During our final retrospective, we talked about–among other things–how things could be made better next time for CITC10.  The major thing we hit on was that when everybody constantly moved from machine to machine, pairs spent too much of a cycle figuring out what their predecessors had been doing.  So next time, we’ll have–say–the insiders stay at a machine between Cycle 1 and Cycle 2, and then have the outsiders stay at a machine between Cycle 2 and Cycle 3, and then the insiders between 3 and 4, and so on.  That way we’ll still be able to switch pair partners and work on other people’s code, but there will be some maintained context to speed up the acquisition of situational awareness.

Another thing that came up was a question for insiders: “How has your experience here at CITC today been different from your normal experiences pairing with other prisoners?” The answer was interesting: it seemed fairly uncontroversial among the prisoners that their pairing sessions with us were altogether nicer and more pleasant than the sessions where they pair with each other.

Part of this is due to the fact that software development in the prison is understood as something important that you sacrifice for, that you spend lots of time on, that you work very hard for, that you don’t get to do unless you’re dead serious and passionate about it, and that it’s a program you’re in to learn as much as you can as fast as you can before you’re released, rather than to have a good time and be all sunshine and butterflies.

However, Chelsey Baker and Amber Conville (who are coworkers) talked about one of their team rules, which is “Don’t Be A Jerk” and is posted on a big banner in their team room. According to them, pair partners who are less than nice are immediately called on it and shamed, and the practice produces a much more pleasant working environment.

It’ll be interesting to see whether that practice gets adopted in the prison. I can’t see it being introduced as a touchy-feely “be excellent to each other” measure, but I can imagine a philosophy like this: “Look, this is supposed to be difficult. It’s prison. If you don’t like it, that’s not my problem. But just because you’re having a bad day doesn’t mean that you get to take it out on the guy next to you, and if we catch you doing that you won’t last long.”  There’s already a perceptible “The Few, the Proud, the @gile fact || <E>” esprit de corps about the program; a “we don’t just pair, we pair well” slogan would go right along with the current “we don’t just write code, we write good code” spirit.  We’ll see.

After we spent some time saying our goodbyes, we went out in the hall for a group photo.   I don’t know whether the censors will allow that group photo out of the prison.  They did for CITC1 (for which we had not yet come up with the name “Coding in the Clink”); if they do for CITC9 I’ll update this post and add it.

Signing out and leaving was fairly uneventful, except that we discovered a few people who had not signed in in the A building.  The reason that’s important, of course, is that if there should be some sort of disturbance or riot or hostage situation while you’re in the prison, you definitely want the administration to know that you went in and that you haven’t come out yet. But once you are out, the fact that you didn’t sign in has approximately the same significance as the fact that you didn’t wear your seat belt does as you pull safely into your destination.

Since we had spent more time in the prison than I expected us to, and more time than we ever had before during a CITC event, I figured the attendance at the traditional Bob Evans retrospective would be light.  But as it happened, the Michigan contingent (Amber, Jeff, Chelsey, and Margaret) and the Indiana contingent (Joel) both came and participated, and the only ones that had more pressing business turned out to be the Martins and Tim Butterworth.

It was a good day.  I’m glad we did it.  Hopefully we can do it again in a few months, and the guys inside will be even better pair partners.

Coding in the Clink 9 in the Can, Part I

Well, CITC9 has in a number of ways been unlike any CITC that preceded it.

First, I was approached by Robert C. “Uncle Bob” Martin, of Agile Manifesto and Clean Code fame, about when our next Coding in the Clink and PrizCon events would be.  His schedule didn’t work with PrizCon 2014, but it did work out for CITC9.  He said he wanted to come see what we were doing.  (This didn’t come out of nowhere: the guys inside had already invited him to PrizCon 2013, although as it turned out he couldn’t make it then.)

Less than a month later, it was pretty definitely established that he and his son Micah were going to fly from Chicago IL to Marion OH in Micah’s Piper Archer (low-wing single-engine four-place light plane).

This presented a problem, of course.  How were we to conduct a serious CITC if it became known that Uncle Bob Martin was going to be there?  The place would  be swamped–not with people hoping to pair with prisoners, but with people hoping to pair with the Martins.  That’s not the way CITC is set up.  Outsiders pair with insiders; that’s just the way it is.

So I decided to keep Uncle Bob a secret until we had all the tickets “sold” on the EventBrite site.

This time, we had fifteen prisoners on the roster for CITC, so we needed fifteen outside developers to go in.  I figured I’d add two extra tickets, because we’ve never had too many folks from outside before and I figured probably at least two would cancel at the last minute.  So: seventeen tickets for CITC9.  Or rather, fifteen tickets available on the site, with two secret tickets already “sold” to the Martins.

I was a little surprised at how fast we sold out anyway.  There have been times when we’ve been able to scare up so few outside developers that we’ve had to have all triples instead of pairs: two insiders and one outsider.

But these were the folks who signed up to go.  (They may blog this event, the way I’m doing now. If they do, and I find out about it, I’ll make their names here links to their blog posts.)

  • Chelsey Baker *
  • Tim Butterworth *
  • Amber Conville
  • Michael Cornell
  • Jesse Cox
  • Alyssa Diaz
  • Sherief Gharraph
  • Joel Helbling
  • Jeff Kelley * 
  • Micah Martin
  • Robert Martin
  • Margaret Pearce *
  • Guy Royse
  • Ovi Sofariu
  • Wesley Tarpley
  • George Walters
  • Dan Wiebe

The names in blue are CITC veterans who have been to a number of events.  The name in red is a second-timer who had been to one CITC before.  And the names in orange are brand-new: as far as I knew, these people had never been deeper inside any prison than the visiting room before, and more than likely not even that far.  Names with stars are people I had never heard of before and whom I didn’t solicit, whose names just suddenly showed up on tickets.

As it turned out, three of those starred names–Chelsea, Jeff, and Margaret–were people who were invited by Amber to ride with her down from Michigan.  Tim was invited by Eric Wilson, a CITC veteran who couldn’t make it himself but thought it was worth recommending to one of his coworkers.  So…I invited Amber and Eric, and they invited Chelsea, Tim, Jeff, and Margaret. That makes me feel like some strange kind of a grandfather, or something.  (I’m the regular kind of a grandfather as well, so I know how to recognize the feeling.)

All was well as the day slowly approached, but all began to get a little more dramatic as the arrival became more imminent.

First, the federales decided to apply a federal law to the state of Ohio, which might have the consequence of making it illegal for one of the outside developers, who had himself in the past been a guest of the Governor (so to speak), to go back into prison with us.  Nobody knew for sure how the law was to be interpreted, but outlawing him was certainly one possible interpretation.

Second, Wes, who didn’t have a car, needed a ride to the prison and back, and lived in a part of town that was not geometrically convenient to anyone else who was coming.

Third, Alyssa got the flu and began to wonder whether she’d make it.

Fourth, Guy brought an acute ear infection back from CodeMash.

Fifth, the weather for the weekend of CITC9 began to look uncooperative.  Micah is a VFR pilot, which means that it’s illegal (and unwise and unsafe) for him to fly in clouds, and it was looking like there was a snowstorm shaping up to hit right around the night before (Friday) or the morning of.  The Martins might have to fly commercial instead of private.

And whether they came commercial or private, they’d need transportation, preferably from somebody coming to CITC anyway.  But Port Columbus is some forty miles south of Marion Municipal Airport, so whoever picked them up would need to be flexible.

But things began to work out.

First, the federal law was determined not to apply in this case, so there wasn’t a problem.

Second, Guy almost immediately volunteered to make the geometry work anyway and go get Wes on CITC morning.

Third, Alyssa decided she was getting over the flu and would be able to make an appearance.

Fourth…well, that problem didn’t work out.  The ear infection kept raging.  What if it took Guy out of the game?  Who would go get Wes then?

Fifth, Jesse agreed to sync up with the Martins and make sure they were transported wherever they needed to be transported.

The problems were fewer, but they hadn’t completely disappeared.  Time kept grinding on.

Third, Alyssa decided at the last moment that she wasn’t feeling well enough and didn’t want to infect anybody in a place where as many folks live as closely together as they do in a prison.

Fourth, Ovi agreed to pick Wes up for Guy if Guy’s ear infection kept him out.

Fifth, the Martins decided to take a commercial flight in on Friday night (the weather was horrible, with lots of wind and snow and overcast), and rent a car and drive to Marion to find a hotel rather than make Jesse pick them up, drive them all the way north to Marion, and drive back home again in the blowing snow.

The only fly in this ointment was that the Martins would need to leave the Clink early to be able to catch their return flight back to Chicago.

As things finally worked out, though, Guy defeated the ear infection long enough to bring Wes and come to CITC, Alyssa (hopefully) got enough rest to defeat her flu, and we managed to get the Martins out when they needed to leave, having them miss only one cycle of coding.

Saturday morning was pretty and still, and clear under a high (maybe 8000ft) overcast, and Micah was a little disappointed that he hadn’t waited out the storm in Chicago and flown himself and his father in early Saturday morning, but as it turned out we were beset by another storm as soon as we left the Clink, so his decision was for the best.

I’m fairly sure the leadup to this CITC has been the most dramatic ever, but hopefully we’ve learned some things that will be useful the next time a charter signatory of the Agile Manifesto decides to come.

Here’s Part II.