Throughout my experience as a software engineer in product companies I've learned so far that there are always more features and projects in the roadmap to work on than available resources.
My part as a software engineer is to produce value through solving problems and effectively building software and shipping it to production.
Here are a few tools that I adopted which increase a chance of success and reduce the risk of failure when working on a software project:
Great way to organize knowledge in a single document accessible to every team member and stakeholder. Preferably using a template standardized across the organization.
I found this one to work for my needs:
Visualizing architecture can create a lot of problem solving value.
It allows you to examine a design in end-to-end fashion and have a closer look at its complexities like communication between subsystems, microservices, asynchronous communication, data models.
It also eases introducing other people to the architecture and helps you get back on track when you’re switching context.
I remember a situation when I implemented code relying on the data produced by a different process that was not accessible just yet at this point of business transaction.
If I had mapped it out on the diagram, the right way to solve it would have been obvious and I would not have to rework my solution.
This is the kind of approach that requires investing some effort upfront, but pays dividends especially during long term projects.
Keeping track of important product or technology decisions, reasoning behind them and their consequences.
I find myself revisiting decision logs frequently and sharing entries outside of the team during the project lifetime but also long after the project has been shipped to production.
Trying to build minimal working end-to-end prototype to validate the idea or fail and revisit the initial assumptions. This approach can greatly reduce the risk of horrible and costly mistakes.
Creating PoCs shortens the feedback loop thus allowing for more potential iterations in pursuit of the right solution.