Don’t be a software developer, be a product developer
I have not worked for any software companies outside Asia so I cannot speak for software developers outside Asia, but here’s a relatively typical scenario for Asian software developers.
“Hey man, can you do this feature? Don’t ask, just do.” — says product manager A.
“Hmm okay. No questions asked.” — says programmer B.
No matter what kind of company you work for, you are likely to be asked to write certain features without having to understand why. After all, you’re a programmer and your job is to just write code right? This is how product and technical debts accumulate. For every task you accomplish without giving it much critical thinking, you are making the product more bulky by introducing potentially unwanted functionalities.
This is a particularly serious problem in Asia because the talent pool for good product managers and developers is much smaller than, say Silicon Valley. Some startups need to grow quickly for various reasons, so sometimes they decide to bring on anyone to look over critical parts of the company even though it is going to hurt the product development in the long term. What happens when you have product managers who don’t exactly know how the product functions to work with software developers who are pure executors and dislike interacting with anyone except the computer? There will be a lot of trash produced because “garbage in, garbage out”.
In the unfortunate event where your product managers don’t exactly know what they are doing because they lack the background to understand how a tech product works, my suggestion for you software developers is to wear the product management hat yourself. It is almost always easier for a software developer to learn how to do “product management” than for a product manager to learn how to “code”, even basic technical understanding because computer programming seems too “mystical” to some. Writing a computer program for the sake of writing a computer program, without any contexts, can be meaningless. Next time when you receive a task, ask yourself “why does my code matter?” before you start banging away on your keyboard.
Some software developers think of themselves as “software developers”, meaning what they care about is to make the program run on the machine. That’s not enough, if your code is understandable by computers but not translated into part of an overall UX for real users, then it does not really matter even if you write the most bug-free code and have the best programming practices because it is simply irrelevant to your product’s vision. It’s now time to change your mindset and tell yourself that you are a “product developer”, not just a “software developer”. By thinking like a product designer, you actually care about the high level things as well. Your job is not just to make the program run, but to make the program useful for users. Find out about your product’s true purposes. You have to understand what you are writing by learning about the industry you are serving. Equip yourself with the necessary non-technical knowledge so that next time when a product manager comes to you with a set of features that he thinks will solve users’ problems, you can judge if these features actually make sense (metrics are still needed, of course). Without domain knowledge, it is difficult for a developer to model a system from reality.
Software developers often know better about the product they work on than product managers for certain reasons:
- Software developers can actually look into the codebase, the only source of truth. Product managers can write documentations, but it is almost never up to date with the codebase
- A system often has many configurations, which affects its behaviours depending on the values. I have personally experimented with documenting all system configurations with product managers, but in the end it is still difficult for them to fully understand each configuration’s behaviours because a system can easily have hundreds of configurations and it is time-consuming to try different combinations per configuration. Software developers can just look into the codebase (This is almost the same problem as above)
- Software developers understand technologies’ limits while product managers don’t (given they don’t have a technical background). It is easier for a software developer who understands the domain to come up with a realistic feature than to have a product manager coming up with unbuildable features due to a lack of understanding to the system’s complexity.
Whether for your personal satisfaction or your company’s profitability, start thinking about why your code matters in the broader sense. The more thoughts before you write the code, the better. Think like a product designer.
