The allure to build more and innovate ceaselessly is irresistible. Yet, not every problem is best addressed with code or new features. Before embarking on a new project, it’s essential to step back and assess: Are we fixing the real problem?
- Understanding the Core Problem: It’s easy to be swept up in the urgency to provide a solution, but are we genuinely addressing the root of the issue? An integral part of problem solving is ensuring that any solution aligns with the core offering of the company. If it doesn’t, it could be a misallocation of valuable time and talent. A tool like an RFC can help steer the conversation around the problem being solved.
- Considering Alternatives: Sometimes, the problem at hand is not primarily an engineering issue. A quick technical fix might seem appealing, but the underlying issue could be better addressed with an improved process, a change in marketing strategy, or even a pricing adjustment. Taking the time to evaluate these options can often provide a more streamlined and effective solution than diving into development.
- Maintenance Costs: Every new feature comes with a hidden long-term cost: maintenance. Addressing bugs, ensuring compatibility with future updates, and making iterative improvements can drain resources over time. While modern tools like AI-aided software development, CI/CD pipelines, and Github workflows have made maintenance more manageable, it’s still an important factor to consider.
- Opportunity Cost: In the world of finite resources and time, every decision has an opportunity cost. By choosing to build one feature, what are we potentially sidelining? It’s possible that while one project seems important now, it might delay the team from creating something even more innovative or impactful in the long run. Leveraging a prioritization framework like RICE — Reach, Impact, Confidence, Effort — can help. Read more about that here.
While engineering provides powerful tools to address a myriad of challenges, it’s essential to recognize that not every problem is best solved by writing code. As senior engineers, managers, and decision-makers, our role is to look at the bigger picture, weigh the pros and cons, and guide our teams towards the solutions that will yield the most significant benefits for our organizations and users.