Writing Software Before You Build It

Eduarda, a Senior Engineer at MongoDB, emphasizes the importance of thorough planning, documentation, and stakeholder collaboration before starting to code, sharing how this approach prevents misunderstandings, reduces rework, and leads to more successful software projects. She advocates for identifying unknowns early, clearly defining scope and success metrics, and using technical designs to align teams, ultimately making implementation smoother and software more maintainable.

In the video, Eduarda, a Senior Engineer at MongoDB, shares her approach to starting software projects, emphasizing the importance of planning before coding. She begins by recounting a past project that went poorly due to a lack of upfront understanding and communication. Initially tasked with implementing a seemingly simple button, she encountered numerous unforeseen issues, such as incorrect API results and unclear requirements, which led to weeks of unproductive fixes. This experience highlighted the pitfalls of diving into coding without fully grasping the problem or having a clear scope, and the frustration caused by missing context and inadequate collaboration.

Eduarda stresses the value of writing technical designs and documentation early in the process. She explains that having a central place to discuss and document the problem, scope, decisions, and exclusions helps align all stakeholders, including engineers, product managers, and designers. This documentation not only facilitates asynchronous reviews and collaboration but also serves as a reference for future maintenance and conflict resolution. She advocates for writing these documents as if for another engineer, including oneself in the future, to ensure clarity and continuity.

A key lesson Eduarda shares is the importance of identifying unknowns and blockers before starting to code. She describes how modern tools make discovery and experimentation easier and faster, allowing engineers to validate assumptions and uncover dependencies early. By engaging with relevant teams and asking critical questions upfront, developers can avoid costly rework and delays. She also highlights the need to define success metrics and scope clearly to measure project outcomes effectively and manage expectations.

Eduarda contrasts her earlier challenging project with a later successful one involving a complex billing system. In this case, thorough planning, documentation, and collaboration helped the team anticipate internal complications and design a robust solution from the start. This project became a reference for other teams facing similar challenges, demonstrating how good upfront work can save time and effort across an organization. She emphasizes that the hardest decisions should be made before coding begins, making the actual implementation smoother and more straightforward.

In conclusion, Eduarda encourages engineers to adopt a mindset of thoughtful preparation, communication, and documentation. She advises structuring thinking around what is unknown, engaging stakeholders early, and using technical designs to align teams and clarify scope. While coding is an essential part of software development, it is often the smallest piece of the puzzle. Proper planning and collaboration not only improve project outcomes but also reduce frustration, rework, and wasted time, ultimately leading to more successful and maintainable software.