One way to think about this that maybe overlaps with the theme of this article, but also stands on its own with specific regard to database modifications is that you often need to have the ability to have multiple versions of everything alive at one point in time.<p>So maybe that&#x27;s a schema A and a schema B, or maybe you have applied schema B which only app version 1.1 is optimized for , but version 1.0 is what is in production immediately following your database migration. So you can&#x27;t make changes in schema B that would immediately render app 1.0 broken, which means you need to not box yourself into a corner with future assumptions as much as possible.<p>Ultimately if downtime is not an option you end up writing these capabilities in at every layer.  Whether it&#x27;s an api endpoint or code talking to a database you often have to make carefully thought out changes incrementally to ensure that things can all operate simultaneously, and often this ends up having metadata about the versions of everything as an option for taking different code paths.<p>This article touches on this in the way that if suggests making your app deal with an available database and one that is not available.  Same with a field in a schema or a payload.  To make your code less brittle instruct it what to do in both cases.