9 hours ago, evildictait​or wrote
*snip*
If you never outsource anything, then you are limited by the quality and number of your own staff. For example, you probably don't employ a full time performance optimisation consultant because they are hideously expensive and would be sitting idle for 300 days a year in any given small development house. But if you just hire them for a week or so every six months, you might get the expert help you need for part of a project without needing to retain them as staff across the rest of the year.
You're right that the owner of the project needs to understand the project, but you're making the mistake of thinking that understanding the code is the same as understanding the project. The head of a bank probably doesn't understand how their online website works, but probably understands the risk to the bank better than the developers writing the code.
Try and be careful not to make overt judgements on people who don't have the same skills that you have and dismiss them as "stupid" or "worthless". Often these people just have a different set of skills that you probably don't understand or appreciate, like customer management, sales, or being able to run the finance and relationships part of running a company, without which the company simply wouldn't work.
If he has the money and wants some code that just works, good luck to him. That's the same reason why I didn't code my own version of Office and Windows. It's not because I can't, it's more the fact that my time is better spent earning money and giving a small fraction of that money to Microsoft to code it for me. That's kind of how business works.
Reducing everything to a "yeah, but he doesn't understand the code - what a silly muppet" is trite and foolish.
I never said you shouldn't outsource, nor that you need to "understand the code". Take your performance guru example, for instance: I don't have problems calling one in to make an application better (even much, much better); I wouldn't sleep at night, though, if the success of my project relied on someone being able to make it run 1000% faster than I know is possible.
Feasibility of critical features is what makes a difference to me: I don't need to be able to do it myself (not without an unreasonable amount of training and effort), I just need to know how it's done or, in other words, that it can be done without having to believe in black magic.
This is not some abstract development philosophy: if you can be successful stitching black boxes together, good for you; in my experience that's not how it works out though, which is why I steer clear of that practice and strongly advise against it.
And, for the record: I was responding to your comment about the evils of outsourcing; I most definitely didn't judge the OP nor called him names. Not sure where you read all that in my post.