The Software Engineering Experience

11 Dec 2023

Software Engineering has nothing to do with actual coding. Of course you must have some basic proficiency, but writing actual code typically proves to be the easiest part of creating software. The true stress, hardships, and challenges stem from the massive mental overhead that comes with working in a group of people who possess completely different viewpoints on almost every aspect of the project being worked on. The two most important topics covered in this course, Configuration Management and Agile Project Management, are placed on such a high pedestal because they offer helpful strategies to solve the hardest problem of all: working with others.

Configuration management can offer much needed help in turning the jumble of code written by a group of 5 people into a cohesive, functioning product. It deals with managing the many different iterations software goes through during production. As updates are made, Configuration Management ensures that these updates do not compromise the existing build and can be merged into the build easily once they are done. GitHub serves as the typical industry standard tool for this. GitHub utilizes a system of branches to manage the configuration. There is one main branch holding the product, and members can create their own little branches off the main one to work in. Once the work is complete, the changes are pushed back into main and go live. Ideally, the branches are organized and nicely labeled, and the main branch remains clean.

Over the course of the final project, I learned firsthand what happens when you don’t give too much attention to Configuration Management. There were multiple times during the final project where the main branch was corrupted due to preemptive pushes. This was a massive headache that required us to revert changes and reinstall the entire repo. I also experienced the opposite, where too many branches made it difficult to find what needed to be worked on.

The main ideas behind Configuration Management can be applied to projects in any field. I think that it’s always a good practice to separate changes from the main product. That way, if something goes wrong with the change, the product remains intact and functional. Of course, this applies clearly to all code projects, but I believe it also applies to projects in other fields as well. For example, while writing, it can be helpful to have multiple separate drafts. That way, you can retain all the best parts of every iteration and mix and match them at will. This allows for a much more polished final draft.

Agile Project Management, namely Issue Driven Management, was easily the most important concept covered throughout the entire semester because it offers a solid approach to managing projects that can be applied to a group of any size. Issue Driven Management involves coming up with a clear idea of what the project must accomplish, dividing that idea into smaller milestones, then dividing those milestones into smaller tasks. If working in a group, these tasks can then be evenly split among members. As the project progresses, of course other issues will come up that need attention, but the concrete milestones and issues keep work on the project on track. Effective Project Management makes everyone aware of exactly what must be accomplished and when the project can be considered finished.

Our group’s poor approach to Issue Driven Project Management made the final project much more stressful and challenging than it needed to be. We never took the time to set proper milestones and issues and barely even had an idea of what the final product needed to accomplish. Instead of discussing, we used ChatGPT to decide our issues and goals. As a result, we ended up with an extremely abstract, general goal and issues that were much too complex for a beginner’s project. Throughout the project, I felt that I had no clue what exactly needed to be done. When I actually had an idea of a task that needed to be done, it felt as if I was completely unprepared to work on it, despite doing well in the course and easily passing every WOD. It was a very frustrating experience that was a direct result of poor project management.

Project Management is so important because it plays a massive role in every single undertaking no matter the specialization. The strategy of breaking things down into smaller and smaller chunks can be applied everywhere. For example, with a school assignment, the main goal could be fulfilling all the necessary rubric requirements. Then, each requirement could be its own issue, and a milestone would consist of a set amount of requirements. For an essay, each paragraph could be an issue, a set of paragraphs a milestone, and the finished essay the goal. The list goes on forever.

Ultimately, I cannot say I enjoyed my time in this course. While most of the coursework was engaging and even fun, I had a very poor group project experiences. However, I learned a large amount of useful practices regarding not only software engineering but projects as a whole. Before this course, I would have chalked up my poor experience to a simple unlucky group. However, now that I’m aware of things like Configuration Management and Issue Driven Project Management, I have a good understanding of exactly why the project turned out the way it did and how to craft a better experience in the future. I will continue improving my application of these concepts and begin applying them to other areas of life outside of software.This was my first experience in software engineering, and while it may have been an awful one, I now possess the knowledge to start improving upon it.