
Before taking ICS 314, a Software Engineering class, I didn’t know much—if anything—about Software Engineering. I had the basic assumption that most people have: that it’s all about writing code from scratch and building things from the ground up. But I quickly learned that this wasn’t the case at all, given how advanced and developed the field of Software Engineering has become over the years. I already knew that premade code existed—libraries, for example—and understood that import statements bring in code someone else wrote. But in ICS 314, we worked across the semester to build websites, and at first, we were taught the fundamentals. We learned how to use TypeScript, JavaScript, and HTML to do basic exercises similar to previous programming classes. Then we moved into full-fledged website development using provided templates and progressed through modern web development technologies—starting with Bootstrap, then React, and finally Next.js. I learned not just how to use these tools and languages, but also how to collaborate in a team development environment—a critical skill for any programmer. I’m especially glad this was emphasized in the course because I believe it’s the most important skill I’ve learned in college so far.
As I mentioned, throughout ICS 314 we used templates to aid our development. Templates themselves aren’t exactly design patterns, but what was inside them introduced me to the value of good design patterns. A design pattern is a general solution to common problems in software design. It serves as a reliable blueprint that developers can follow, accelerating development and improving structure. One key design pattern we worked with was through the Next.js GitHub template. This template provided a clear, practical example of how to do multiple things in Next.js. We used it for homework, classwork, and even our final project. Everyone in the class used it because it was that useful—it gave us reusable solutions for database interactions, component structure, and more. We each customized and extended the template to build our unique websites. Though I didn’t design my own patterns from scratch, I learned how powerful and reusable a good pattern can be. In my ideal field—game development—I could apply these lessons by creating base character models or environment templates, which I could then reuse and adapt.
Something I didn’t expect to learn in ICS 314 was Agile Project Management—specifically, the style known as Issue-Driven Project Management (IDPM). In general, Agile project management is about organizing work iteratively in a flexible and collaborative way. IDPM is a variation where the work is broken down into individual tasks, or “issues,” and each one is assigned to a specific team member. An issue is just a task that needs to be done before a deadline. You can start with broad tasks, and then break them down into smaller refinements—like improving individual pages rather than just setting them up. In IDPM, every member has their own set of clearly assigned issues, which ensures accountability and prevents overlap in responsibilities. This boosts overall efficiency.
Issues are usually tracked using three states:
This approach taught me a project management skill that I wish all group projects would use. In regular group work, unclear expectations often lead to uneven contributions. But with IDPM, as long as the issues are clearly laid out and assigned, everyone participates, knows their role, and things run more efficiently.
Everything I’ve learned in this class has been vital to my growth—not just as a developer, but as a teammate. It’s taught me how to work more efficiently, adapt to team environments, and write code that considers others, not just myself. I’ve learned the value of structured development, and how design patterns and IDPM (or any form of Agile management) can help me write cleaner, smarter, and more maintainable code. These lessons will stay with me, whether I continue down a software engineering path or branch into other professional fields.
The essay above used ChatGPT for spelling and grammar corrections/suggestions.