There was a recent back-and forth recently on hacker news: The topic was “your job is not to code” vs the response “your job is to code.” (I recommend reading both of these before continuing. Don’t worry, I’ll wait)
So your job is to code, right? Or is it? As with so many things in life, I think the answer is “It depends.”
The person who says that your job is to do things other code, is probably coming from a consulting shop – notice the mention of convincing customers. A consultant’s job is to look out for the customer, and that means offering coding and non-coding solutions as needed as well as being able to communicate those solutions meaningfully. One might argue that this is a project manager’s job, but the project manager might not be on-site with the customer and does not have the continuous flow of information about the project and the context that the engineer does. In this context I would say that yes, It is very much the engineer’s job to evaluate situations and communicate as needed, and coding could be very much less than 99% of their time. This is also true for a small company or startup where each individual can easily play multiple roles. Guess what: not every software shop is big enough to have a dedicated project manager. In fact, at a startup of two people (say, a CEO and a CTO – not an uncommon situation), then indeed the engineer will be the engineer and the product manager and possibly the salesman. You betcha there is more to that position than coding.
Now, the person who says that your job is to code has a point too, but I think in a different context. In an enterprise software shop (or any software product shop with enough people, eventually) then there IS a project manager, and there is a sales team there is a support and services team, etc. In that context, yes I would say that there is enough specialization given to enough other people that it would be highly ineffective and inefficient for the engineer to do much other than code. If an engineer was constantly reaching out to customers and trying to do the job that dedicated sales and support teams were doing, that engineer would probably get a stern talking to. At least. That’s nice that they want to help, or that they want to learn about the business. But that is not a good use of their time, and in this context their job is to code.
I would finish by saying: Your job is to code if that’s your job. And your job is to do more than code if that’s your job. It all depends on where you work and what the context requires of you.