Reflections on Iteration 1
by Mark Egan
The Iteration 1 activities provided a good experience with working in a team and established an effective foundation for future activities. In the following few paragraphs I will present some of the experiences and my personal observations in detail. I will also identify some areas where the process can be refined and a plan for success in the next iteration based on the experience from Iteration 1.
The three most important aspects that lead to the most benefit in Iteration 1 were 1) we started early, 2) we worked in pairs while seated next to each other, 3) we both contributed to increase the other's skills.
It may seem obvious, but I continually find starting late is the greatest contributor to failure and low quality. I particularly agree with McConnell's statement that design must be a process and does not simply spring forth instantly. Starting early allows one to more thoughtfully enter into defining the solution. As that design because more beautiful, a developer's pride continues to drive the quality of the solution. The frustration that comes with starting late greatly contributes to lower quality as well as lower quality-of-life. With all the various classifications one can place a developer in, I prefer the "quality-of-life focused" developer.
Working in close proximity to each other during the coding allowed us to trade off design, implementation and testing. It greatly increased the easy of working out design improvements. Also, we drove to avoid having one developer become the implementer while the other became the tester. This is important not only in skill building, but in ensuring that both developers have familiarity with the implementation as well as the test cases. We were able to commit changes to the repository and update our workspaces in a "ping-pong" fashion that provided good development velocity.
We both contributed to increasing each other's skills. My partner mentored me into better C++ practices in regards to defining public and private members while I contributed to my partner's skills by detailing an effective way of segregating our Token / Regular Expression objects into an easily traversed array. In addition, we each contributed to improving the test cases of the other in order to make more easily maintained cases with less boilerplate code.
Our future iterations will benefit most from continuing to work together and getting a head start early. I anticipate that as we move forward, we will enter conflicts of opinion which may cause tension if not resolved effectively. Also, there is a danger of resting on our laurels and taking this early success as an erroneous sign that we can implement the rest of the project with easy and less effort. I prefer taking a 'positive' approach and continuing to reiterate everything that lead to this early success as we embark on the later activities.
All-in-all, it was a rare good experience in an otherwise frustrating academic history.