What is the construction project management software about? What did you personally contribute to this project?
BAM's construction management software supports the processes involved in building new houses and renovating existing ones. I was one of the developers responsible for maintaining and enhancing the system by adding new features.
What technologies or tools did you get to use during those projects? Anything you enjoyed working with?
In this project, I mainly worked with Angular, TypeScript, Loopback, MongoDB, and Azure. I particularly enjoyed working with MongoDB because it was my first experience with a NoSQL database. MongoDB was extremely efficient, especially for handling databases that needed to accept images and videos.
Were there any interesting challenges you faced while working on those projects? How did you go about tackling them?
One of the main challenges I faced was acclimatizing to the project due to the low developer-to-non-developer ratio, which resulted in minimal documentation. As developers, we were expected to have an in-depth understanding of the system without much guidance. To overcome this, I developed strategies for noting and researching parts of the system, which helped me ask the right questions to other developers. Due to limited manpower, I learned to research the ideal tools or systems before meetings.
How was the experience of collaborating with your team members? Any memorable moments or lessons learned?
This role required a go-getter approach with less emphasis on collaboration. I learned that when manpower is limited, it’s essential to develop intelligent strategies for researching and learning systems independently.
What were the outcomes or results of those projects? Anything you're particularly proud of or found surprising?
One of the features we built was the digital signature component, which allowed construction workers to sign documents electronically. This significantly sped up the legal processes, particularly for BAM Group, which deals with a lot of bureaucracy.
When it comes to writing code, do you have any personal approaches or strategies you find effective?
I found that reusing components is a highly effective programming strategy. In smaller tech teams, getting the codebase setup right is crucial. For parts of the system where we lacked in-depth knowledge, we hired consultants as needed.
Can you think of a specific problem or task that was particularly challenging, and how you approached solving it?
A particularly challenging task was researching core components of the system and realizing that library support for many of them would be discontinued within eight months. We identified issues related to component interfacing due to mislinks between JavaScript and TypeScript interfaces. I spent a week noting and researching these components, and after thorough discussion, we developed a migration strategy that ensured continuous support.
Were you involved in any aspects of project planning or management? How did you handle deadlines and prioritize tasks?
We had scrum planning and review meetings where we estimated the time required for technical features and planned deadlines. Any necessary changes were communicated to our scrum master.
Looking back, what have you learned or gained from those experiences? Any skills or insights that have stuck with you?
I learned the importance of truly understanding the code when working in a small tech team and being very careful when selecting frameworks at the start of a project. Some frameworks can become obsolete, which can lead to spending a lot of time and energy on migrations. Picking the right framework with good support from the beginning allows you to focus more on developing new features rather than getting bogged down in maintaining or migrating old ones. This way, you can spend your time and effort on what really matters—creating and improving the software.
Is there anything you'd do differently now, based on what you've learned from those projects? Any feedback or advice you've taken to heart?
If I could do anything differently, I would dedicate more time to thoroughly studying the frameworks and Azure cloud features when building a codebase. This deeper understanding would help me make better-informed decisions and avoid future complications. Additionally, I've learned the importance of having a more advanced note-taking system. Effective note-taking is crucial for dissecting and understanding large codebases, allowing for more efficient problem-solving and better project management. These changes would help streamline the development process and ensure a smoother workflow, ultimately leading to higher-quality outcomes.