What happens if you don't want / like / can't use TDD? What happens if you don't want / like / can't have other people reviewing your code? I can see how types can be a hinder for the things you mentioned but as everything in the universe we have to talk in terms of tradeoffs. It is well accepted that types make a software more robust. True, that you can try to accomplish robustness through other means besides types. TDD, code review, x, y, z, etc. It is a personal choice. I like types, not because I think it is the best, but because I have been doing it for a long time and it has proven itself to make my code more robust (without TDD and code reviews).