Smaller companies can't afford to have somebody dedicated to programming, nor can they afford to hire them in.
I must beg to differ, based largely on my own experiences. I'm a first-hand witness to many real-world cases where high-paid engineers or cadd managers attempted to implement reasonably-complex solutions that ultimately became never-ending projects that went on and on, before they gave up and/or went way over budget (in many cases by 2-3x over), and in some cases, most of the work they did had to be abandoned and/or completely re-done from scratch (in some cases, more than once!) before one could say they were finally
working badly.
In most of those cases, I was witness by virtue of the fact that I was hired to help the customer recover from it, and that often meant having to completely redesign and implement the solution, and in almost every case, I was able to do that for a small fraction of what it had cost the customer to produce something that ultimately had to be abandoned. I estimate that roughly 30% of all the work I've done involves taking over existing projects that were floundering or had failed in the hands of in-house people that were not full-time programmers and did not have the experience needed to get the job done.
That's not only because I have years of experience developing AutoCAD solutions, but also because I was able to use my own existing reusable code libraries - the fruit of hundreds of man-hours of design, development, testing, and debugging which I've been working on and refining for many years.
Now, if we just consider that having the ability to make use of a truckload of existing code that's already been heavily field-tested; debugged and is proven to work (by virtue of the fact that it is currently in use at many sites), the savings of having that (essentially for free when I'm using it contract work - with the caveat that they don't get to own that code outright, they instead get a non-exclusive license to use it), verses the cost of having to write all of the code that provides the equivalent functionality, it should be obvious that people that have been doing what I do on a full-time basis for many years, have a significant advantage over the average part-time, in-house engineer, cadd manager or others who usually must implement functionality offered by existing code libraries
from scratch (or, pay significant licensing fees to acquire it from others).
Companies around the world have been making use of talented individuals contributing in areas that are not their primary expertise; although some turn out badly thats no reason for a blanket exclusion.
Well, I said 'most', which I don't think qualifies as a blanket exclusion. And, it is places like this that many of those people turn to for help, sometimes without their bosses knowing they were even getting it

Too bad most of them haven't donated to help cover the cost of maintaining this site

The flip side of this disucssion is those whose primary profession is programming and keeping pace with programming methods & tools as suggested, are not spending the time necessary to stay current with the progam itself (e.g. AutoCAD, Civil3D) or the work processes in use by any given company, client, and/or industry. This leads to applications which don't mesh well with what the users are actually doing, followed by complaints of "Must have been created by a programmer!".
Well, by
professional programmer, I didn't typically mean some dude with a pony tail, that was working in the IT department of a Wall Street brokerage firm last year, and maybe was working for Yahoo for a few years before that.
Many full-time professional programmers who provide solutions on a consulting basis are people that
specialize in industry-specific solutions, and for those that specialize in AutoCAD or an industry that uses it, AutoCAD knowledge is as important if not more important than general programming knowledge. Those kind of programmers/consultants are almost always more intimately familiar with AutoCAD and other tools used by their customers than the customer is.