Don’t assume incompetence
Working as a software engineer, you likely have or will end up disagreeing with someone. When it happens with a more senior person (either someone in your chain of management or a more senior peer), it’s very tempting to assume that they are incompetent.
For obvious reasons you shouldn’t assume malice – if you do, you should probably consider another company as you are likely working in a toxic environment..
To come back to the initial point, it’s easy to assume that people above are incompetent in regards to topics you have strong opinions on whether because you work on it or are directly impacted by it – these topics may be technical or not. Very likely (not saying always), you are missing some insights/perspectives, e.g.:
- While your technical assessment around a project may be correct, your director may want to go a different direction because of other constraints you may not be aware of (staffing constraints, upcoming product changes, future regulator requirements etc.)
- While it may seem obvious to you that a change in company policy is terrible because of the way it affects you (e.g. RTO to pick a hot topic), the company may still push for it because it think the overall outcome is better
Good comms in these situations may help, but if you find that they lack obvious mentions, you should keep in mind that they were likely carefully crafted and that if some details were omitted, it likely wasn’t an oversight but a conscious decision to balance other goals – that again you may not be aware of.
The TL;DR is that you shouldn’t assume people are incompetent – similar as every (especially senior) employee should stay humble, we should all assume good intent and that disagreement with others likely stems from different insights/perspectives. It’s fair to complain and voice your disagreement, but this should be done with respect and a fair attempt at understanding others’ perspective.