
Software engineering is a field that combines technical skill with thoughtful planning and collaboration. It involves creating systems that are reliable, maintainable, and adaptable to change. Much like planting a garden, successful software does not grow by accident; it requires preparation, structure, and ongoing care. In this course, I explored practices and frameworks that enable effective coordination and problem-solving in complex projects. I gained experience with tools and methods that organize work, improve communication, and reduce mistakes, forming the foundation for software that can grow and thrive over time.
Coding standards are a set of agreed-upon rules that describe how code should be written and formatted. These standards cover things like naming variables, structuring files, handling errors, and even how long lines of code should be. At first glance, coding standards can feel restrictive or unnecessary, especially when working alone. However, this course showed me that standards are less about control and more about communication. One way to think about coding standards is like road signage and traffic rules. When everyone follows the same signals and expectations, traffic flows smoothly and accidents are less likely. If every driver made up their own rules, even short trips would become chaotic. In software projects, coding standards serve the same purpose by making behavior predictable and reducing confusion.
In a garden, strong stems keep plants upright and healthy; without them, growth becomes tangled and fragile. This idea extends beyond software, since any collaborative system benefits from shared conventions, such as scientific documentation, manufacturing procedures, or academic citation formats. In software engineering, coding standards reduce the mental effort required to understand others’ work, leading to fewer bugs, easier maintenance, and smoother collaboration. By minimizing disagreements over style, teams can focus on solving real problems, turning individual code into shared infrastructure that the entire team can understand and build upon.
Agile project management is an approach designed to handle uncertainty. Instead of assuming that requirements are fully known from the start, agile methods accept that goals, constraints, and priorities will evolve over time. The purpose of agile project management is not simply to organize people, but to structure work so progress can continue even as plans change. Success is measured through steady, visible results rather than strict adherence to a long-term plan. Like gardening, agile project management works by responding to changing conditions rather than forcing growth on a fixed schedule.
In this course, we learned a specific agile approach called Issue Driven Project Management (IDPM). IDPM organizes work into small, clearly defined tasks called issues, each assigned to one person and designed to take only a few days to complete. These issues are tracked using tools like GitHub Issues and project boards, making progress visible and allowing multiple people to work in parallel without confusion or unnecessary delays. What makes IDPM especially valuable is how transferable it is beyond web development. The same issue-based approach can manage research projects, group assignments, or even non-software tasks that involve coordination and deadlines, such as planning an event. By breaking work into small tasks and reviewing them frequently, teams can track progress, catch problems early, and adjust plans before small issues become major setbacks. Rather than letting problems grow unchecked like weeds, agile project management encourages regular care and adjustments to keep the project on track. Through agile project management and IDPM, I learned that effective software engineering is not just about writing code, but about managing change, collaboration, and uncertainty, and it is as much about process and teamwork as it is about technical skill.
By the end of this course, it became clear that software engineering is not defined by frameworks, languages, or whether you are building a website, an app, or something else entirely. It is defined by how developers think about problems, work with others, and plan for change. Coding standards taught me how to make code clear and understandable for others, creating shared conventions that make collaboration easier. Agile project management and Issue Driven Project Management taught me how to manage uncertainty, track progress effectively, and keep teams coordinated as work evolves. Like a well-tended garden, strong software systems continue to grow long after the initial planting. These lessons will remain useful long after the specific tools from this class fade from memory. They apply anywhere people need to work together on complicated tasks with limited time and incomplete information. This course was not just about web development; it was about learning how to engineer solutions thoughtfully, collaboratively, and with long-term impact.
Note: ChatGPT assisted in the traffic-rule analogy used to explain coding standards.