This is a problem that I continually find myself having in my day job (Enterprise instant-messaging software/utilities). I don't know what the solution is, but I'd love to get some advice on how to be more effective.
I'd say that I am a pretty typical, introverted programmer type. I find that person-to-person real time communication is somewhat difficult, and quite draining for me to engage in. I can work on debugging or writing code for hours at a stretch, and I can generally communicate fairly easily with my colleagues in the development side of our business, but interacting with our sales and marketing staff is something like trying to mix oil and water.
I would say that the work that I do falls generally into two categories. On the one hand, are things like writing new code, refactoring existing code, and debugging and troubleshooting issues with our products. On the other hand, are more mundane and less mentally demanding things like meetings, customer support, email, demoing software, etc. These two phases of my work require very different mindsets; the first demands a lot of immersion, concentration, focus and solitude for peak efficiency, whereas the second is more fuzzy, less intellectually demanding, but more socially/psychologically draining. I have found that I cannot really mix the two different types of work that I do; the first category demands large, uninterrupted blocks of time, so that I can maintain my mental model of what I am doing and get into "flow," whereas the second category is much more fragmented and doesn't require anything like the same levels of concentration and focus. Generally, I have found that the most effective way for me to get the first category of work done is to either come into work early or stay late, and block out the necessary time during periods when nobody else is in the office and the level of distraction is very low. So for instance, if I know that there is a bug that I need to work on, I can either come in at 7 am and knock it out before people start getting in around 10, or start working later in the afternoon around 4 and stay until it is done in the evening. I'm rarely able to get much done during the actual 9-5 working hours, since the time is so broken up with interruptions, whether that be scheduled meetings, impromptu discussions that I get pulled into that are unrelated to the problems I'm trying to work on, having to field questions from our customers or sales staff, going to lunch, and so forth.
I would say that my biggest problem would be in communicating with our sales staff. I think that the biggest impedance there results from the incompatibilities between the modalities of the kinds of work that we do. As far as I can tell, most of what our sales staff does is chasing leads and contacting customers on the phone or email, fighting with Salesforce, and demoing products over screen-sharing sessions. I'm not sure how best to put it, but I would say that this is generally a much more low-latency process than my normal workflow. For instance, whereas I would prefer to handle email and such a few times a day, at the natural breaks between my tasks, they tend to want immediate answers on a much shorter timescale. As an example, one of my most frequent gripes is that my sales guy will, rather than send me an email with questions, that I would be able to answer within say, an hour of receiving it, he invariably wanders over to my office, interrupting whatever I happen to be working on, and expects that I can give him immediate answers to his requests, without any priming, while he is standing there. For me, this always involves a huge context switch, requiring me to dump whatever is on my mental stack, recall the details of what he wants to know about, switch out of my programming mode and back to conversational mode, then once he has left, try to get back into whatever it was I was doing.
I think besides the very different natures of the work that we do, another friction is that our compensation systems incentivize us very differently. I work for straight salary, with occasional bonuses based on the overall profitability of the company, whereas our sales staff work for a base salary plus commission with a quota. Tied in with this, is the fact that a large portion of the profits of our company comes from residual support and maintenance agreements with older customers, which would probably be enough to keep the lights on indefinitely with no new sales at all... My main motivation is thus to improve our existing products, and create high-quality new products for our big-dollar, established clients, rather than acquiring new, low-value customers so the sales guys can hit their quotas. We're involved in enterprise software interoperating with databases, LDAP and AD directories, and other third-party software systems, so it tends to be quite a bit of a nightmare to get our software plugged into a new customer's environment and troubleshoot all the weirdness that comes up. Depending on the paranoia or insanity of the customer, this can be person-weeks of our developers time, sometimes just for evaluations. Not only is this all a huge pain in the butt, there's the opportunity cost of not fixing bugs or developing new features during that time.
Wow, this has turned into quite a rant...
If you've had similar experiences, I'd be interested in hearing how you've dealt with it or improved things.
Obviously, finding a different job is one option, but all gripes aside, my job is pretty interesting, with good pay and benefits (at least for where I am in the USA), and a lot of autonomy, so I'm not eager to jump ship, not yet anyway