Reflect, Adapt, Evolve: The Cycle of Improvement in Software Engineering

10 May 2024

Throughout this course, I have gained valuable insights into fundamental software engineering concepts that extend beyond web application development. These concepts have broadened my understanding of software engineering as a whole and have provided me with a toolkit that can be applied to various project contexts. Two key topics that stood out to me are Agile Project Management, during our final project, and Design Patterns, as seen in our BowFolios experience WODs.

Learning to adapt and evolve in software engineering

Agile Project Management, including Issue Driven Project Management, is a methodology that emphasizes iterative development, collaboration, and flexibility in response to changing requirements. This approach is not limited to web applications; it can be applied to any project that requires a responsive and adaptable development process. Issue Driven Project Management, a specific style within Agile, focuses on organizing work around specific issues or tasks, which can be beneficial in any project where clear task tracking and management are crucial.

Agile Project Management: learning to adapt

I feel lucky to have been in a group for my final project where there was little drama, but lots of cooperation and support. One of the most important experiences during this process was learning how to collaborate on GitHub with other team members. Throughout this project, I solidified my skills using GitHub Desktop with the concepts of making branches, merging to main, and pushing and pulling. I needed to communicate and collaborate with my team members because sometimes when I would try to merge with the main branch, there would be conflicts. I wanted to be considerate and make sure that I never deleted code that my teammates worked hard to write. I also learned the benefits of working in a team. I would say before this final project I would have said that I prefer to work alone, but after my experience working with others, I now realize that it is okay to reach out to other teammates when you need help or feel stuck. Sometimes when I would have a problem with my code, I would just try to fix it on my own. This often meant getting frustrated for long periods of time, but when I felt stuck and reached out for help or insight from my other teammates, I was able to fix a lot of my problems more efficiently.

Design Patterns: learning to evolve

Design Patterns are another crucial aspect of software engineering that transcends web development. Design Patterns provide reusable solutions to common problems in software design. Understanding and applying Design Patterns can improve the maintainability, scalability, and efficiency of software systems in any domain, not just web applications. For example, the Singleton design pattern ensures that a class has only one instance and provides a global point of access to that instance. It is responsible for creating its unique instance and preventing the creation of any other instances. Key features of this pattern include a private constructor, a static instance, lazy initialization, and thread safety. 

I unknowingly used this pattern in a coding exercise called BowFolios, which I completed for homework. The project, named after our university’s Rainbow Warriors, allowed users to share their profiles, projects, and interests. The “ProfileCollection” class managed access to the MongoDB collection “ProfileCollection,” ensuring only a single instance was created and exported to the rest of the application. Clients could invoke methods on this instance to manipulate the collection, with the variable “Profiles” representing the singleton instance of the ProfileCollection class.

Reflecting on my time

In conclusion, this course has equipped me with a deep understanding of software engineering principles that go far beyond the realm of web application development. Concepts such as Agile Project Management and Design Patterns are valuable tools that can be applied to various project contexts, enhancing my ability to tackle complex software engineering challenges in the future.

In the process of writing this essay, I used AI to assist with structuring my thoughts. AI, like ChatGPT, can be a valuable tool for organizing information and generating ideas, but it’s important for everyone who uses it to critically evaluate the writing and information it provides us to make sure that it flows with our writing and voice.