Sounds like a paradox? Nope - I don't think so. What does it really matter if you are brilliant at your work in the IT industry, specifically?
You would expect to receive more clients by the day, always being overbooked and people would fall over their feet to get you to do their projects. Especially if you are way under priced.
However, real life has taught me that politics, relationships, smoke and mirrors and FUD for change significantly skews this idyllic opinion.
Politics because if company policy dictates at a high level that a company should use a certain methodology and tool set, there is no way you can convince them otherwise, unless you are bigger than the competition. It is a bit hard to be bigger than the likes of IBM and Microsoft. I am not saying products such as WebSphere, Rational Rose, Clearcase etc. are bad or flawed, just that companies tend to listen to the people least qualified to make that kind of decision. Take the decision of a large company in South Africa to partner with IBM and use J2EE/WebSphere/Clearcase as part of their tool set. They forego tools such as Eclipse/Jedit/Netbeans/IntelliJ Idea/CVS for the IBM package. Suddenly WSAD (WebSphere Studio Application Developer) takes about 5 minutes to open on the developers' machines (after being upgraded to 1GiB of RAM, and having fast Pentium 4 processors installed) whereas previously it took about 20-30 seconds. To check something into Clearcase or check it out, takes easily 1 hour since you have to consider the streams and baselines and...
Is complexity really worthwhile? They changed a simple operation such as checking a file in to a version control system - which used to take 20 seconds - into something massively complex that takes almost an hour to complete.
They chose WebSphere as J2EE container - upgrading from Tomcat/Apache - without any of their developers having been trained for writing J2EE applications.
Politics and policies drove this decision, and if I am not mistaken they do not even have a properly trained and qualified System Architect whose input would have been so valuable...
They spend millions and millions of rands on technology, yet their most senior developers do not even know how to use exceptions. It is like buying a F1 Ferrari and giving it to your 90 year old blind grandma in the hope that she would beat Michael Schumacher in a Opel Astra Coupe...
Relationships play a role since if gatekeeper A (i.e. the person making the financial decision w.r.t. approving a proposal) is in bed with person B from Incredibly Cool Software Script Kiddies (Pty) Ltd., there is no chance in hell you would get the job - even if you are way better than the competition at a much more economical rate.
Another thing that steps in your hard earned way to success is smoke and mirrors. Slick sales person Z from ICSSK sells the world to gatekeeper A, making promises all over the place without consulting with the development team first to find out whether it is even feasible what he sold. Combined with a bit of politics and relationships, this will steal away your prospect, leaving you high and dry.
FUD? People like what they are used to - they do not like change. Especially if they are foreign to the solution. They trust what they have, even if it is completely broken. I once quoted for a big company to resolve some small issues in one of their accounting systems. That was about 2 years ago. In 2003. They were running on top of Clipper on DOS 6.22, having 640KiB of RAM and running almost out of disk space since the largest database flat file size possible was being approached. But no-one considered upgrading. The system did not directly generate revenue. However the keymakers did not add one to one to understand if your employees have to work 16 hour days for weeks on end just to finish the books on time, since you are running prehistoric software that severely limits the automation it was supposed to provide, you are loosing money. Especially if you have put off the rewrite for 10 years.
What good is it to write secure code? Stable code? Somewhere down the line you might have to integrate your work with someone else's - and if that someone else is not brilliant, you will take the blame for everything that goes wrong - even if it is entirely his fault.
So what if your system is a million times better than anything the competition could have done within the same timeframe and budget? All it takes is one tiny little mishap and there goes your reputation. Everybody knows that it takes years to build up a good name for yourself - you have to do thousands of things right. Consistently. But if you dare make a mistake after the 100,000'th correct thing, there goes your reputation. People expect things to work. Perfectly. They do not realise how big a feat it is in software development to come even close to that expectation. They only see the mistakes.
Is all this self-education worth while? Spending at least 12 hours of almost every single day of your life perfecting the art of software development? If nobody sees you or appreciates your work? And by appreciation I am referring to actually hiring you and leave all the politics etc. behind.
The world is a sad place.