At the time of writing this essay, my time as an undergraduate student is coming to a close. There were many experiences that I partook in and knowledge that I’ve gained over the years. But as a means to end my undergraduate studies, one of the last classes I decided to enroll in was ICS 414 (i.e. Software Engineering II) in order to help bring a non-profit organization’s idea of a website to fruition. It was through this opportunity that I was able to gain valuable skills that I will certainly carry with me to the start of my career.
The objective of 414 was straightforward: work in a team of 6-7 to deliver a functional website based on the requests of a customer. In our case for the Spring 2022 semester, our customer was a non-profit organization called Volunteer Ally. Their vision was to have a website where volunteers can easily sign up and register for an opportunity that is set up by approved organizations; volunteers can also have their hours tracked while organizations can easily manage those that are registered for their events. With these plans in mind, it was up to us in the class to deliver a site that would meet their expectations.
To fulfill such a request, our tech stack consisted of tools such as Meteor, Node.js, React.js, MongoDB, and Semantic UI which were previously introduced in pre-requisite courses such as ICS 314 (i.e. Software Engineering I). We also used the Agile Project Management system as a means to manage the work between me and my 5 teammates. Most of these tools and practices were familiar based on past experiences, however, there were a few changes and additions that were made to satisfy the needs of our customer. For example, due to the structure of our repository, stateless React components were expected to be functions instead of the classes that were mainly adopted in pre-requisite courses. We also had unit and integration testing within our created MongoDB collections and Meteor methods to ensure that the back-end data could be properly manipulated and handled. Initially, I was unsure if I would be able to work with these adjustments as it felt like it twisted the tech stack I was normally used to. Yet, over time, I got used to the changes as they deepened my understanding of a tech stack that I have grown familiar with.
Besides working with familiar tools, delivering a website for Volunteer Ally also brought along new experiences that I appreciated going through. Some of these experiences included initiating reviews with my team to improve the project’s code as well as presenting our developments of the website to the customer in order to receive feedback. However, one notable learning experience was exploring the world of open-source work and understanding the means to integrate them into our repository. During my undergraduate studies, the thought of scouting out new open-source packages or software was mainly unspoken of, yet our customer’s requests led us to look for external means to help develop the features that they sought. For example, we were tasked with implementing a map with functional markers as well as implementing a means to effectively upload profile images. Our current set of packages at the time didn’t have the means to sufficiently provide such features and thus we were naturally drawn to exploring npm. There we found packages such as a React map API for MapBox alongside an image uploading system called FilePond that would help expand what our team was capable of building. These new tools ultimately enhanced our current tech stack and added new flair to my team’s version of the Volunteer Ally website.
However, working on this new project also brought forth its own set of challenges that I eventually had to overcome. Some of these challenges involved developing various features from scratch such as the registration process that volunteers would have to go through to sign-up for an event. The solutions to implementing these features were not exactly clear cut and thus I had to be resourceful and further understand my available tools. Another challenge that my team had was implementing the ability to track how many hours a user has volunteered. Unfortunately, this was a feature that we were unable to implement, but I believe this is something that occurs at times when developing in a limited time frame; occasionally, not all features can be delivered. Yet, despite this one setback, I believe that we had more successes than defeats in the challenges that were presented.
Ultimately, this software engineering course was an invaluable experience as it was not your typical lecture style of learning. Instead, it was a style of learning that involved working with a real-life customer that expected a functional product; the time spent was akin to working in an actual software development job. As such, delivering the final iteration of my team’s version of the website armed me with the skills and knowledge on how to navigate through my future career in addition to reminding me why I enjoy software engineering as a whole.