Creating Course Community

2021-07-09
20 min read
I'm recruiting a Ph.D. student. Find out more here.

Recently I was invited to participate in a summer teaching workshop run by our Academy for Excellence in Engineering Education (AE3). I was asked to help lead a session on the topic of “Building Community in the College Classroom”. To be honest, I was a bit taken aback at first by this invitation. I’m really proud of a lot of things about my course, but course community would not have been high on my list. It might not have even made the list!

But once I started thinking about it, I realized that this was a case where outsiders—AE3 leaders Jay Mann and Chris Migotsky—had identified something about what I was doing that was actually really important but that I hadn’t yet recognized or at least identified in the same way. So I’m going to share some thoughts on how we’ve created a community in my CS1 course. Hopefully you find a few of these tips useful.

Part of why I was taken surprised when the community surrounding my course was identified is that I don’t think that building a community should be seen as a primary goal for any course. I don’t think that every course needs a community, or at least not the kind of community that requires effort to build.

Whether you build course community should be determined by your learning goals

Every course will naturally create some community. Maybe it only extends to a small number of staff, and maybe it doesn’t outlast the single semester in which the course is taught. That might be completely OK! Whether you build course community should be determined by your learning goals and how the community contributes to student success. It’s not required, and if it’s not the best way to improve your class, work on something else.

Let me pause for a minute to make an important distinction. During the COVID year(1), there was some pressure on courses to try to facilitate social communities among students. A lot of administrative hand-wringing seemed to attach itself to the idea that without in-person classes to attend, students would have no way to meet each other and make friends.

I don’t deny that residential life offers college students a lot of ways to expand their social networks. But I think that the role of classroom contact—and from large classes in particular—in this process is usually exaggerated, compared with all of the other ways students have to meet—roommates, meals, extracurriculars, events, parties, shared spaces, and pre-existing friendships. This is why, had it been up to me, I would have followed Harvard’s model and brought as many students back to campus as possible to recapture some of the benefits of residential life, but kept instruction online.

But without residential life, a lot of the benefits of residential life just weren’t going to happen. I suspect that students did their best to connect with each other virtually. I also suspect that this produced fewer meaningful connections than had they been colocated on campus. Residential life really is a central part of the college experience, and not something that we can or should move online. Students are clearly eager to get back to campus this fall, and I’m excited about that too. But I think they are mostly excited to get back together, not to get back to classrooms.

Students will have a chance to restart their social relationships once we return to campus. But any educational gaps will to haunt them for years to come.

The emphasis on building social communities as we prepared for COVID was doubly-frustrating given that many courses—including mine—were working hard to figure out how to meet their educational objectives and didn’t need the distraction of yet another task. I chose to focus on changes and improvements intended to meet my course’s learning goals, stay in my lane, and largely ignore the ambient push to turn my class into a first-year social mixer. Students will have a chance to restart their social relationships once we return to campus. But any educational gaps will to haunt them for years to come.

At the end of the day, more students than ever took my course over the past year, and as a group they did better than ever before. They may have fewer friends, but I’m not sure we could have really done anything about that. But they should know basic computer science.

I’ll also note that my course involves very little collaborative work done by students. I think that’s appropriate given the subject matter, the level, and in the context of our overall approach—which is highly-interactive but with the interaction taking place with our materials, not with other students. Some courses rely on building small communities(2) within the classroom as a way to encourage students to interact with the material. We don’t really need to do that as much. And, given that the course was delivered entirely asynchronously during the COVID year, we also had no synchronous lectures or other meetings set aside for group work.

For Fall 2020 we did experiment with filling our calendar with a large number of office hours, which we imagined might create opportunities for students to form study groups and work together. But that effort turned out to be a huge failure—those office hours went almost entirely unutilized and were and dropped for Spring 2021. If students needed to form study groups to succeed in my course, they must have found ways to do so without our help. Count me as incredibly unsurprised.

Building a course staff community is almost always a much more effective way to support course learning objectives.

