I Don't Control Every Bit of My Product and That's OK
I, probably like many other people, have coded my product from scratch. In some sense, the product is like my child - I have put a lot of passion and hard work into it and seen her grow from a toddler to a teenager. Then I feel I am distanced, not because of teenage rebellion, but because I am not her only “parent” any more. The whole engineering team has influence on her and starts to shape her.
I still have control on the product direction, but I don’t really control the details, which feels strange. Whenever I know we have to deliver some new features, I have the “code map” in my mind and think about where the code should be and how it should be implemented. Except that I don’t really do any actual work and rarely have any time to even tell my thoughts. When I get to peek on the code review, I find out it’s been implemented differently — sometimes better, most of the time worse because: 1) they don’t know the product as much as I do; 2) they are relatively inexperienced; 3) they don’t just try as hard because the product does not feel like their own child.
This makes me frustrated. I’ve tried spending more time making sure the implementation is what I expect but then I overlook some other more important duties. I’ve also tried to delegate this to senior developers but unless we are identical twins, it’s impossible to get everything “right”. Finally I come to realise that my product is no longer my child any more. I don’t control every bit of my product and I should be OK with it, or at least learn to be OK.
I’ve also have to learn to be OK with how team approaches a problem “less effectively”. For some new features, I always think I can do it within less time: I can code everything and adjust UX/UI on the fly, skipping the lengthy “requirement -> UI/UX -> code -> feedback” process. Even though this might be true, it simply won’t scale. It’s not only difficult to recruit “full-stack product makers”, but also impossible to get a team of such people to work together. People within a team specialises and focuses on different aspects. The productivity per person in a specialised team might be lower than “a full stack product maker”, but as a team, it gets more work done and it’s kind of the pragmatic way to scale.
So I’ve deleted my IDE and stopped contributing to version control. Whenever I see some code that can be improved, instead of changing it, I explain my thoughts to the author and let him/her do it. Whenever I feel I can implement some features in “five minutes” on my own, I make sure it follows our team’s normal development process. Whenever I want to tell people how we should approach a problem, I stop myself and ask my team to figure out on their own, no matter how different our solutions may be.