I'm a web dev (mostly front-end/UX designer), at a small shop of less than 10. I was hired quite quickly as they had projects piling up and the previous person in my position had kind of left them high and dry, not really doing his work before eventually leaving without notice.
I've been here almost a year now, and I am pretty happy, but I am having issues with one co-worker in particular.
To set the scene, my co-worker mostly works on back-end module code. I would say he has very weak personal skills in general, my guess would be some sort of high-functioning autism - not that I am judging or have any notion that he doesn't deserve his position because of this.
As a somewhat anti-social myself I do feel for him, but lately I have been struggling to keep my composure (i.e: been getting pissed off, anxious throughout the day).
We are more or less expected to work together to complete projects, with him taking care of the DB/backend code and I the templates and front-end duties (usually just the two of us will complete a full project). I think that there is some degree of perceived competition between he and I, and lately he has been trying to do my work.
When front-end matters are being discussed I am often railroaded by his "superior" solution. His solution is almost invariably more complicated, time-consuming, performance-heavy, and unnecessary to what the client has asked for.
Decisions that fall under my expertise are always questioned, and harped on. The end goal is for me to see the error of my ways and realize that his solution is better.
After I complete tasks and test/publish my work he is constantly going back into my templates/sheets/scripts and making huge, annoying modifications to the code which supports his 'More is better' philosophy and ignores my 'This works, is fast, is secure, is what the client wants, and is semantic code' philosophy. The code becomes unreadable, the site becomes slow, and I feel shitty.
Often he'll call me over to his desk, distracting me from what I'm working on, to 'get my opinion' on his front-end work (which I should be doing anyways). Of course when I offer any type of feedback that deviates from what he's already produced it turns into an awkward silence, or I am immediately challenged on what I say.
He seems to hold these notions that things have to be done a very specific way, and that our boss will be upset if it's not. I have found this to be untrue.
The delegation of tasks between the developers is not very clear, and we're all expected to a bit of everything, so I can't really say YOU DO THAT I DO THIS since that's not really the arrangement around here. He has these behaviors with others in the office, but I seem to get it the worst.
This competition to show me that he's better at my job than I am is causing me a lot of frustration, and my productivity is suffering. I suspect the overall productivity of the office is suffering as well since I am not able or interested in handling his work. He has been stretching himself too thin, and as a result has had multiple freakouts at work where he is seemingly unable to control his emotions (back to my suspicions re: the autism), and acts in a manner that's not suitable for an office and definitely wouldn't fly at a more prestigious environment. Like really loud awkward sounds of frustration, running between offices with an inflated sense of urgency, and is visibly upset and unable to formulate full sentences. It makes the rest of us a bit uncomfortable, but we shrug it off.
I believe that I am very forgiving of strange behaviors and personality traits, and he's generally a nice and smart guy, but it's just so far over the top that I am losing my ability to deal with him in a cordial way.
My boss has a very hands-off management style, and my co-worker does precede me a good 2 years, so I don't want to do anything that will cause even more of a rift in the office (of 6 people). Is it possible to keep the peace but stand my ground? What should I do?