On your point #1, I personally believe that the correct solution is to treat application code as yet another target for your schema state, and all issues of deployment are just synchronization between two different states. So it&#x27;s &quot;database first&quot; if you make the database the master state in the sync, or &quot;code first&quot; if you make the C# or Java or whatever code the master state in a particular sync. It doesn&#x27;t ever have to be set in stone (like EF does). Indeed, there is a certain rapidity of iteration early in the project if you can go back and forth, using different tools at different stages that might edit code, might edit schema, and just be able to sync the two when you&#x27;re done.