
As I near the end of ICS 314, I’ve realized that the course goes far beyond simply building web applications. While I gained experience with frameworks like React and tools like GitHub, what I truly developed were foundational skills in software engineering that can apply across all domains of computing. Among these, three key areas stood out to me: Configuration Management, Agile Project Management, and Ethics in Software Engineering. Each of these concepts has helped me think more critically about how to write, maintain, and manage software in any environment—whether it’s a full-stack web app, a data pipeline, or an embedded system.
Configuration management refers to the process of systematically handling changes to software to ensure consistency over time. This includes version control, dependency tracking, and environment configuration. Before ICS 314, my use of Git was limited to saving code and undoing mistakes. Now, I understand version control as an essential tool for collaboration and reliability. Using branches to isolate new features, pull requests for peer reviews, and commits to log meaningful progress helped me appreciate how a well-managed codebase enables teams to scale and maintain software.
This concept isn’t just useful in web development. Imagine working on a machine learning project with multiple contributors experimenting with different model architectures. Configuration management ensures each experiment is reproducible and doesn’t interfere with others. I now understand why tools like Git, PostgreSQL, and even package managers (like npm or pip) are crucial in any long-term software effort.
Another transformative concept I learned was Agile Project Management, specifically a version known as Issue Driven Project Management (IDPM). Agile focuses on iterative development, where small, functional units of software (called “user stories”) are built in short cycles (sprints), allowing for constant feedback and adaptation. IDPM builds on Agile by using GitHub Issues to define, track, and manage tasks in a very structured way. Each issue corresponds to a feature or bug, and developers create branches and pull requests that reference these issues, keeping progress transparent and organized.
While IDPM worked well for our web project, I can see it being just as useful in other settings. For example, in my VIP team building autonomous drones, tasks like “Integrate GPS module” or “Implement obstacle avoidance algorithm” can be tracked as issues, with clear ownership and documentation. This method of project organization enforces clarity and accountability, which are essential in team-based development across any domain.
Lastly, ICS 314 prompted me to consider the ethical dimensions of software development—something that’s easy to overlook in technical courses. Software engineers don’t just write code; we make decisions that impact users’ privacy, safety, and trust. One topic that stuck with me was the ethical responsibility to write secure and accessible software. Whether we’re handling user data in a mobile app or designing algorithms that recommend news articles, our decisions can have real-world consequences.
This ethical lens is especially important outside of web development. For example, in AI and machine learning, biased training data can lead to discriminatory outcomes. In embedded systems for healthcare, a faulty decision in software logic could affect someone’s life. ICS 314 taught me that ethics is not just a checkbox—it’s a mindset that needs to be integrated into the design, development, and deployment of any system.
While ICS 314 taught me how to build a web app from scratch, more importantly, it taught me how to think like a software engineer. Configuration management, agile workflows, and ethical design are not just tools for this class—they’re cornerstones of professional practice that I’ll carry with me into internships, research, and future careers. No matter what kind of software I build, these principles will guide me in creating robust, maintainable, and responsible systems.