Intro
Hearing this may hurt you if you are a software engineer, but honestly: you’re paid to make customers happy, increase profits (so that you can get paid) and maybe to decrease your AWS costs. The code is just one of the ingredients to bring that value.
However, most engineers do it in reverse order and optimize for the wrong thing. They are trained to think in how. How to build it, how to scale it, how to make it extensible. But sometimes the right answer is not a new system at all: it can be a config change, a 15-minute meeting, or just saying “no” to the requirement.
It feels like engineering, but it is just solving the wrong problem built on assumptions.
2 traps
Two traps that pull engineers to this wrong direction:
Trap 1: Falling in love with the technology.
You learned Rust, or a new framework. Then you unconsciously look for problems that fit your preferred tools, instead of identifying the right problem and then looking for a tool to solve it. That tool can be code, a spreadsheet or even a hoe…
Trap 2: Building for the requirements you assumed.
You build a general-purpose system when today’s requirement is just one specific thing. Generalizations are useless until you have a second real use case. Until then, you’re just building for a future you invented. Ask yourself: if you write Java or any OOP language, how many of your interfaces ever got a second implementation? Or did they just sit there, adding complexity, making the codebase harder to change without making a single customer happier?
The fix
The fix is to work backwards.
Before writing any code, write down the problem in plain language, what’s broken, why fixing it matters, what value will your customers get? No solutions, nor framework choices, just focus on the problem.
At Amazon, we work backwards (see more here) by writing PR/FAQs, design docs and one-pagers. Different formats, but each focusing and working backwards from one thing: the customer problem.
Conclusion
Because at the end of the day, you’re not paid to write code. You’re paid to solve the right problems, with or without it.