I think that's a false dichotomy. Every employed programmer is building software to solve problems. The "product" of that labor doesn't have to be something that a non-programmer uses. For example, our memcached engineers at Facebook are building a product in the sense that other engineers will consume the service that they maintain. The word "product" simply helps to frame the fact that the goal of their work is to build, maintain, and optimize this service. If the work they are doing isn't towards that, then they aren't doing their job.