A few weeks ago, I joined a crew of developers who traveled to Marion, Ohio, to partake in the unique experience of pair programming in prison.
The main purpose of this pair programming exercise is to help prisoners learn the art and science of agile software development. The idea is that you take several qualified developers from the outside world, get them into the prison for a Saturday, work on some exercises together with the prisoners, and everybody learns. It’s like a code retreat, except it’s inside a prison.
The Marion Correctional Institution (MCI) is a medium-security prison just outside of Columbus, Ohio, and I was a bit nervous as I pulled up that morning. I don’t think I was worried what the prisoners might do (pull a knife or whatever), but I was afraid I would do something wrong and the guards would kick me out. At the top of my mind was the intimidating list of DO NOT DOs that our organizer had posted on his blog, which I had read seven or eight times and was constantly running through in my head. Things like “Don’t call guards ‘guards.’ They hate that. They are called correctional officers (CO).”
Let’s talk about Dan for a second. Dan Wiebe is half agile developer, half mountain man. He has a salt-and-pepper beard about ten inches long and dark eyebrows that always look a bit wild. He is a great guy, but many a team room has been put on edge when Dan came in on a Monday morning and announced “I just got out of prison.” He loves to play this game, but really what he’s saying is that, on many weekends, he goes into prisons around the state and provides different types of support, including teaching prisoners how to develop software.
Which is how we came to this weekend. This was my first time, but everyone else—Dan and five other developers—had all been before. In fact, I had heard of these trips and even wrote a blogpost for one (using most of Dan’s words), but I thought I had a pretty good reason for not going: I can’t code.
Somehow, Dan convinced me this wasn’t going to be a problem. Our exercises were going to be in Java, and I had done some Java development a while ago—umm, like eleven years ago. You see, I’m not a career developer. Dan calls me a “suit.” I’m a manager, business analyst, client liaison—you name it, just not a developer. But I’m a sport! So, I signed up.
I was thirty minutes early, but Dan and one other volunteer were already in the parking lot. We walked in together into a small entry area. The rest of our crew arrived over the next twenty minutes. During that wait, I chatted with Dan and the others. I also tried to read the many, many warning signs posted in the lobby. You see, first, you have to be careful what you wear—metal belt buckles, shoes with steel toes, even underwire bra—because it might cause the metal detector to go off. But the other sign was even larger and more wordy. It explained to women about what they should not wear. To summarize: Don’t dress sexy. Don’t show cleavage or leg or even shoulders. Don’t wear spandex or tight jeans. And, always wear underwear.
We did have two female developers in our group, but they had both been on this excursion before, so they were sure to dress appropriately. I was pretty sure I was safe on these counts (being a guy),
Sure enough, I set the metal detector off. “It’s your belt,” the CO said. I took it off, went through again, and I was OK. Luckily, I got the belt back. My pants don’t stay up well without it.
Dan recognized the CO, who was to be our escort, behind the metal detector. We walked across a courtyard and into the main building. I remember the sun on my face and thinking that I wouldn’t see it again for a while. (Wasn’t true, by the way; there were windows and courtyards.) The CO at the next gate looked over our IDs and let us through a series of electric gateways. Our guide took us down a long hallway, and we were in with the general population.
Observation number one: no orange jumpsuits. I never did ask why. I came to realize that whatever clichéd views I had formed about prisons without actually being in one needed to fly out the window. In fact, it seemed like prisoners could wear whatever they wanted. A lot of guys wore blue shirts, but jeans, pants—everyone’s clothes just seemed ... normal. People’s behavior was pretty normal, too. Everyone had some place to go, no one was really “hanging out” in the hallways; everybody was walking. Even though our group had two women, there was not a single cat-call, whistle, or even a stare when we walked by. Dan told us that the prisoners were well trained never to bother guests.The hallways seemed to go on forever. Finally, we reached our destination—the software lab. We were welcomed by the entire class—I think eight total. Lee, a very gentle guy with thick glasses (he told me he is almost blind) and a shock of black hair, was the organizer among the prisoners. He fussed over us, making sure we had places to sit in the somewhat cramped space between two rows of computer workstations. It turned out we would not be using these computers, as none of them had Java loaded on them and they were under-powered. Our workstations were in the next room—the computers usually reserved for graphic design. Hey, if it can run Adobe Photoshop, it can run anything.
Dan and Lee walked us through our exercise for the day: Dots. Dots is a kids’ game where you draw lines between dots and try to make squares faster than your opponent. Our mission was to try to build the Dots game in teams of two, one “insider” and one “outsider.” We had forty-five-minute blocks to do our pairing, after which we would retrospect and start again. And I really mean start again. After each pairing, we wiped our hard drives of any code we had built and started with a new Java project. In other words, your pair was never going to finish building the Dots game in the allotted time. This was actually the point. Dan and Lee wanted to create an exercise with no pressure to finish and no reason to mess up our good programming practices to gain a little speed. And what practices were we practicing? Well, our goal was to instill agile development practices, not just teach Java. So, we focused on pair programming, of course, as well as the SOLID principles and test-driven development (TDD). Of all of these, TDD is the hardest to learn. Many developers have tried TDD, only to fall back to their previous “test last” processes.
My first pairing was with Lee. Everyone had kind of planned this, because I had made it clear that I was a terrible developer, and we all knew that Lee was a great one, so he could get me started without too much embarrassment. We opened up a Java project, imported JUnit, and away we went. I was immediately hit with my first “D’oh!” realization: Prisoners don’t have Internet access, dude. When you run into a problem that you know a bunch of people must have had before, you cannot Google it. Now, that’s a big change from how we develop today (on the outside).
I was pretty impressed with Lee’s development skills and coaching ability. He seemed to be quite confident but without a hint of arrogance. Dan had warned us that our biggest problems with the pairing would probably be getting the prisoners to correct us when we made mistakes. The COs constantly coach the prisoners to be polite to visitors and volunteers, so most prisoners will err on the side of “shut up” rather than upset someone. Honestly, I’m pretty sure that if anyone from the outside, especially a woman, made a scene and accused a prisoner of anything, that prisoner would head directly to solitary confinement (yes they have that) without any questions asked. What was interesting was that the COs did not sit with us in the computer lab. The closest one was across the hall. At the front gate in the morning, Dan was issued a little necklace that had a big button on it. Dan said that if he pressed that button, COs would appear from the woodwork and whatever situation had occurred would be no more. I tried to keep my hands away from Dan’s button at all times.
My pairing with Lee was a lot of fun. I relearned what I had forgotten about Java and experienced TDD for myself. After forty-five minutes, we retrospected in the bigger room, then came back in and switched pairs. My next pair was Ronny. He had done some Java before but was clearly not at Lee’s level. We struggled along and had to ask other pairs for help several times, but something happened during this pairing. We decided to write some “storytests” as well as the normal unit tests. Storytests test your application at the “feature level” instead of just one unit. We decided to create one storytest and then wrote a unit test underneath it and started writing code to satisfy that unit test. It was cool, but Ronny mentioned several times that he wasn’t good at identifying stories. He would often try to make the stories more technical than they needed to be. Rather than write a storytest that said “I want to finish a square,” he would tend to want to specify the storytest as “Squares have four sides, which can include a corner,” things like that. We worked through these issues, and he seemed to improve a bit, as much as can be hoped for in forty-five minutes. Next thing we knew, it was time for lunch. But I realized I had found my niche—I could help my pairs learn about user stories.
The sandwiches catered by AmVets were pretty good. I had a sub sandwich with Italian cold cuts and a nice salad. During lunch, we listened to another prisoner (not in our group) explain the Green Initiative going on at MCI. Wow, they are doing a ton of things to encourage recycling and even to begin their own fish farm right on site. So cool. The outsiders were a bit disappointed we didn’t get to go to the mess hall and maybe witness a food fight, but, no, we ate our food right in the computer lab. The prisoners assured us we weren’t missing much from a culinary perspective.
One funny thing: When people get prepacked lunches, they sometimes look at a bag of chips or piece of celery and say “I don’t like this; anyone want this?” On the outside, maybe someone else will take it off your hands; maybe nobody will. In prison, there was never any food offered up that didn’t get snatched immediately. Bags of chips went into pockets, cookies went into little hiding places.Back to pairing in the afternoon. Dave sought me out because I had mentioned in the group that I could help people with user stories (something I actually do know). Dave said he had a hard time with stories, so we worked that into our pairing exercise. Dave is a smart guy, a natural programmer, and even a fast typist. We got pretty far with our Dots game. But just before it was time to break again, Dave got a tap on the shoulder and a whisper in the ear. Apparently, Dave had a visitor, and so he made his apologies to me and left in a rush.
Before the day ended, we had two more pairing sessions and retrospectives. People talked about increasingly complex ways to solve the programming problem, most of which were lost on me. Around 4:00 p.m., an announcement came over the loudspeaker saying they were starting “the count.” Every morning and afternoon, the COs walk through the building and make sure all the prisoners are still there. It was a big deal for us because it affected our departure time. We could not be caught in the hallways during “Count” because we might mess something up. The COs did not come into the computer lab to count our guys; I guess they were somehow exempt since they were doing this activity with us. Count is a big deal. If I had to go to the bathroom or something during Count, I would have held it. I was not going to be the one who screwed up Count.
Apparently, Count can take anywhere from fifteen minutes to several hours, depending, I guess, on how much trouble the COs have trying to find people. Although our pairing exercises lasted until about 4:30 p.m., we might have been there past 6:00 p.m. if Count had lasted longer. But, Count finished quickly and it was time for goodbyes.
I really had a nice time that Saturday. I appreciated the prisoners’ interest in learning and their willingness to pair with me even though I lacked a lot of the knowledge they were searching for. It was always more of a sense of learning together. Before we left, one of the prisoners asked me, “Would you do it again?” I didn’t hesitate in answering, “Yes.”
I guess the biggest thing I needed to learn was how to get rid of my vision of what it’s like to be in prison. Sure, the COs keep a tight lid on knowing where prisoners are. Sure, it’s a tough life. And you have to be OK with people telling you what to do. But there are bright spots. The Green Initiative is really amazing. I’ll bet MCI is doing more to reduce, reuse, and recycle than most schools are. And this software group, too. Imagine going into prison without relevant skills and coming out being able to code test-driven Java. That’s pretty cool. I’m so impressed with Dan and the other volunteers who spend a big chunk of their spare time helping people in prison. It’s a worthwhile endeavor, and I was glad to be a part of it.
If you are interested in participating in this one-of-a-kind program, contact Dan Wiebe at firstname.lastname@example.org. He will let you know when we are doing this again and will give you all the prep you need to take the leap.
The following photos are from the latest trip.