I'm honestly kinda confused on it. I tried to make it throw as late as possible, so we could easily do some further refactoring. In my ideal world a model that was not set completely would fail at compile time, not run time.

I'd vote for throwing as late as possible