It's not like you can't decorate all variable access with !! to retain this expressiveness. This is not done in practice because it would be a waste of verifiable type safety. You can always `lateinit val` in cases where the initialization and lifetime of a particular value is trivial, but in cases where you can't do this, you probably benefit from the null safety guarantees.