I started college with the broad intention of becoming a software engineer, but through many project experiences, I’ve discovered that I can invest myself more fully into projects which I find interesting or which require ingenuity and creativity. During Fall Semester 2023, I completed 3 courses primarily consisting of semester-long group projects as well as an independent study on cybersecurity. While all of these courses were worthwhile and educational, I found myself preferring some over others, which has helped me develop a better idea of the type of work I might like to explore in the future. Regardless, I love every project I work on, and I enjoy the process of software engineering itself. I am glad to have been able to get so much experience with it in a single semester.
One course I took this semester was Software Engineering 2 (ICS 414). This course primarily consisted of modernizing and improving a web application that was developed by a prior class. During this course, I worked within a group of 7 people, which is the largest group I’ve been a part of for a school project. Throughout this project, we would conduct weekly code reviews every Monday at 9 AM as well as present project milestones in class every other Wednesday. Besides these scheduled meetings and presentations, we conducted all of our communication through a Discord server which we created for this project. The version control we used was Github, and we implemented issue-driven-project-management (IDPM). Most people in our group had not known or worked with each other before, but internal friction was low, and the project ended up being a success. Though the hard work and collaborative efforts of our team played a major role in the completion of this project, I found greatest value in our team’s project management strategies.
Weekly meetings: The code reviews were an invaluable process which ensured everyone within the group was on the same page regarding coding standards. It was also a good time to ask questions, so we could all learn from each other and fill in our individual knowledge gaps in the tech-stack.
IDPM: The system of creating issues and resolving them on individual branches was an effective way of dividing work amongst a large group and catching any errors that were made. This system allowed for people to contribute to the same project simultaneously with minimal interference with each other. Our team also made use of pull-requests, requiring that all changes were reviewed by another teammate before getting merged into the main branch.
Testing: I’ve previously struggled with implementing testing as a part of my projects. This is because it can sometimes feel like as much work as developing, but it doesn’t immediately provide tangible results. I’ve come to better understand how testing is a vital aspect of software development, and needs to be implemented from the beginning of any project.
The task of developing any piece of software is a large enough one that it will usually require collaboration among multiple people. Working in a group by its very nature poses challenges which aren’t present in individual projects. I believe that these challenges can largely be alleviated by implementing a communication strategy and good project management. The strategies which I found particularly valuable were regular code reviews and IDPM. These are practices which I would implement whenever possible for group projects of any size due to their effects on easing collaboration and maintaining code quality.