I would say, "bad program design breaks modularity", not early typechecking. If your types are defined so that they are as broad as possible (i.e., "what you really want"), then you will never even notice there is a type system, until you try something impossible.