tl;dr In short, I feel like I am slowly being pushed out of my position and lost authority due to being weak and avoiding confrontation. I know the product we are using should not be used in the way it is (no supporting examples/documentation etc.) yet I do not know how to argue this argument. I typically stutter so my argument will sound weak.
I am the lead software developer at my company (a position I fell into due to the length of time serving - i.e. I worked my way up) and I am a pretty quiet person and avoid confrontation. Also, I typically follow open-source communities and I am of the opinion if something is designed the way it is, in, say, a framework, it is designed that way for good reason and usually it's better to follow community guidelines, rather than implement your own way (I hope to illustrate this with an example below).
Back to the question, I am in a tough situation and I do not know the best way to handle it - it might sound trivial, but I am questioning whether the role I am in is for me as a result of this situation.
A little background to the situation: my background is Computer Science, and I have been developing for roughly 12 years (5 years at the current company). I try to keep up-to-date with the framework I am using and feel knowledgeable enough. I feel like I have enough knowledge to be able to advise and carry out the duties which are expected of me.
A few years ago, somebody joined the company as a trainee developer. Their background was not Computer Science but is Chemistry (and has a Master's in this subject) and so it was my job to train them: explain why we do things the way we do, programming practices and guidelines - the general things you are taught at University, how to code.
Within a year or two, he was promoted to the counterpart of my position and since then I have been questioning whether I want to continue with this company (this may seem extremely selfish of me, but I will explain why) - effectively his promotion became my demotion in terms of responsibilities and advising on best practices.
At the beginning of the year, we embarked on re-coding our application from an old, deprecated framework to a fresh, brand new framework. This could have gone better - it was rushed and we have not had a break since the beginning of the year (in fact, I have not had more than 2 days off since this time last year due to the way holidays work, and we did not dare to take time off during the project). At the time of original training, I taught this person the old framework when training them, but since the very early beta stages of the new framework, I have been involved with the community and learning best practices etc. so I feel equally as knowledgeable in the new vs. the old framework, the difference is the lack of experience. The other developer has not been quite so involved but has had training in the new framework.
Since coding the new application, when I try to reason why we should be doing something one way (typically a way I have read about which is popular in the community, or is a documented way), usually they have a reason why we should choose their way - their reasoning typically revolves around their perception of UX - which usually requires hacking the framework to achieve this.. Sometimes this can be a very contrived way of doing it, and based on past experience, I know it will be a nightmare to develop as the application grows. There have also been instances where we have been developing things in unsupported ways by the framework. For instance, component X should be used alongside component Y, yet we are using component X in a different way, not alongside component Y. This causes weird bugs, and, as an example, jerkiness in animations which I know is a result of these unsupported usages. My ideas do not align with theirs on what the application should look like. Yet because they are the bolder person, they typically win the conflict. I know this could be met with "Speak up, then." Which is easier said, than done.
The real issue is the application does not align with my expectations on how an application should be because of these "customizations" we have put in, I have lost all passion for developing it (something I was very passionate about in the past), and whereas I was the lead on this application previously, I feel like I have now lost all control. I cannot find a supporting reason as to why we should not be using the framework in the way we are, hence presenting a weak argument. I have raised this with my manager in the past who is responsible for us both, and the general response is it is how it is, and there is no time to change it. I do not know what to do. Whether to face my fear of confrontation and take this head on and how to handle the lack of confidence (which will ultimately result in me stuttering and delivering a seemingly weaker argument) (probably stressing myself out in the process) or admit defeat and look elsewhere? I feel lost.