Reflection

Principles of sustainability to create viable systems

Situation

During my internship at Wistech Global, I contributed to designing backend APIs and implementing database fixtures for enterprise-scale production systems. This work required a strong focus on reliability and scalability to ensure the systems could meet operational demands effectively.

Task

In my tasks, the challenge I faced was ensuring that I was able to understand the structure of these, often outdated and bloated legacy codebases, and that I could add the required functionality without further bloating the system and making it more difficult to extend sustainably in the future. I remember feeling a mix of excitement and uncertainty when tasked with extending a legacy system. The thought of working with outdated code initially frustrated me, but it also pushed me to think critically about sustainable practices in software engineering, which compared to "traditional" forms of engineering, tends to be more about ensuring that systems are easily extensible, and efficiently use resources.

Action

One difficulty I encountered when starting the task was recognizing that the legacy codebase was already unsustainable to some degree, being a large collection of quick fixes, and though it was tempting to finish the task quickly by adding my feature onto the pile. However, I understood that doing so might compromise the system's sustainability further. Instead, I focused on creating extensible solutions that would minimize future technical debt. When it was possible, I also refactored existing code to fit more modern standards.

Result

Reflecting on this, I see how principles like scalability and maintainability align with broader discussions in the field. For instance, leveraging open-source and community-driven technologies over proprietary tools fosters a collaborative ecosystem that supports long-term viability for all types of software systems.

Looking ahead, I intend to apply these lessons to future projects by integrating sustainability-focused practices from the outset. My goal is to create systems that not only meet current requirements but also adapt to evolving needs.

Professional Practice within intercultural and global contexts

Situation

In my professional life, I've had to work with a variety of individuals with experiences and backgrounds that differ greatly from my own. Not only through collaborating with individuals such as business stakeholders with different specialties and technical understandings but from navigating the shift between working with teams that have vastly different cultures and opinions on similar topics.

Task

Completing a regular task, such as a new feature request would involve the cross communication of several people, including the stakeholder, members of my team, and members of other teams. The process ensured that the feature would undergo a multi-step approval process, and that relevant parties would stay informed of and approve the changes being made. However difficulties often arose in communication, as sometimes parties were unable to state their requirements (such as the appearance of the feature, its location in the codebase, etc) clearly, leading to changes having to be made retroactively in the process. As the developer, I was often responsible for mediating between these differing requirements and finding solutions that would fit the needs of everyone involved.

Action

In order to do this, I would have to take into account factors such as position, cultural background, and experience. Especially since I often had to utilize technical language, which for example, business stakeholders might be less comfortable with, or take into account timezones for teams in external locations. Part of completing this task was adjusting my communication style to best suit the individual I was speaking to. For example, with my direct coworkers reviewing my code, I could approach the topic more casually, and find out smaller issues they had that they left out of formal review.

Result

By taking the time to take into account people's intercultural and global contexts and meet people on their level, I was able to better understand the whole set of requirements for the feature, and come up with solutions that fully addressed the scope of everyone's requirements. Being able to express that I understood each individual's requirements and relaying my changes in language that was most appropriate also ensured that everyone also could recognise the scope of the work that I had completed, and my commitment to the quality of code, increasing my reliability within the workplace.