But if the way that the course succeeded wasn’t due to building social community among students, it was in large part due to having created a great community among the staff. Building a course staff community is almost always a much more effective way to support course learning objectives. A welcoming staff community can also help create a sense of community among students. Even those that don’t choose to actively participate in that community get the sense that the course is a good place to be.

Compared to students, staff are much more likely to form a natural community. Students are constantly arriving and leaving, while staff stick around longer. Student motivations for taking a course can vary significantly, while staff are usually motivated around the idea of helping students learn. So staff more likely comprise a stable group with common interests—almost like a student organization.

Thinking about your course staff as a club can be helpful, since a lot of the things that clubs do to help create community work equally well for course staff. We’re starting with a shared mission—to help students learn. Courses also tend to provide built-in events for staff, like holding tutoring hours and running review sessions.

What else do we need? How about:

  1. A place to meet
  2. Good leaders and leadership opportunities
  3. Shared values
  4. A visible identity
  5. Criteria for membership and advancement
  6. Community decision making
  7. Opportunities for members to make meaningful contributions

Let’s go through each of these briefly in turn, and I’ll share what I’ve done in my course to support each community-building objective.

A Meeting Place
A Meeting Place

A meeting place could be either physical or virtual. Today it’s probably best to have both. During face-to-face semesters, my staff are heavily involved in running our tutoring space, which is open to all students for long stretches each day. During the pandemic, we moved this activity online, creating a novel help site that allowed students to receive one-on-one assistance while allowing staff to efficiently handle with large groups of students.

But a bigger part of this for my course is our course forum.

But a bigger part of this for my course is our course forum. I’ve written about why Piazza is not a forum. While it may support Q&A—although I tend to think of it as enabling answer extraction—Piazza is particularly poorly-suited to serving as a community meeting space.

Discourse, which we use, is designed to create community. And it does. We set up private topics for staff to communicate with each other, and for discussions of course policies and community decision making. I also know that my staff have set up a separate Discord server for their own use, which is fine by me. Discourse is the official forum and shared with students. So being on the forum feels like being on duty, and they deserve a place to blow off steam and connect privately.(3)

Leaders and Leadership Opportunities
Leaders and Leadership Opportunities

When I took over CS1 in 2017, the course already had a great staff community of several hundred students who signed up to help students in exchange for course credit as part of a training program. What it didn’t have were opportunities for leadership and advancement. And when you don’t have leadership opportunties, you don’t have leaders.

Circa 2021 we now have three levels of undergraduate course staff positions. We still allow anyone who completes the course to enter a staff training program for course credit in the following semester. However, in addition to those staff-in-training (Course Assistants), we now have two new tiers: a large number of paid staff (Course Associates) and a few leaders (Head CAs).(4) To provide some sense of the numbers involved, in the fall for a class with ~1200 students we would usually have between 100 and 200 Course Assistants, 30–60 Course Associates, and a handful of Head CAs.(5)

This has worked out really well for many reasons. From the perspective of staff community, it has created leadership and advancement opportunities. This encourages good staff to stick around, and allows us to value and incorporate the wisdom that returning staff provide as they gain experience and confidence.

However, regardless of how many levels you create in your staff hierarchy, it’s important to remember that the instructor is always the ultimate course leader and responsible for setting an example for the rest of the staff to follow. You can and should delegate as much as you can to staff that you trust, and try to make decisions as a community. But the buck stops with you.

Shared Values
Shared Values

On some basic level my staff are united by their desire to help other students. On its own, this is already quite special. I don’t know if it’s unique to computer science, but I have always felt that my field is in certain ways uniquely supportive of new members. It’s also really rewarding to see students who have learned just a bit themselves ready to pay it forward so quickly. My staff also do learn a lot from helping students, but I think their primary motives are altruistic.

But past that point, with the support of great leaders, we’ve also worked together to develop shared values that reflect how we help students learn:

Some of this is written down. Some of it is passed down. But we do try to create a shared sense of the values we want our community members to uphold.

Branding and Identify
Branding and Identify

Branding is easy. Does your course have a logo? Create one! Better yet, have your staff run a logo competition.

