Background
One of my colleagues joined my company a year after me, on the same level as I was. He and I initially had a good working relationship, though his code quality is sometimes substandard. However, our relationship has deteriorated in the last few years, as he appears to be too ambitious to work collaboratively with others.
He is task-driven, promotes his own work to middle management, and doesn't acknowledge the work of others. His self-promotion is better than his work quality. This has produced some tension and polarisation within the team. Further, he works in a dominating way, valuing his opinion more highly than that of others.
As background context, I am also disappointed that he was promoted instead of me, last year. I acknowledge that being passed over for a promotion is a simple cause for ire towards a colleague. Yet I do believe I've been working excellently too, and suspect his self-promotion contributed to his promotion prior to mine. Consider this as a background to the situation I outline below:
The situation
He recently took a perfectly functional and well-constructed, readable application I wrote in Go, and deprecated it in favour of another version he derived from my own Python code. I'd found that Go was significantly faster than Python, which is valuable in our application. He decided he knows best, and didn't want to support Go, and re-benchmarked the two, duplicating all my work. With some tweaks he got the Python version to be marginally slower than Go on average. He decided to move future dependencies onto this Python application, and then tasked me with migrating our existing dependencies onto the Python function as well. Keep in mind he's not my manager - he's just a colleague in my team. Now furthermore, his Python application removed some functionality the Go application had, that we need. I only worked this out after my testing during the migration failed. So he wasted his own time on re-benchmarking work I did months ago. I don't mind that. But I do mind that he wasted my time as well, giving me a pointless migration onto an application that doesn't even fully work.
Another cause for my recent frustration with him is that him and the few other seniors in my team are planning all of the team's work, without involving or consulting me. I have been at the company almost the longest in the team, and am by no means a junior in technical proficiency. I raised this with my manager, but he simply said we can't have too many people doing the planning. I want to have input, and I don't want to be disregarded. The team has grown more polarised and hierarchical between seniors and (mid-levels + juniors) as a result of this.
My questions:
How should I handle this colleague, and my awkward position of being disempowered within the team, despite being proficient? My company is great otherwise, as are the other seniors. Is he simply navigating the corporate environment in a self-serving, ambitious way and 'earning' his promotions through networking with management? Should I be as bullish to get promotions? Or is there still something to be said for technical excellence, working on impactful projects, and caring about the people in your team, rather than only the tasks you do to gain recognition?