Expecting Easy Integration

My biggest mistake was in being overly optimistic! And I should know better -- I've been in Quality for a lot of years! I know that things never go as we plan and expect them to when we are integrating software. So why did I think that things would be any different when I was teaching a college class?

The Course Plan

It was an Introduction to Programming class. I had one semester to lead a group of 20 students from rank novice to some semblance of knowledge about how to program using a particular programming language.

I decided to try to give them a taste of the real world by breaking the class into four teams who would be creating the same little system. Within each team, each student owned a part of the system. Each week, each student would have a different assignment: to enhance his or her part of the system. The team members would peer-review each others' code and otherwise collaborate to achieve success -- just like in the real world.

Then, the last week of class, we would commandeer a computer lab and the four teams would race to see who could integrate their system the quickest.

Did it Work?

My intent was to create a class that was much more like the real world than most college programming classes. Drawing from my copious store of real-world experience, I --- the Adjunct Professor of Computer Science -- would teach them the right way to program, not the classroom way!

Most of the components of the class worked as intended.

Teamwork -- Each team had a leader (appointed by me) who was free to lead the team as he/she saw fit. One team excelled -- mainly due to excellent leadership, and one team failed miserably -- mainly due to non-leadership.

Collaboration -- A significant part of each student's grade was based on their participation in peer reviews and other team-oriented work. I encouraged them to seek help from each other on their assignments (short of doing the work for each other), and some benefited from doing just that.

Enhancement -- After the first assignment, each student was enhancing existing code, rather than writing from scratch, and those enhancements involved working around the programming decisions that they themselves had made. So 10% of the course time was spent writing a new program from scratch, and 90% was making enhancements to existing code -- just like real work.

What Was My Big Mistake?

The last class of the course was a disaster! In retrospect, I was kicking myself for even thinking that it could work. There was one simple question that would have kept me from this folly:

Will a team of rank novice programmers, after working on their individual components for weeks on end, be able to integrate those components into a working system in less than three hours?

If I had had the insight to ask myself that question, or the fortune of having someone else ask it, the answer would have been so glaring as to send me running from my original plan. Of course they won't be able to do it! Even professionals with years of experience struggle with this sort of "big bang" integration.

So what was supposed to be the crowning end to my real-life-like course turned into an exercise in frustration. Not one of the four teams was able to even come close to a working system. They struggled through problem after problem until after two hours I mercifully called a halt to the exercise.

Salvaging Some Good From My Mistake

The only good to come out of that evening in the lab was my opportunity to seize the moment, admit my mistake, and turn it into an opportunity to teach.

I focused their frustration squarely where it belonged -- on the "Big Bang" integration process. Then I explained that we should have been integrating the components of their system regularly through the course instead of waiting until the end. I told them that integration is always a problem, and that the failure they were experiencing was not of their own making.

It would have been batter if I had structured the class so they could experience the right way to integrate their systems. I only hope that they left that last class having learned something useful.