What I Learned About Software Engineering in ICS 314

17 Dec 2025

What I Learned About Software Engineering in ICS 314

At the beginning of ICS 314, it was easy to assume that the course was primarily about building web applications. Over the semester, however, it became clear that web development was only the medium, not the goal. The real objective of the course was to expose students to fundamental software engineering principles that apply across domains, technologies, and project types. Through hands-on work, team collaboration, and reflection, I gained a deeper understanding of how software is engineered, not just written.

This essay reflects on three major software engineering concepts I learned in ICS 314: Agile Project Management (specifically Issue Driven Project Management), Configuration Management, and Coding Standards. These concepts extend far beyond web application development and are applicable to virtually any software project.


Agile Project Management and Issue Driven Project Management

Agile Project Management is an approach to software development that emphasizes iterative progress, adaptability, and continuous feedback. Rather than planning an entire project upfront, Agile focuses on delivering small, functional increments of software and adjusting plans based on real progress and changing requirements.

In ICS 314, we practiced a specific Agile approach known as Issue Driven Project Management (IDPM). IDPM organizes work around issues rather than rigid schedules. Each issue represents a discrete unit of functionality or improvement and includes estimates, implementation, tracking, and completion. Progress is measured by the resolution of issues rather than adherence to a predefined timeline.

What stood out to me was how transferable this approach is beyond web development. IDPM could be applied to embedded systems, mobile apps, research software, or even non-software projects such as documentation efforts. Any project that can be decomposed into tasks with clear outcomes can benefit from an issue-driven approach. The emphasis on visibility, accountability, and incremental progress makes IDPM a practical management style in many contexts.


Configuration Management

Configuration Management refers to the practice of systematically controlling changes to a software system to maintain integrity and traceability over time. This includes version control, branching strategies, dependency management, and build automation.

Before ICS 314, I viewed tools like Git as simple backup mechanisms. Through this course, I learned that configuration management is a foundational discipline that enables collaboration, reproducibility, and long-term maintainability. Branching, pull requests, code reviews, and commit histories are not just conveniences — they are essential mechanisms for managing complexity in multi-developer environments.

These concepts apply to any serious software project, regardless of domain. Whether developing scientific software, enterprise systems, or open-source tools, configuration management ensures that changes are deliberate, reversible, and well-documented. This course helped me understand that effective configuration management is as important as writing correct code.


Coding Standards

Coding Standards are formal guidelines that define how code should be written, formatted, and structured. These standards promote consistency, readability, and maintainability across a codebase.

In ICS 314, tools like ESLint enforced coding standards automatically. Initially, these constraints felt restrictive. Over time, I realized that coding standards are not about limiting creativity, but about reducing cognitive overhead. When code follows consistent patterns, it becomes easier to read, debug, and modify — especially for developers who did not originally write it.

This principle applies universally. In large-scale systems, poorly standardized code can become a major source of technical debt. Coding standards act as a shared language among developers, enabling teams to scale without sacrificing quality.


Software Engineering Beyond Web Applications

Taken together, these concepts reshaped how I think about software development. Software engineering is not defined by a particular framework or language. Instead, it is defined by disciplined processes, collaboration, and design decisions that prioritize maintainability, correctness, and adaptability.

Web applications provided a practical context for learning these ideas, but the lessons themselves apply broadly. Whether working on open-source projects, embedded systems, or enterprise software, the principles of Agile management, configuration control, and coding standards remain relevant.


Conclusion

ICS 314 taught me that software engineering is fundamentally about managing complexity. Writing code is only one part of the process. Planning work incrementally, managing change systematically, and enforcing shared standards are what enable software systems to grow and evolve successfully.

By focusing on these core principles rather than just tools or technologies, this course provided an experience that will continue to influence how I approach software projects long after the semester ends.