Once you have a logo, put it on your website. And on your forum. And on your printed materials. If you have the funding, print it on things and give them to your staff and students. Stickers. T-Shirts. Hats. Masks. Nametags to wear when helping students. Give your community a banner to rally around. And trust me—particularly if you teach a large course, you’ll see these totems around for years and years, some in the most unlikely places.

Photo of a CS 124 branded rubber duck.
Rubber duck debugging.
It’s a thing!

You can have as much fun with this as your budget can sustain. Personally, I have 2,000 rubber ducks with the logo for my new CS1 course waiting to be distributed next year. I also have a neon sign with the logo for my old CS1 course sitting at home.(6)

It’s also critical to enumerate who is on your staff. Put them on your website so all your students can see them. And try to keep old members visible for as long as you can.

Membership and Advancement
Membership and Advancement

Communities are at least partly defined by what it means to be a member. When establishing a staff community you’ll want to consider what’s required to join, what’s required to maintain membership, and what kinds of things mark a member as someone worthy of more responsibility or leadership.

I teach an introductory course, and one of our most important community values is being welcoming. We extend that to our staff. Anyone who completes my course is eligible to join the course staff and be trained as a Course Assistant. We do not consider the grade that a student earned. I think that students who struggled frequently make better course staff. They are definitely more able to empathize with other students who are struggling.

However, while we welcome everyone to join the course staff, we do have expectations for staff members. Unfortunately, we haven’t always been good at enforcing these expectations. In the past I was too willing to just ignore staff who stopped showing up for their shifts or other responsibilities. This was at least partly because it was hard to quantify. But also because I was worried about how it would go over if we started dropping people.

For staff who are showing up and putting in the work, freeloaders devalues their efforts.

Moving all of our support systems online for COVID made everything much easier to quantify. And so, for the first time last spring, we dropped a substantial number of Course Assistants midway through the semester. We only removed staff who had pretty literally done nothing up to that point—hadn’t helped a single student, or contributed any content to the site. Overall the process went smoothly. For staff who are showing up and putting in the work, freeloaders devalues their efforts. I anticipate that we’ll continue to monitor and uphold our expectations for staff going forward.

Quantifying staff work with students has also made it a lot easier to identify who to move into paid roles and leadership positions. And I’ve also been very happy to find that this approach has naturally led to a remarkably gender-balanced group, even if we are still struggling with other aspects of diversity.

Community Decision Making
Community Decision Making

Part of what makes our staff community effective is that we make decisions together. Pretty much every change we’ve made to the course—large and small—has been proposed, debated, and discussed on our forum.

Don’t worry: I’m still in charge.(7) There are times when I propose something that we are probably definitely going to do, and so I’m not really asking for help making the decision. But it’s still really valuable to hear input from staff, because they tend to be very good at predicting how students will react, and helping us prepare for the process of making the change.

At other times I’m genuinely curious about something and toss ideas out there just for us to bat around. Sometimes I’m intentionally moving the Overton Window to prepare the ground for a future change I can already see coming. Staff can and do get attached to the course, and to the ways that we did things when they took it. I try to preempt this when we bring new staff into our community by reminding them that the course will grow and change and try to improve and they are expected to embrace and support these changes. Not every change ends up representing an improvement, but if we don’t experiment, we can never improve.

On the other hand, there is a limit to the speed at which the course can change. It’s big, important, complicated, and built on top of sophisticated infrastructure. Sometimes changes that staff propose are good ideas but just can’t be done on the time scales they expect—particularly once the semester starts and I’m loath to make potentially-damaging changes to systems that are under continuous use. I’ve gotten better about explaining this, and also at pointing out cases where changes proposed by staff eventually did get made once we had the time to successfully execute them.

There have also been times when staff have pushed me in uncomfortable directions and forced me to change things about the course that I liked and thought were working. I can be stubborn! But generally these challenges come from senior staff, which gives them legitimacy and helps me consider them carefully.

Contribution Opportunities
Contribution Opportunities

