A well-designed model is half the work done. That said, the model is sometimes not very evident when you start writing the program. In such cases, you can break the rules and try out the code-first philosophy. The idea is to build your program incrementally from the ground up, refactor your code, and model, as your vision for the program becomes clearer.