The Funniest Class I had this Semester

16 Dec 2025

Introduction

At first glance, ICS 314 may appear to be a course focused mainly on web application development, especially given its emphasis on modern tools such as React, Next.js, and cloud deployment platforms. While these technical skills were an important part of the course, the deeper purpose was to introduce core software engineering principles that apply across many types of software projects. Software engineering is not just about writing code, but about designing, managing, and maintaining complex systems in a structured and ethical way. This essay reflects on what I learned about software engineering in general by discussing Agile Project Management, Configuration Management, Design Patterns, and Coding Standards, and how these concepts extend beyond web application development.

Agile Project Management and Issue-Driven Project Management

Agile Project Management is an approach to managing software projects that prioritizes flexibility, incremental progress, and continuous feedback over rigid long-term planning. Rather than attempting to build an entire system at once, Agile methods divide work into smaller tasks that can be completed, reviewed, and adjusted over time. In ICS 314, we employed a specific Agile method called Issue-Driven Project Management (IDPM). IDPM organizes all project work into “issues,” which are clearly defined tasks such as implementing a feature, fixing a bug, or improving documentation. These issues are tracked and managed using tools like GitHub. One of the key insights from this course is that IDPM can be applied far beyond web application development. For example, in a non-web project such as a data analysis pipeline or a research collaboration, issues could represent data cleaning tasks, analysis steps, or report sections. IDPM provides transparency, accountability, and steady progress, regardless of the type of software or project being developed. This approach also reinforced the Mythical Man-Month principle, which states that adding more people to a project does not necessarily make it faster; effective coordination and task organization are more important.

Configuration Management and Version Control

Another essential concept introduced in this course is Configuration Management. Configuration Management is the practice of systematically controlling and tracking changes to a software system over time. This includes managing source code versions, development environments, dependencies, and releases to ensure consistency and reliability across all aspects of the project. In ICS 314, we practiced configuration management primarily through version control, which records code changes and enables multiple developers to work on the same project without conflict. Configuration management is not specific to web development. Any long-term or collaborative software project—such as embedded systems, desktop applications, scientific software, or enterprise systems—depends on proper configuration management. Through this course, I learned that configuration management is what allows software to scale, remain stable, and be maintained over time, even as requirements change.

Design Patterns and Coding Standards

The course also emphasized the importance of Design Patterns and Coding Standards. Design patterns are general, reusable solutions to common problems in software design. They describe proven ways to structure software so that it is easier to understand, extend, and maintain. Coding standards are agreed-upon rules for writing code, including formatting, naming conventions, and structure, which help ensure consistency across a team. In ICS 314, tools such as ESLint were used to enforce these standards automatically. Both design patterns and coding standards apply to all areas of software engineering, not just web applications. Whether developing operating systems, mobile apps, or enterprise software, these practices make it easier for teams to collaborate and for software to evolve. They reinforce the idea that software engineering is a collective effort rather than an individual one.

Conclusion

In conclusion, ICS 314 taught me that software engineering extends far beyond the technical details of web application development. By learning and applying Agile Project Management through Issue Driven Project Management, Configuration Management, and Design Patterns and Coding Standards, I gained a broader understanding of how successful software projects are planned, executed, and maintained. These concepts apply to many different project contexts and have fundamentally shaped how I approach software development as a software engineer.