The problem, it seems to me is that software developers often think: "what programming language do we really like && can continue to use for $long_time over $scaling_of_business".
When this is the case, business management expectation problems emerge regarding costs, maintenance and timing when the business scales by 10 or 100x. Early phase teams are lambasted for making poor decisions - and "adult supervision" ( i hate that term ) is hired to "fix things".
Thing is, the early "poor decisions" may not have been poor decisions at all relative to the business needs. However, since costs and retooling issues weren't discussed and planned for - the early team look like a bunch of fools/amateurs.
As software developers, we need to understand and communicate that the tools can we use to accomplish the needs for the business at one stage are different than those of a later high-scale stage. its OK, completely natural, and a requirement if we want to keep our jobs and grow with the business.
If a specialty carpenter is designing and building high end furniture with a set of well made brand-name niche tools and techniques they wouldn't expect that those same tools would be used if sales take off and 10x or 100x the number of units need to be produced. It would be understood that retooling would be required, people with expertise in those tools be hire and that there would be new costs involved. Also, the carpenter who starts the business with small scale tools isn't lambasted for being an idiot for picking those tools in the early phases. It would be quite odd to suggest that that person have picked tools and hired people for 100x production when they were selling single digit units a year.
"the new chair model must fit into these production constraints"
"the new software must be written to fit into this system - JVM based, web interface ..."