As software engineers, it's easy to get passionately invested in what we're doing. We spend hours analyzing and dwelling on the smallest ideas so it’s pretty natural to do. When you work on a team with other developers we need to be open to accepting their ideas and hopefully takes bits and pieces of everybody's suggestions to come up with the best solution possible at the time. But what do you do when somebody "pulls rank" on you and decides the way forward is something you deem sub-optimal? What if it’s a non-technical person that might not understand the ramifications of NOT implementing your solutions?
I read a blog post several years ago about being a professional, and what that means in terms of putting your foot down on certain decisions, and carefully identifying which hills we are willing to die on. For example, if somebody’s proposed database schema doesn’t match what you would do, who cares? But what if it’s something so blatantly wrong like mishandling of data or insecure financial transactions? The author of the blog post compared these situations to a chef. If service is bad or prices are high, is it really your responsibility to fix? But what if the restaurant pressures you to prepare meals faster than you are comfortable, resulting in food that isn’t completely cooked? Is it your responsibility as a chef to make sure that no undercooked chicken gets served? Absolutely.
A few years ago I was on a team with another dev that had previous management experience. I really liked working with him because he always brought a different perspective than what I was used to. He had the tech skills, but also the wisdom to back it up. We were implementing a new feature and highly recommended additional infrastructure to help with scalability. We got shot down by management in what seemed like a knee jerk decision at the time. It was probably a threat-level orange: not a security risk but definitely a performance risk. We both had worked hard and were very proud of our creative solution.
I was frustrated by the decision and felt pretty diminished as a contributor to the team. The other dev moreso because it was mostly his baby. He objected to the decision and provided backing information and warned of the possible ramifications. Then he said “Well, I did my job”. He wasn’t serving undercooked chicken, but the sides were burnt. I was impressed with his ability to let it go move on. I would have held a grudge.
I’ve been working as an independent freelancer for over year now, and my role on teams has changed. I’m hired for my experience and expertise on certain topics, but the clients don’t always use my recommendations for a variety of reasons. I can’t really blame them because my presence is temporary and they have to live with the ramifications. One client was dead set on using Kendo and jQuery, and I pushed hard for React. The client overruled and several months later we started converting everything from jQuery to Vue. I did my job. I’m currently dealing with another situation which is what prompted me to write this. I’m doing my job there, too.