https://github.com/freyalaluna/Asynchronous-Chess-App
This was my term project for my Software Design course, built by a team of myself and four other students. At the start of the semester, we were tasked with creating a full-stack application based on the requirements given by our “customer” (i.e. our professor) written in plain English, essentially tasking us with building a web application that allowed for users to play games of chess with each other asynchronously. Over the course of the first month, we were told to not do any sort of coding, instead spending that time focusing on Agile planning. Over the course of several meetings, we turned our customer’s requirements into more actionable user stories with story points assigned to each. After we had parsed all of that, we turned our attention towards creating design artifacts that would guide our future development, namely UML diagrams for our backend and UX rapid prototypes for our frontend.
After the first month had passed, we switched gears into actually coding up our application using an Agile framework. Each week, we had an hour-long sprint review, wherein we detailed the successes, blockers, and our overall velocity based on the stories we had completed. Based on that, we made changes to our priorities and modified what aspects of our design each of us would focus on using a Kanban board. Moreover, every Monday, Wednesday, and Friday, we would hold short 15-minute standups to inform each other of the progress we were making. Whenever we ran into blockers, we made sure to inform everyone through our shared Discord server, and we’d often have pair-programming sessions to help each other work through the problems we were facing.
This was also my first exposure to test-driven development. Previously, I had only experienced testing through post-hoc tests built in Java and C++. Having to think about our implementation through the lens of what we initially wanted it to do, instead of checking what we expected it to do after the fact was a paradigm shift that took some adjustment. However, much like the steps we had taken to build up guiderails through our design artifacts, this served as a nice way to guide how I thought about what I was implementing, as I had to factor in what my desired outcome was for the various cases that could occur with whatever I was implementing. Moreover, as this was a full-stack application, it was also my first exposure to database mocking and frontend event-based testing.
This project was incredibly important to me as a part of my journey as a developer. It was the first major project I had tackled after recovering from a long period of academic burnout that had me questioning where my passions lied within the realm of computer science. I was eager to learn as much as I could from this project, and as such I started by assisting with the creation of our React frontend alongside another student. Out of all of our members, I was the least experienced with frontend development and Javascript frameworks, having only taken my first web development course the prior semester. However, that was exactly why I wanted so badly to do that work. In addition to doing my part in building out our Java backend, I poured over documentation and tutorials for React development to fully understand how it differed and what it added to the “vanilla” Javascript that I was used to writing. Ultimately, though, I ended up spreading myself too thin, as the added research on top of my standard university obligations gave me little time to rest. I made sure to inform my team about it, and we managed trade my responsibilities with one of the students who was working on our database and REST API implementation, as they were having similar difficulties. It was here that my passions truly began to shine. I was much more familiar with backend development, and given my past history working with SQL frameworks, I found myself energized to work in this domain. Moreover, designing APIs and learning more about how applications communicate fascinated me, and it’s become a major area of focus in my current studies as a developer.
Overall, despite running into some difficulties midway through, I’m genuinely proud of the work my team and I put in on this project. This was a major milestone for me in my professional development, and I feel like I was able to learn a ton about my interests, software design, test-driven development, and developing as a member of a team through it!