Se o software for usado taticamente ou estrategicamente ou for essencial para os seus negócios, é essencial ter programadores que também entendam os negócios. Eles também precisam entender o suporte e o ciclo de vida e o que custará à sua empresa para suportar os sistemas após o lançamento.
Não acho que esse custo seja geralmente um fator real. Se alguém afirma que é, é ignorante ou está mentindo. Se você terceirizar, estará pagando a margem de lucro de outra pessoa além dos custos. Qualquer economia devido a diferenciais geográficos do mercado de trabalho geralmente é rapidamente compensada pelo aumento do custo de comunicação e educação, e os diferenciais de taxas não são tão grandes quanto costumavam ser, já que o mundo em desenvolvimento é chamado por uma razão.
Existem muitos tipos de software por aí. Em muitos casos, você pode terceirizar algo e ficar bem. O problema é que essa decisão precisa ser tomada caso a caso e você não pode resolvê-la em uma situação única.
Tenho certeza de que há um milhão de coisas para procurar no processo de tomada de decisão.
Em alguns casos, o desenvolvimento de um software bem especificado, mas essencial, pode ser facilmente terceirizado para uma empresa especializada nesse tipo de trabalho - por exemplo, algo no nível do sistema, como um driver de dispositivo ou servidor da web, ainda pode ser terceirizado por uma empresa que fabricou um appliance e queria se especializar mais na experiência do usuário do que nos componentes básicos.
Por outro lado, se você estiver dirigindo esse servidor da Web de maneiras especiais e, mesmo que você o tenha especificado bem, esse componente estará intimamente ligado às principais iniciativas de desenvolvimento multifásicas, provavelmente você não está ' não vai querer terceirizar isso.