Originally posted on stevebrownlee.com
There are many subtle things that go into being an instructor on our team. If you look at our courses on Github (which are open source), you only get the what of the entire experience. It's simply a listing of what we teach and the order in which we do it. That's about 20% of the entire experience.
A critical part of our course that isn't recorded anywhere is the group project experience. These projects are the forging fire of student knowledge and understanding. It doesn't come from the instruction staff. We just light the fire, and the students make the steel.
We will never achieve perfection, but we must constantly strive for it, else we end up settling for mediocrity.
One of the questions on our course feedback form is, "What aspects of this course were most useful or valuable for your learning?"
185 responses out of 412 mentioned the group projects. That's 45% of alumni who responded who explicitly state that group projects were the most beneficial part of the course. If I account for the fact that some students felt that way, but didn't mention it, I believe the number would easily be over 50%.
How we construct groups has been a long, sometimes painful, journey of discovering what does and does not work in a team. Before I get into our methodology, I want to share some of the anonymous feedback that we've received over the years from students about the group projects.
Some students felt that groups comprised of people where the delta of understanding was very small were not beneficial. It was never clear on why they felt this, but we have our educated guesses.
"Also, eliminate building super groups composed of the top students in the class."
"Less performant groups are a great learning experience, but I would have liked the opportunity to see if I could play at a higher level as well, and for there to be more transparency about the metrics that go into making those decisions."
"I already said this, but I really think we could all benefit from a mix of small delta and higher delta groups."
Some students offered concrete advice on how groups should be constructed based on their own experiences, albeit not in the learning environment.
"Every group needs to have at least 4 students: a highly-skilled leader, two middle-skilled students, and one lower-skilled student - and each should have a specific job. Always. Forever. The end. Yes, this places a lot of stress on the highly-skilled leader but again, tough."
"I often wondered why formal groups weren't put together with the people we were naturally working with anyway, or why we couldn't choose our groups for at least one project."
There were students who enjoyed their group experiences. Even if the strategies were a mystery.
"The group work is great. Definitely where I got the most practical experience."
"The group projects and sprints in back-end were helpful. It was great being in a group with the same people so we could put the retros to use."
"I think we all learn a ton on group projects. I've also learned a ton from practicing the exercises on my own. I can tell y'all have spent a lot of time planning out your curriculum, and I think you've done a great job."
"I don't know what the staff's strategy was like when they were making groups for group projects, but I always felt like I was being put with new people to challenge me both as a developer and a person in a group."
For some students, it was imperative that the group environment did not interfere with their own learner experience. If the experience caused any kind of conflict, or some members of the team didn't contribute equitably, then some students felt it took time away from learning in order to help another teammate.
"We had phenomenal coders and individuals on our team. However, we had one person on our team who was not as up to speed as the rest of us. If you were fast, you would gain more experience with the projects than the slow members."
"It's much more difficult to learn a programming language than it is to learn how to work in groups, or to adapt to a specific workflow. We should not be spending that much time working in groups and experience the agile methodology."
The absolute worst possible group environment is a multi-layered team, with a large delta in understanding. It is an absolute disaster.
With all of these different interests, different opinions, and different motivations, we had to find a way that served the objectives of the group project: accelerated learning, and development team dynamics. Software development teams have specialized tools and processes that students must become familiar with quickly so that they can be proficient on day 1 when they get jobs. Students must know how to appropriately communicate with each other in the cadence of building an application together.
What we have found to work, through much trial and error, is when teams are constructed with small deltas of understanding. When teammates are generally around the same level of knowledge and understanding of the concepts being learned and have the same current ability to research and apply new knowledge, then the learning objectives are achieved with efficiency.
There are some subtle flavors to this recipe as well.
If the learning objectives for the group project are few and/or closely related, then having very small deltas provide the best possible experience. Everyone can move at the same, relative speed throughout the project and overall understanding is achieved the vast majority of times. These group projects last 1-2 days.
If the learning objectives are many, or are not closely related, then slightly broadening the delta works better. Since these groups projects take longer (3-5 days), bringing people who can learn, teach, and grow with each other as they explore the concepts more deliberately increases understanding.
The absolute worst possible learning environment for our group projects is the configuration suggested by one of our students above - a multi-layered team consisting of one student with high understanding and an abstract mind, mixed with a few with lower understanding, and one or two that need considerable help, time, and mentorship to gain basic understanding.
It is an absolute disaster.
The students who want to move quickly get nothing done because their time is completely consumed by teaching fundamental concepts to their teammates. They don't actually get to spend time increasing their own knowledge on the concepts.
The students who require help likewise achieve nothing because significant time gets consumed on increasing understanding on more fundamental concepts, rather than the objectives of the current project. They are thrilled to have direct access to someone who can help them, so the distractions from the learning objectives keep piling up because their questions are myriad.
One teammate had personally received feedback from some students about their feelings when they see a team comprised of people who all clearly understand the concepts more than the rest of their peers.
"I think a fair number of them don't actually want to be in the "supergroup" (although obviously, some do) -- it's more that the super group draws attention to the fact that the high flyers exist. One student said they imagined the high-flying group was "breezing through it" (not true) after seeing their finished product, which made them feel worse about their own process."
Another teammate offered more feedback from listening to other students.
"The context is typically 1) that it is clear that there is an ‘A’ team, making the rest ‘dud’ teams in their minds 2) that it is an odd allocation of resources, as though a company had development teams were comprised of all juniors and others with all seniors 3) that it actually portrays that human fear that people are judging you and putting you in a box because of your limitations (or perceived limitations)."
It does seem counterintuitive given most people's experiences in their lives with groups. However, our focus has to be on giving learners the best environment for learning. Not for getting the most work done. Not for ensuring a misguided sense of fairness.
Maximum learning is our objective.
Given this feedback, then it's clear that some students are being completely overwhelmed by their fixed mindset, and that we must continue to help students attain a growth mindset. Students in a growth mindset see everything as a learning opportunity and applaud their teammates for their successes.
Conversely, one of the common traps of being trapped in a fixed mindset is seeing other people's accomplishment as a threat to your own success instead of being happy for them. Not everyone falls into the trap. It may be a fleeting, emotional, knee-jerk reaction, and then the reasoning part of your brain suppresses it.
Another trap is seeing other people surpass you in understanding, which leads to a student feeling they must be "stupid" by comparison. If someone is learning faster, they start to beat themselves up that they aren't smart enough, or good enough. It's a dangerous road because no matter how much we say that the difference between them is minimal, any difference can be misinterpreted as a deficiency that will be exposed when they start the job hunt.
Of course, neither of these cases are factually true, but the emotions are brutally real and we find ourselves constantly coaching students to battle those feelings, and own their own journey with a sense of pride and accomplishment.
We still have many experiments to run, and we need to constantly hone our craft of team building. We will never achieve perfection, but we must constantly strive for it, else we end up settling for mediocrity.
One major struggle we still have is how to provide the best environment for those students who still need significant coaching and time to work on concepts when it is time for a group project. Putting those students into their own group, simply because the delta is small, hardly ever works, and yet we haven't devised a strategy that does work.
This group of students gets frustrated trying to do even minimal work since their level of understanding at that moment is so low. This leads to an entire group of people who don't know how to start, how to design and organize their project, and get tripped up at the smallest obstacle. We need to find a way to help these students.
- Pair programming
- Individual projects
- Live-coding and discussion with the instruction staff
These are all strategies that we will be attempting in the coming months to help set all of our students up for success.
People are hard. Teaching the tech is the easy part.