I wish I had the link, but I remember reading an article years ago (maybe 7 or 8 years ago?) titled (roughly) &quot;Don&#x27;t outsource your software development&quot;, focusing mainly on Walmart.  The article described a project at Walmart where they had their software developers actually go to stores and work the cash registers for a while to develop the kind of empathy and understanding of a job to design a good system.<p>While Walmart labor practices definitely get a bad rap (not necessarily undeserved), I found this story very encouraging.  It&#x27;s kind of ironic, but having developers work the cash registers actually suggests that these developers have a very high status in the business - they are not viewed as glorified typists, or even as technically talented but limited people where it comes to business.  They are viewed as people who need to understand business processes deeply and who have the autonomy and authority to act on that understanding.  And from what I understand, Walmart did rise to prominence at least in part on the effectiveness of its IT systems (which enabled more efficient supply chains, in particular).<p>This was a long time ago (and the WSJ article certainly acknowledges that some companies have been aware of this for a long time).  Personally, it took me a long time to understand how software outsourcing could ever be anything other than a disaster, and I slowly came to realize that this is because I worked in the jobs that hadn&#x27;t been outsourced, that required a lot of business context.<p>Even then, it&#x27;s been pretty clear to me at times that decision makers higher up on the org chart really don&#x27;t understand what I do.  Or, more cynically, you could say they absolutely do understand it, but are aware that it would take a few years for the hidden costs of their decision to catch up with them, by which point they&#x27;ve made their numbers and can use it to move up another rung (ie., if a highly competent software developer who truly understands the business has built robust, well documented, well tested systems, that person could be replaced with someone more limited in ability and business understanding, and it could actually be a few years before critical systems no longer effectively support the business).