On Facilitating Teams In The Classroom

Admittedly, I have been an opponent of team projects in introductory computer science courses for a while. My opposition was partially motivated by the impression that team projects would take away from the valuable learning experiences and joy of figuring things on my own in introductory courses. Moreover, I thought that team projects in early programming courses would produce students who are unable to program on their own. I remain hesitant, although evidence from pair-programming research motivates me to experiment with team projects in introductory courses in the future.

My hesitance towards team projects diminishes when it comes to upper-level courses. In fact, I believe that team projects should be an integral part of advanced computer science curriculum. Software today is mostly created by teams, and learning how to navigate and manage teamwork is vital in professional software development. My past experience with creating team projects in upper-level courses has been a mixed bag of successes and failures, but informative nonetheless.

Realizing the importance of teamwork in software development, I planned six projects in my upcoming software engineering course, and most are team projects. In an attempt to avoid the failures of the past, I reached out to mentors and experienced colleagues to seek advice on creating successful team projects in computer science courses. In addition, I found valuable research on teamwork in software development. Here is my summary of the lessons learned.

1. “Sometimes Bad Things Have to Happen Before Good Things Can”

Educators have a tendency to want perfect team experiences for students, but the reality is that such “perfect” teams do not exist in real life or academia. Evidence shows that both positive and negative group experiences are educational and helpful in developing teamwork skills. Therefore, spending significant time and effort to design perfect teams might be counterproductive, especially if teams change throughout the semester.

Giving students the responsibility of forming teams enhances communication skills and reduces the workload of the instructor. In my software engineering course, the only rule I have is that students can not work with the same person in two projects. This helps with knowledge sharing among the entire class, and guarantees some good and some bad team experiences for students to reflect on.

2. Group Vs. Team

Adding a teamwork experience to a course is not easily achieved by adding a group project component. Teamwork is a cultural change that requires a shift from a traditional lecture format to an open discussion in the classroom. In fact, Waite et al. [2004] found that just adding group project to courses had no effect on students gain of teamwork skills. For students to effectively build their teamwork skills, the instructors must also facilitate the students’ exposure to, experience of, and understanding of the dynamics of team formation and interaction.

3. Teams are not Created, They Evolve

Largent et al. [2016] advocates for the use of the theory of Bruce Tuckman’s stages of small group development model as an effective tool to teach teamwork and monitor team development. The theory illustrates the phases needed for teams to grow and evolve through the stages of forming, storming, norming, performing, and adjourning. Simply sharing this perspective with students might help in developing a necessary self-aware approach to teamwork.

4. Roles Create Balance

Assigning roles to team members might help in sharing responsibilities among the team. This role assignment might be suitable with big teams where there is a tendancy to develop a de facto micromanager. Some role examples might be:

  • Timekeeper: Responsible for keeping the group on task and on time.
  • Reality checker: Responsible for noting group decisions and whether they are realistic.
  • Devil’s advocate: Responsible for pointing out alternate viewpoints and asking tough questions.
  • Prioritizer: Makes sure the group focuses on most important issues and doesn’t get caught up in details.

5. Motivating Reflection

Along with the usual written project report, Walker et al. [2002] shows that it might be a good idea for each student to write a section in their report on teamwork and managerial lessons learned. Such reflections can be shared with future students in the course. In addition, highlights from these essays can be developed and incorporated into a tutorial on teamwork in future iterations of the course.

6. Squad Health Check

Considering the minimalistic approach suggested by the first point in this list, it might be important for the instructor and the team to evaluate the health of the team. Spotify (yup, the music streaming company) has a novel technique to assess teams called “Squad Health Check” which helps in understanding team experience and the early challenges in team-based software projects. Also, it might be important to isolate such assessment from grades to maintain the integrity of the subjective tool.

References

William M. Waite, Michele H. Jackson, Amer Diwan, and Paul M. Leonardi. 2004. Student culture vs group work in computer science. In Proceedings of the 35th SIGCSE Technical Symposium on Computer Science Education, Norfolk, Virginia, USA. ACM, New York, NY. DOI:http://doi.acm.org/10.1145/971300.971308

Largent, D. L. (2016). Measuring and understanding team development by capturing self-assessed enthusiasm and skill levels. ACM Transactions on Computing Education (TOCE), 16(2), 1-27.

Walker, E. L., & Slotterbeck, O. A. (2002). Incorporating realistic teamwork into a small college software engineering curriculum. Journal of computing sciences in colleges, 17(6), 115-123.