What I Learned About Software Engineering in ICS 314

15 Dec 2025

Introduction

When I first enrolled in ICS 314, I thought the class would mainly teach me how to build web applications using modern tools like React, Next.js, and UI frameworks. While I did learn a lot about web development, I gradually realized that this class was really about software engineering as a discipline, not just about making websites. Software engineering is about how software is planned, built, maintained, and improved by people working together over time. The technical stack was just the environment used to practice these ideas.

In this essay, I reflect on what I learned about software engineering beyond web development by focusing on Open Source Software Development, Configuration Management, and Agile Project Management. These concepts are not limited to web applications and can be applied to many different kinds of projects, including game development, desktop applications, and even non-software team projects.

Open Source Software Development

Open Source Software Development refers to a model where the source code of a project is publicly available, and anyone can view, use, modify, and contribute to it under certain licenses. Before this class, I used open source software all the time, but I did not really understand how it was developed or maintained.

Through ICS 314, I learned that open source is not just about “free code.” It is about collaboration, transparency, and shared responsibility. Contributors communicate through issues, pull requests, and code reviews. There are coding standards, contribution guidelines, and automated checks to ensure quality. Even though contributors may be strangers, the project can still function effectively because of clear processes and shared norms.

This concept goes far beyond web development. For example, in game development—which is my dream career—many popular engines, libraries, and tools rely on open source components. Understanding how open source projects work makes it easier to contribute responsibly, report issues clearly, and work within large distributed teams. Even in non-software contexts, the idea of open collaboration with shared rules can be applied to research projects or community-driven initiatives.

Configuration Management

Configuration Management is the practice of systematically managing changes to software and its related files so that the system remains stable, reproducible, and understandable over time. In this class, configuration management showed up through tools like Git, GitHub, package managers, and environment setup.

At first, I thought Git was just a way to save code online. Over time, I learned that configuration management is really about controlling complexity. Version control allows teams to track changes, revert mistakes, experiment safely using branches, and understand why certain decisions were made. Dependency management ensures that everyone on the team is using compatible versions of libraries, reducing “it works on my machine” problems.

This idea applies to many types of projects beyond web apps. For example, in a large game project, configuration management is essential for managing assets, code versions, and builds across multiple developers. Even outside of software, configuration management principles can apply to document versioning, experiment tracking, or any project where changes happen frequently and need to be carefully controlled.

Agile Project Management

Agile Project Management is an approach that emphasizes iterative development, frequent feedback, and adaptability to change rather than rigid long-term planning. In ICS 314, we practiced a specific Agile style called Issue Driven Project Management, where development work is organized around clearly defined issues.

In Issue Driven Project Management, tasks are broken into small, manageable issues that describe what needs to be done, why it matters, and when it is complete. Progress is visible, responsibilities are clear, and the team can easily adjust priorities as new information appears. This method helped me understand that good project management is not about finishing everything at once, but about making steady, measurable progress.

I can easily see myself using this approach outside of web development. For example, in game development, features like character movement, UI systems, or AI behavior can each be managed as issues. Even for non-software projects, such as organizing an event or managing a business process, breaking work into issues with clear ownership and goals can make collaboration much more effective.

Conclusion

ICS 314 changed the way I think about software development. Instead of seeing programming as just writing code, I now see software engineering as a combination of technical skills, teamwork, communication, and disciplined processes. Open Source Software Development taught me how large groups can collaborate effectively. Configuration Management showed me how to manage complexity and change over time. Agile Project Management helped me understand how to organize work in a flexible and realistic way.

Although this class used web applications as its main platform, the lessons I learned apply far beyond the web. These concepts will be valuable in my future career, especially as I work toward becoming a game developer and contributing to larger, long-term projects. More importantly, this course taught me how to think like a software engineer, not just how to write code.