Scaling from one end of the performance/team size/code size scale to another using a single language is a very difficult problem no matter what language you choose. Things like static type checks that get in your way at one end of the spectrum become much more useful at the other end, and different languages fit different problem domains; when your problem space essentially changes on you, the tools you chose initially might no longer be the best choice. That doesn't mean the tools themselves are broken, just that they're no longer a fit.