Not really, there is no excuse for not following bridge pattern and getting bitten. At soon as 2 people use a "data type", it is not too soon to separate out interfaces. If good design were difficult, I would agree with you that anticipation of evolution is necessary for making the extra effort. But this is trivially easy to do.
Only developers not used to the static-ness of the language they are developing in can miss it. And developers not used to "dynamic" , in this sense, languages can cause shudder-worthy events, so this just boils down to bad design.