Regarding schema evolution I implemented some protocols at database level, not allowing to modify columns, just adding. If I need to update a column, just create a new one and make a migration. If you need to delete it, just leave it without using it. I am not sure if this is the best solution, but it is the easiest way to implement it. Do you have other ideas in mind?