During my time as a student at University at Buffalo (UB) between 2015 to 2019, I extensively participated in the computer science student community. At the beginning, I was that bright-eyed first year, eager to sign up for everything that even remotely seemed interesting. At UB, Association of Computing Machinery is the undergraduate computer science club. I became more involved towards 2017 to 2019, where I was elected and served as the club president. I was in the front row seat of seeing all the ways a community could form and function.
A few factors made building a community for student technology enthusiasts at UB possible:
These factors made sense that a community with can form fairly organically and address some of the gaps and demands from students. We later formalized the club's mission to offer resources to student peers on succeeding in the industry path. "Computer science by students for students".
It's hard to define the success of a community, as purpose and perceived value are very subjective. Reflecting back, I think the team did really well overall given the environment and constraints we had to work with. The following metrics give a rough idea of how things went.
The canonical four year undergraduate experience introduces a particular quirk in the lifecycle of a student club. The upper bound of the time that someone will participate in a club is based on how long they are in the undergraduate program. People generally volunteering in an official leadership position, think people who can use the school corporate card, generally hold it for one to two years. The top level challenges include:
UB is a public research university, so there is guidance for students who want to participate in research labs and independent studies. Its computer science classes tend to lean towards computational theory, and although there are some applied software engineering electives, there is no software engineering track or degree.
There are fewer resources for students interested in finding a job in industry, or at least getting exposure to post-degree career options. These circumstances together means there is a demand for consistent, student-focused, practical software engineering-related activities. An opportunity to expand and better connect a community with common interests.
We took an approach to run events at a consistent cadence throughout the semester and in the same rooms. Scheduling the rooms ahead of time made logistics more difficult upfront, but promoting the events were a lot simpler, as well as with being able to dedicate a space for the community. These events weren't just hosted by the chapter leadership, but also by people who just so happened to volunteer. Some examples include:
A few parts of the community operate in a positive feedback loop. Activities such as running workshops, presenting tech talks, offering interview prep, and hacking on new projects have self-motivated students who find them interesting. They want to find, or sometimes even help, their peers. Students also learn to develop their technical skills through coursework and internships, which means topical experts in many aspects of software engineering likely exist within the student population. On the other hand, making the connections and organizing the logistics for these events are a challenge. Project management and operational skills are incredibly complementary to the technical skills that the chapter is focusing on, but the formal computer science coursework prepares little in these aspects in the first few years of the curriculum. Although we may not be experts, here are a few formulas to maintain some degrees of consistency on the chapter's function across the years.
For UB ACM, continuity means documentation and onboarding new leaders. It's also important to acknowledge that continuity doesn't mean keeping things exactly the same. The community should change and adapt to new interests over time. However, at the very least the institutional knowledge shouldn't be lost from year to year. Here were some of my approaches.
Creating tools like rundown checklists for events, templates for posters and presentations, and general logistical guides (filing for a food permit, staying compliant with student association requirements, booking spaces, etc.) are ways to improve continuity of the chapter's mainstays. UB provides GSuite to all students, so these artifacts are located in a shared Google Drive folder.
Encouraging students to participate, especially in volunteering for events, is also another way to build context and attract potential future organizers of the chapter. Of course, a volunteer student club can only continue to prosper with new volunteers beyond the years. Explicitly stating that the community has an open invitation for volunteers early, like during general interest meetings, can help reduce the barrier of entry to participating in an organizational capacity.
Working with the school faculty can greatly help reduce operational complexity and drastically improve the organization's access to school resources. The school faculty at the end of the day may not be the most active party in establishing a grassroots student community, but overall the school's incentives are aligned with creating value for students. People who work at the school tend to stay longer than the students, so establishing norms and processes with them helps with distributing organization knowledge for the long term.
For UB ACM, key points of contact included the chapter's advisor, the computer science and engineering department director, and the School of Engineering and Applied Science Student Affairs office. They can help demystify the school's organizational structure, validate ideas, make connections with the right people, and help with navigating and executing complex requests. For example, situations that they helped us with include
Not everything went smoothly, and I wasn't perfect while I was at the helm of the chapter. There's a lot to list if I wanted to point out what went wrong, but if I had to pick one thing to change, I wish I focused on defining better success metrics and finding ways to measure it. If UB ACM is a community focused on helping students develop software engineering as a career, then it should be able to answer some basic questions like:
Being able to answer these questions would make it easier to see the organization's impact quantitatively, and make it easier to justify chapter expenditures and raise sponsorship money. Ideas varied in quality and ambition, like creating surveys for students and alumni to optionally self-report on their career interests and progression, or building a unified student organization web application that collected resumes and recorded event participation. However, I was unable to make substantial progress in this area before I graduated.
Building a community is difficult, and there's a lot of trial and error. I think my participation in UB ACM during university improved my software engineering skills, allowed me to practice in working with peers and faculty in a semi-professional setting, and gave a lot of insights in analyzing organizations. I hope the leadership team and volunteers' hard work in making UB ACM all come together made a positive impact on my peers at UB.
October 25, 2021
Are the articles up-to-date or still relevant? Explainer here →