My staff have lots of ways to contribute to our shared goal of teaching computer science to thousands of students each year. They have primary responsibility for almost all student contact, including staffing our drop-in tutoring hours, holding online office hours, and answering questions on the forum. Staff also review all course content and assessments before they are completed by students. These are incredibly valuable activities, and I think also deeply rewarding for course staff.

However, over the past few years I’ve also been working to create opportunities for larger numbers of staff to make more permanent contributions. We’ve always had small numbers of more motivated course staff involved in developing materials, building and maintaining course systems, and analyzing data generated by the class. But it’s been hard in the past to involve more than a handful of students in these activities. Typically they require a pretty deep commitment by the staff member, and a high level of trust on my part that what they contribute will be something that we can deploy to thousands of students. I also just don’t have a huge amount of time to supervise student work.

So I’ve been particularly excited by two new projects that have opened up new opportunities for large number of students to make smaller contributions—rather than requiring a large contribution from what ends up being a smaller number of students.

The first opportunity is highly-visible on the lessons on our course website. As part of the process of transforming the course to be taught asynchronously online during the pandemic, we created a system allowing staff to record small live coding demonstrations. These are heavily used by our new online lesson format: roughly 300 of these small demos are interspersed across around 75 daily lessons that take students from variable initialization to generics and stream operations.

So even the course content itself starts to feel like the work of a community, rather than one individual.

I distinctly remember developing this new tool over the summer of 2020 and realizing, happily, that the same tool that I was creating for my own use would be very easy to open up to staff. And at this point over 100 staff members have made almost 400 explanatory contributions to the course website. At this point pretty much every interactive walkthrough has at least one alternate explanation created by a course staff member to supplement mine. I don’t want to spend too much time on this particular aspect of my course, but it’s both novel and incredibly effective. And, from a community perspective, it both allows staff to make a permanent if small contribution to the course and, in doing so, significant diversify the voice with which the course speaks. So even the course content itself starts to feel like the work of a community, rather than one individual.

Sometimes creating opportunities for staff to make lasting contributions is pretty straightforward, as in the previous example. Any staff member can log on to the website and record their own explanation of any concept. It’s simple and easy.

For other types of content, things may not be quite so simple. Another exciting tool that we’ve created to support my CS1 course is a new system for rapidly authoring small homework problems. Giving students lots of practice problems is pretty much the cornerstone of our approach to teaching computer science. At the same time, keeping our online assessments fresh in the face of Chegg and other online cheating sites means being able to continuously generate new problems. And because these problems are being used on assessments, they need to be as close to perfect as we can make them the first time a student sees them.

Most CS1 courses support practice problems using standard software test suites. However, this represents a missed opportunity, since normal software testing doesn’t assume the availability of a solution. We’ve developed a new approach that builds a testing strategy from a solution and then validates that strategy using mutation to incorrect examples are rejected. Compared to writing test suites, it produces much stronger problems much more quickly.

It’s also a system that was designed for staff to use. A few have started to. But, compared with our interactive walkthroughs, I suspect that we’ll end up with fewer staff writing homework problems, since the learning curve for that system is unavoidably steeper. But it’s another way that we’ve established for staff to make lasting contributions to the class.


So that’s how we build staff community in my CS1 course. And I have to say: the staff community is probably my favorite interpersonal thing about the class. Not only does it really help make the course work, but it’s also a lot of fun for the instructors. Rather than having a completely new set of faces every semester, I look forward to seeing familiar staff back year after year, building relationships with them, and watching them grow into leadership roles and really find their voice in helping shape and run the course.

For anyone teaching a large course, this sense of staff community can also be very meaningful. It’s true that, when teaching large numbers of students, it’s unlikely that you’ll get to know any individual student that well. That can make teaching massive courses seem cold and impersonal. But what counterbalances that, for me, is the chance to interact with senior course staff. They’re my small community within the crowd of my huge course. And that alone might be enough reason for you to consider building your own course staff community.

Thanks for reading! I'd love to hear your take. Feel free to get in touch.