Reflection on Software Engineering

16 Dec 2025

Reflecting on Software Engineering

As I near the completion of ICS 314, I have come to realize that this course was not simply about learning how to build web applications, but about understanding software engineering as a discipline. While web development was the medium through which many assignments were delivered, the deeper goal was to expose students to core software engineering principles that apply across many domains and technologies. Through this course, my view of software development has become more structured, collaborative, and process oriented. In this essay, I will reflect on three fundamental concepts I learned Configuration Management, Agile Project Management, and Coding Standards and discuss how they extend far beyond web application development.


Configuration Management

Before taking ICS 314, I had little to no understanding of what configuration management actually meant. I initially thought it referred simply to how a project was set up, such as folders, files, or environment variables. Through this course, I learned that configuration management is much broader. It involves identifying, tracking, and controlling how a project evolves over time, including code changes, dependencies, environments, and versions, so that the software remains maintainable and predictable.

ICS 314 taught me configuration management primarily through hands-on experience using tools like Git and GitHub. Managing branches, commits, pull requests, and resolving merge conflicts showed me how important it is to track changes systematically. These practices made collaboration smoother and reduced the risk of breaking the project as it grew.

Configuration management is not limited to web applications. Any type of software whether it is a mobile app, enterprise system, or embedded software benefits from having a solid process for managing changes. I can clearly see myself applying configuration management principles in future projects, as having a reliable system for tracking progress and changes makes development more efficient and less error-prone.


Agile Project Management

Prior to this class, I had no real understanding of Agile Project Management. Over the course of ICS 314, I learned that agile project management is a flexible, iterative approach to managing work that emphasizes adaptability, collaboration, and continuous progress rather than rigid long-term planning.

A key concept introduced in this course was Issue Driven Project Management (IDPM). IDPM is a style of agile management where work is organized and tracked through issues that clearly define tasks, responsibilities, and progress. Using GitHub Issues to drive development made it much easier to see what needed to be done, what was currently being worked on, and what had already been completed.

This approach proved to be extremely effective for keeping the team focused and ensuring steady progress toward project completion. Beyond software engineering, I can see IDPM being useful in many other contexts, such as managing group projects, organizing research tasks, or even planning personal goals. The idea of breaking work into clear, actionable items is universally applicable.


Coding Standards

Before ICS 314, I had some familiarity with coding standards, mostly limited to basic syntax rules and code structure taught in earlier courses. However, I learned that coding standards go much deeper than just writing code that runs correctly. They include rules about formatting, naming conventions, code consistency, and best practices that make code easier to read, understand, and maintain.

In this course, coding standards were enforced through tools like ESLint and custom rule configurations. While this was sometimes inconvenient, it demonstrated the value of consistency across a codebase, especially when working on a team. Over time, I realized that coding standards reduce confusion and make collaboration far more efficient.

Coding standards apply to all forms of software development, not just web applications. Any shared codebase benefits from agreed-upon standards, as they improve readability and reduce errors. Although following strict standards can feel restrictive at times, modern tooling and editor plugins make it much easier, and I now see coding standards as a necessary part of professional software engineering.


Broader Reflections on Software Engineering

Overall, ICS 314 changed how I think about software development. I now view it as a collaborative, structured process rather than just writing code to solve problems. One of the biggest surprises was how important planning and thoughtful structure are before writing significant amounts of code.

The most valuable skill I gained from this course is problem solving combined with the ability to quickly learn new technologies and tools. Software engineering is constantly evolving, and this course emphasized adaptability and continuous learning skills that will be critical throughout my career.


Conclusion

In conclusion, ICS 314 taught me that software engineering is much more than web development. Through concepts like configuration management, agile project management, and coding standards, I gained a deeper understanding of how complex software systems are built, maintained, and improved over time. These principles apply across many domains and will continue to shape how I approach projects in the future. By balancing technical knowledge with process and collaboration, this course has prepared me to think and work more like a software engineer.


Disclaimer: AI was used to help me write this Relection.