> What's a possible way to design a language for collaboration besides encouraging ever more fine-grained modularization and code reuse?
Contract, contracts and contracts!
Collaborative development depends on people not freely overstepping outside of their bounds and clear communication of those.
OOP creates some actually strong kinds of contracts by abstract interfaces and information hiding. Flexible typed languages do the same with generics and specific types. Any language feature that creates more contracts will help collaboration.
I can see collaborative debugging and sharing of environments, especially with web services, as possible avenues. Observability as well.
I'm having a harder time coming up with specific language features though.