That’s more or less how it works. In fact for changes to procedures, forms, and field options (like patterns or code), it is exactly how it works. The programmer can make and test these changes on his or her local machine, and no one else is affected. When the changes are ready, everyone else closes the database, you upload the new version to the server and then everyone reloads the revised version and continues on their way.
When you say “structure of the database” I think of things like inserting or deleting fields. That is a bit different, you have to lock everyone else out before you make a change like that. That is necessary, because if other users continued editing the data while you did that, there would be no way to apply their changes to your database (since the field structure is different), and their data changes would be permanently lost. So in that case, everyone else has to stop working while you change the database structure. But adding a field isn’t the kind of thing that needs much testing – you just do it and immediately upload, then everyone can resume work with the revised structure. If there are extensive coding changes that do need to be tested, you can do that as a separate new generation afterwards.