📣 If you're interested in following my journey and receiving some bite-sized tips on becoming a better growth engineer and also behind the scenes on growing as a creator, join me on Twitter.
I used to think that computer science students were lucky. You don't get to take hard-core engineering classes, such as Physics, but you are still a symbol of an engineer and even get higher pay than fellow physicians or traditional engineers. Just because a job or courses are difficult doesn't mean you get paid more.
All of these have something in common - value and impact is rewarded instead of complexity.
You get that promotion not because you solve the most complex problem but because you drive impactful projects in the company.
The best piece of article is not the article that provides complex vocabulary and poetic sentences but the article that gives the most insight and value to its audience.
The most successful software systems are not the complex systems but the systems that bring the most value.
Why Complexity is Not Equivalent to Value
Complexity and pay are not correlated.
The market cares about value.
Just because you went to pursue a master's or Ph.D. doesn't mean you will earn more money than someone who graduated with a bachelor's degree. People think of earning more money because they pursue a higher degree of specialization. After all, that specialization brings a lot of value to the market. The market rewards value more than complexity.
Pursuing a college degree can increase your chances of success. However, thinking that a college degree guarantees prosperity is a misconception.
Freelancers and consultants frequently find that their most lucrative jobs are the ones that are uncomplicated and can be repeated without difficulty.
Corporate workers often succeed in advancing through the ranks by focusing on simple victories that can be easily explained to executives. In startups, engineers make the most progress by simplifying problems, creating minimum viable products, and achieving tangible business outcomes for the company.
When it comes to product development, adding too many features can actually be counterproductive. Complex features may seem to offer more functionality, but they can confuse customers and make the product difficult to use. It's better to focus on creating a streamlined experience with fewer, more intuitive features. Don't try to be a jack of all trades; instead, aim for simplicity and ease of use. More clicks and buttons don't necessarily mean higher engagement.
Optimizing a single edge case in a system can increase the system's complexity and reduce its overall value. Over-optimization can create an inverse relationship with the system's maintenance, operation, and extension. It is important to avoid adding or removing components that require significant time and effort to implement, as this indicates that the system is overly complex and not providing sufficient value.
Even with this, the company or team's most valuable projects/tasks are usually the least complex. Nevertheless, at first glance, great value comes with great complexity. However, as we dive deeper into the how-to guide, various aspects can resolve complexity.
How do you Adopt value-based thinking as an Engineer?
Understand What is the most valuable for your team and your company
Every team has a different KPI.
If you are on the developer productivity team, increasing the developer efficiency and productivity in quickly iterating products brings immense value, not how much uptime your internal developer tool is.
If you are in the growth team, increasing the MAU (monthly active users) or your customer's Lifetime Value (LTV) creates a huge value in your team, not creating a system with a fault tolerance of 99.99999%.
If you are in payments, increasing the authorization rate and increasing the availability of your payment system will create value for your team.
In all these roles, you are software engineers, but you don't start with "what feature I should build/support to solve X edge cases or increase the highest quality of my software".
First, you remove the engineering hat, put the business and empathy hat, and think in terms of your end user. From there, you think about what brings the most value to the user.
The same goes forfeiting the project you have worked on your whole life. I saw many engineers attached to the project they have been working on for years because they assume that more time equals more value to the user.
Nevertheless, once you understand the value of utmost importance for your team, you can start working backward on prioritization.
Do the project That is most Valuable To Your Team, regardless of the complexity
Most people will know the 80/20 rule or the Pareto Principle. You can start working backward from the goal by identifying which project/task is the 20%.
I once got the product's request to add analytics data into our payment systems. It required a huge refactor of the old codebase because it was designed rigidly.
Initially, I was unsure about the importance of analytics. I wondered if it was worth focusing on rather than working on more impactful tasks that could directly boost our team's KPI. However, to achieve our team's success and iterate faster, we need the appropriate equipment and tools to evaluate our progress. Adding analytics data is the first step in comprehending the outcome of the product we built.
Once I understand the value that it can bring to our team, I am willing to move on from the prioritization stage and prioritize adding analytics data.
You can start thinking about complexity once you identify and re-prioritize your focus.
Deliberately minimize the amount of complexity
If we have all the resources and time, there is no such thing as complexity. Complexity occurs because we have limited time and resources, which require us to evaluate trade-offs.
Problem-solving skills are often required when dealing with complexity, and for most teams, such problem-solving skills aim to simplify complexity.
Most solutions that often lead to elevating complexity are:
Increase Time
Increase Resources
Back to my example of a huge refactor, one of the restrictions is time.
"How long does it need to take, and what is the point of accomplishing such a task?"
If we increase the time of completion, we can elevate the complexity.
"Since it requires a huge refactor on the codebase to achieve this, it requires X amount of sprints."
Adding more resources can be done by breaking things down into smaller tasks and making each task a milestone. This gives room for parallel tasks that multiple developers can do.
Thinking Towards Value-Based Thinking
When conducting prioritization, doing the job that provides the most value prevails over doing a job that is the least complex.
Through this article, you understand how to think about value to increase your impact on your team/business.
You can do this by:
Understand the definition of "value" in your team
Prioritize the Most valuable task
Start to minimize complexity to achieve those tasks
By doing these three things, your work will have greater impact and bring greater satisfaction as you move toward simple solutions.
Do you have any other tips regarding value-based thinking? If so, please comment below so I can also learn from you!