Reflecion on Software Engineering

08 May 2025

Reflecting on Software Engineering

Throughout ICS 314, I’ve gained more than just the ability to build web apps — I’ve developed a deeper understanding of the foundational principles of software engineering. This class introduced me to the mindset, discipline, and tools required to build scalable, maintainable, and collaborative software, not just websites. In this reflection, I’ll focus on three topics that I believe have lasting relevance beyond web application development: Configuration Management, Agile Project Management, and Open Source Software Development.

Configuration Management

Configuration management is the process of systematically handling changes to a system in a way that maintains integrity over time. It involves tools and practices that track and manage code versions, dependencies, and environments. In ICS 314, we used Git and GitHub for version control, which allowed us to revert changes, manage branches, and collaborate without stepping on each other’s toes.

What I’ve learned is that configuration management is essential for any kind of project — not just software. For example, in Team RoSE (our Mars rover team), we version control both our firmware and documentation using Git. Even in academic writing, I’ve used version control to manage LaTeX documents collaboratively. The discipline of keeping clear commits, meaningful branches, and synchronized states can improve any workflow that involves iterative development.

Agile Project Management

Agile is a project management philosophy centered on iterative progress, flexibility, and continuous feedback. In ICS 314, we followed a specific agile method called Issue Driven Project Management (IDPM). In IDPM, tasks are broken into small, actionable issues tracked through GitHub’s issue board. Each issue represents a unit of work that moves from backlog to done in a structured, visible way.

What made IDPM valuable was how it kept everyone aligned and focused. It made progress measurable and made sure no one was ever stuck without direction. I see myself applying IDPM to other projects — even non-coding ones — like managing tasks for a research paper, an engineering design project, or even planning an event. It enforces a level of clarity and accountability that’s helpful across disciplines.

Open Source Software Development

One of the most important lessons from this course is the philosophy and practice of open source. Open source software is software with source code that anyone can inspect, modify, and enhance. Through our Notehub Manoa project, we worked on a codebase that others could potentially reuse or contribute to.

Understanding open source taught me how to write code for others — not just myself. That means clearer documentation, consistent style, and modular design. It also means being okay with feedback and learning how to accept contributions. Whether in robotics, scientific computing, or software tooling, I now see open source as a powerful model for collaboration and innovation.

Final Thoughts

ICS 314 helped me shift from thinking like a coder to thinking like a software engineer. Web development was just the vehicle — the real lessons were about project management, collaboration, and sustainable design. These skills will carry over into any technical work I do, whether that’s embedded systems, research tools, or large-scale engineering systems.

And perhaps most importantly, I learned to see software engineering as a team sport — one where tools like Git, methods like Agile, and mindsets like open source culture all play a critical role in building things that last.