Beyond the Code: Foundational Lessons in Software Engineering

18 Dec 2024

Introduction

As my software engineering class comes to an end, I’ve realized that the lessons learned extend far beyond web application development. While I gained technical skills in React, Prisma, PostgreSQL, and more, the real value lies in understanding fundamental software engineering concepts like Agile Project Management and Configuration Management. These principles have shaped my approach to teamwork, task management, and personal growth as a developer. This reflection explores how these concepts have influenced my learning and how they can be applied in various contexts.

Agile Project Management: A Framework for Teamwork

Breaking Down Tasks and Assigning Roles

Agile Project Management emphasizes collaboration and breaking projects into smaller, manageable tasks. In our team, this meant assigning tasks based on individual strengths and interests. For instance, those who enjoyed frontend development worked on UI components, while others focused on backend systems. This approach fostered teamwork and made the project more enjoyable.

Milestones, Deadlines, and Testing

We used GitHub Issues and Milestones to track progress, set deadlines, and ensure that tasks were completed on time. The clear structure on GitHub allowed us to efficiently assign tasks and avoid unnecessary in-person meetings. Milestones acted as chapters for grouping tasks, providing a logical flow for the project. Frequent testing involved testing our own branches before squashing and merging into the main branch if everything worked as expected.

Adapting to Challenges

Challenges arose when team members struggled with tasks due to skill gaps. In these cases, others would step in to help or refine the work. This flexibility, a cornerstone of Agile, ensured the project stayed on track and taught me the importance of supporting teammates when needed.

Configuration Management: Ensuring Stability and Progress

Version Control and Collaboration

Using Git and GitHub introduced me to the importance of version control in managing changes systematically. Although my understanding of GitHub was basic at first, I quickly realized how effective it was for organizing and collaborating on projects. For example, GitHub’s merge confirmation process ensured that conflicts could be detected and resolved before merging changes into the main branch. Additionally, group members could review changes, adding another layer of accountability.

Tracking and Refining Tasks

GitHub’s tools, like Issues and Milestones, made it easier to organize and track progress. If a task wasn’t completed or didn’t fit well within a milestone, we reassigned or refined it for the next phase. This systematic approach reduced errors and improved efficiency, teaching me how to manage iterative improvements.

Lessons in Teamwork and Individual Growth

Teamwork: Communication and Honesty

Working on a team taught me the importance of clear communication. Being honest about project goals, providing examples, and openly discussing what I could or couldn’t do helped our team work more effectively. Timeliness was also crucial; delays in simpler tasks could hinder overall progress. I also learned that asking team members respectfully if they needed help could prevent bottlenecks and encourage collaboration.

Individual Growth: Deep Learning Without AI

One of my key takeaways from this class was the importance of deep learning and reading documentation. While AI tools are helpful, relying too heavily on them can limit foundational understanding. I became more cautious about the code I modified, aiming to make minimal but effective changes. I also learned the value of using environment files for sensitive data like keys and coordinates, rather than hardcoding values. This approach makes the application more scalable and easier to maintain.

Broader Applications

Beyond Software Engineering

The principles of Agile and Configuration Management are not limited to coding projects. For example, Agile’s iterative task management and teamwork could apply to marketing campaigns or event planning. Similarly, Configuration Management’s systematic approach to tracking changes could benefit research projects or hardware development.

Preparing for the Future

These concepts will undoubtedly shape my approach to internships, jobs, and personal projects. Whether it’s using Agile to organize tasks or GitHub to manage files, the skills I’ve gained in this class will help me tackle future challenges with confidence. For instance, I plan to watch more tutorials and engage in self-learning to build a stronger foundational knowledge before diving into projects.

Manoa Bites: A Case Study in Learning

Manoa Bites is a web application designed to help students and staff at the University of Hawaii at Manoa easily find food options across campus locations. With Manoa Bites, users can discover available menu items, search for specific restaurants, and find out which dishes are being served on any given day. Key features include:

1. Campus-wide Food Directory: Consolidates food options from Campus Center, food trucks, Manoa Gardens, and other campus locations.
2. Real-time Updates: Vendors can log in to update daily menus, ensuring users always see current options.
3. Personalized Experience: Users can set food preferences and get suggestions tailored to their tastes.
4. Role-Based Access: Three user roles (Users, Vendors, and Admins) for personalized and manageable access.

Through this project, I gained a clearer understanding of the software engineering process. I learned how PostgreSQL manages user data, including account details, email, and roles. I also improved my understanding of tabling in PostgreSQL and recognized Prisma’s role as a schema intermediary. However, I realized that I need to study these tools further to fully grasp their potential.

Conclusion

Reflecting on this course, I’ve come to appreciate the depth of software engineering beyond coding. Agile Project Management and Configuration Management have provided me with frameworks to approach projects effectively, foster teamwork, and maintain consistency. The lessons learned from the Manoa Bites project, such as managing APIs, avoiding hardcoding, and improving database knowledge, will serve as a strong foundation as I continue to grow as a software engineer, both in collaborative environments and individual pursuits.