What 90% of engineering leads get wrong
The real job of engineering teams is creating value, not just code.
👋 Hey! My name is Piotr, and welcome to my newsletter on building blocks for successful tech product companies. Subscribe for free step-by-step guides on best practices used by the best companies!
90% of engineers I talked to think their job is to write good code. That's a problem. Not only is it not how you build good products, but it will likely cause you to fail big time, and people in your team will get fired.
Don't get me wrong. Out of my 25 years in the industry, 15 years I've been an engineer. I've seen things. Writing good code is certainly important, but it is not the ultimate goal of engineering teams. What is? If you have to remember one sentence from this post, get this:
The ultimate goal of tech teams is to create value for customers and your business.
This is what I mean by Product Engineering mindset. You need to get that message to your teams - engineers and engineering leaders. That's how you win.
Stakes are high because if you're not bringing value to customers, you're burning money. Quite a lot of money since engineers get big paychecks. Burn enough cash, and you'll get defunded.
Defunded means they'll fire you and close down the company. It may take a year or five, but it will happen eventually. It did happen to others before, and it will happen to you. If you're not bringing enough value to your customers, your competitors will eventually. You're ripe for disruption.
How to fix that?
No, don't kill the batman. That's plain wrong.
Here's how to fix it:
Engineers - instead of focusing on code, focus on customer value.
And with every team I work with, I expect engineering leaders to understand it and spread the love to their teams.
In this post, I will explain why writing good code is not enough and how you can increase customer value by shifting the mindset from code-centric to value-centric. And yes, you'll still be able to do fancy tech. The difference is that someone will use this tech.
A tale of two engineering teams
Imagine two engineering teams working on similar products in the same market. Both teams have talented and experienced engineers who write good code. Both teams use agile methodologies and follow best practices. Both teams deliver their products on time and within budget.
However, there is one big difference between the two teams.
Team 🅰️ is focused on writing good code.
They spend most of their time and energy optimizing their code, adding impressive patterns and even more scalable technology.
Microservices, message queues, cloud, containerization, all the fancy stuff.
Even though they don't have that many customers, they aim for high uptime and fantastic website performance.
Every edge case is covered.
New feature? Let's add five more microservices.
Are they talking to their customers? Come on, they don't want to be bothered, and they have all this refactoring to be done - someone just violated one of the SOLID principles. No, no, no, no. Not on their watch.
Team 🅱️ is focused on creating value.
They spend most of their time and energy understanding their customers' problems, needs, and desires.
Getting this knowledge takes time, so their code might not be so fancy. They still have a monolithic architecture and a single database. They have some microservices, but they know this architecture also has some costs, so they’re careful.
They have some tech debt, and sometimes it hurts. They don’t neglect it but don’t obsess about it.
New feature? They A/B test it using simple scripts until they know it works. Only then do they “properly” code it.
They frequently talk to customers and other stakeholders.
They feel successful if customers like and use their product more with every change they make.
They are very strategic about what they build and iterate until they find value. Only then do they care about scaling things that need scaling.
Which team is more successful? Which team brings more impact? Which team makes customers happier, causing them to use their product more, leading to higher revenue for their business? You know the answer; I do not need to tell you.
Why writing good code is not enough
Why is writing good code not enough? Isn't that what engineering teams are supposed to do? Well, yes and no.
Yes, writing good code is a necessary condition for engineering teams. But it is not enough.
Writing good code does not guarantee that you are creating value. You might be writing elegant, efficient, and error-free code, but it is not creating value if it does not solve a real problem, meet a real need, or deliver a real benefit. It is just a waste of time and resources.
Think about it. How often have you seen technically impressive products that fail to attract or retain customers? How often have you seen products full of features but no clear value proposition? How many times have you seen products that are well-coded but poorly designed? I've seen enough. Hell, I've built some of them myself. That was a hard lesson for me.
If you're building an impressive product that does not bring value, you're not building a good product, no matter how great the tech you use. This product will fail eventually.
And no, thinking it brings value without validating it with customers doesn't mean it brings value. Everyone thinks their feature will work. 80% will not. Building products is a numbers game.
What products will you get from code-centric and value-centric mindsets?
Code-centric products are driven by the technical aspects of the code rather than the product outcomes. Code-centric products are optimized for the engineer's satisfaction rather than the customer's satisfaction. Code-centric products are doomed to fail.
Value-centric products are driven by the value that the code creates for customers and the business. Value-centric products are connected to the customer's reality and aligned with the customer's goals. Value-centric products are optimized for the customer's satisfaction and the business's success.
How to make the mindset shift
So, how can you shift the mindset from code-centric to value-centric?
It is not easy, but it is possible.
It requires a change in how you think about and approach your work. It requires a change in your attitude, your behavior, and your culture.
Here are some tips to help you and your team make the mindset shift:
Start with the why. Before you write any code, ask yourself why you are writing it. What problem are you trying to solve? What need are you trying to meet? What benefit are you trying to deliver? How will this code create value for customers and your business?
Prototype solutions before writing code. Coding is the most expensive way of testing a hypothesis. Grab your product designers and send them with paper/Figma prototypes to your customers. Then, once you know this is what your customers want, code.
Define success metrics. Once you have a clear why, define how you will measure the success of your code. What are the key performance indicators (KPIs) that will show that your code is creating value? How will you track and report these metrics?
Prioritize your work. For every problem, there are five ways you can solve it. Find the lowest-hanging fruits. Use data to help you with prioritizing.
Validate your assumptions. Don't assume that you know what customers want or need. Validate your assumptions by talking to customers, conducting user research, testing prototypes, and getting feedback. Learn from your failures and iterate on your solutions.
Collaborate with other teams. Don't work in silos. There is no business and IT distinction. In tech companies, tech teams are the business. Collaborate with other teams that create value, such as product, design, marketing, sales, and support. Align your goals, share your insights, and leverage your strengths.
Keep learning and improving. Don't settle for good enough. Keep learning and improving your skills, your processes, and your products.
Learn the balance. You don’t need microservices, especially at the start. You don’t need to switch frameworks. You can live with some of the tech debt out there.
Conclusion
Writing good code is not enough for engineering teams. The real job of engineering teams is to create value for customers and your business. And that requires a mindset shift from being code-centric to being value-centric.
What's your take? Let me know in the comments below.