This subject came to me while having a fun night with the team. We participated in a guided painting session, where we painted a drawing inspired by Van Gogh sunflowers. After we finished (and a few drinks later), I looked at one of the paintings and thought to myself – this sunflower looks like a painting of Mars on fire. This immediately reminded me of something I often say to the team regarding the constant battle between choices, trade-offs, and priorities.
Life is a series of infinite choices. You have so many options that you need to consider and digest, taking into account overwhelming amounts of information while having limited time on this earth. You always need to prioritize and make hard decisions with limited information and time to process.
This is even more obvious when building and running a company. There are many directions and opportunities coming your way. More is unknown than known, and you need to make smart decisions on how to best utilize your limited resources in order to achieve your goals and grow your company.
When you narrow it down to product development and R&D investment, the same pattern exists. You are always overwhelmed with the amount of work that needs to be done, the many options you have to evolve your product, and the many improvements you can make. It doesn’t matter how many resources you have, as more resources also mean more work is generated with each person adding more information and options. For some people, such as product managers, their entire role is to generate work that brings value. It’s a constant struggle that always makes you feel understaffed and needing to make hard compromises.
Perhaps you do not feel this way, but it could mean that you have significant inefficiencies and your resources are underutilized or not prioritizing valuable tasks. So it’s not a bad thing to constantly have this feeling. In fact, you should feel it.
In my career, many times I am presented with issues, topics, or suggestions that seem important – and they are. For example, how will a specific service scale to support 10x its current load? Or a suggestion that by making a specific change you can reduce your current cloud spending, and so on. Both issues are important, but how important are they right now? Because handling it now means that you are not doing something else.
So ask yourself, when do I predict to get a 10x load? Is it in the next few months, or within a year or two? If I reach that point, can I temporarily “throw money” at the problem to make it go away? And how much will it cost to do this?
As developers, it is common to prioritize things based on emotions. You feel bad when the code or a system you develop is not very efficient, worry about unrealistic worst-case scenarios, and tend to overrate the importance of something by ignoring the alternative cost. For example, let’s assume that you have an improvement you can make which will reduce your cloud spending – and today you are bleeding $500 a month unless you make this change.
Let’s assume that it takes one week to make this improvement, so you need to invest one week to get $6,000 back annually. It probably means that the ROI is positive if you only take into account your cost to the company of an employee. However, you are not doing something else during this time – which is to focus on adding new capabilities that will improve your product to be able to grow your business. Your time investment should not just be measured by the cost of an employee to the company, as you are in a high growth business. The value you are generating is in order of magnitude more than the direct cost to the company, otherwise your company is not really growing fast.
You need to focus on the problems of today and the near future, analyzing the consequences of not attending to each issue now. You must constantly reassess known issues and decide the right time to address them to avoid a future crisis or perhaps their ROI has changed and it makes much more sense to do it now. You should also understand if things have changed and a problem is no longer relevant (for example, if you changed the architecture along the way due to other reasons).
In other words, you need to invest your resources wisely to make sure that you even reach the point that you need to consider the 10x load issue.
When the team identifies such issues, I like to respond that it worries me right now like I am worried about a fire on Mars – let’s reconsider it in the future.