
As I’ve discovered through the ICS 314 course I have taken this semester, software engineering is a very broad field brimming with countless concepts and terms. In this class, we’ve touched on topics such as open source software development, functional programming, design patterns, and much more. Two topics that stand out to me from what I’ve learned this semester are Agile Project Management and Version Control.
Agile Project Management is a technique where the project team focuses on delivering incremental progress, the customer provides feedback, and the cycles repeats. This pushes the design requirements to evolve and adapt according to the needs of the customer and the progress of the team. I enjoyed learning about this topic since it provided me a clear framework for how to manage projects and complete tasks. During the development of RIBows, my team used a form of Agile Project Management called Issue Driven Project Management, in which work is divided into individual “issues,” each being a task that an individual on the team works on. This proved to be a very powerful strategy since it allowed our team to work in parallel, forced us to be explicit about what needed improvement, and helped us track what we accomplished.
I could see myself implementing this style of project management for projects outside the realm of web applications, especially for group projects. For example, if I were part of a group presentation, it might be useful to divide the unpopulated slides into separate “issues” that members of the team could pick up and work on. I could see this really streamlining the process of creating the presentation slides.
Version control is another topic we covered in ICS 314. For this class, we utilized git for version control and GitHub for hosting our repository. The purpose of version control is to track and manage changes to code files over time, allowing teams to collaborate on the same codebase, revert to older versions, and pinpoint who did what. In this way, the team maintains a complete history of the project and how it evolved over time.
Version control is another very useful concept I’ve learned this semester that has applications beyond software engineering. For example, when designing printed circuit boards (PCBs), I find it helpful to use version control tools like git to maintain logs of incremental changes. This also gives me the ability to revert specific changes I made, which can often be a lot more powerful than the PCB editor’s built-in revert tool.