If I have an app not run by a DAO that does not need to be backwards compatible or anything like it. What's the easiest way to role out new versions?

My problem is that I have 0 experience in web2, I directly started to learn about backends when I learned Motoko. Therefore, I have barely any knowledge about how DBs and backends of traditional web apps are managed.

If you want to do breaking changes to a DB in web2 how is that done? I imagine you use a copy of the DB and create a new one with the new schema and then run a script to add the modified data to the new DB. Then you test that and ultimately run it on your real DB, correct?

I have the following questions related to that:

  • What is the simplest way to do something equivalent in Motoko?
  • Where do you keep backups of the state?
  • Would the simplest solution be to just store data off-chain before doing an upgrade and then reading it back into the canister? I guess this would break trust assumptions if the app was managed by an SNS but that would not be important initially for my case.
  • Would I even need to care about stable structures then?
  • In web2 do people use specific tools for versioning control of the DB and/or is schema?

Thanks in advance for any input.