Table ownership, declared in a file

Two teams writing to one schema means every change is a negotiation, and there is no mechanism that says who owns what.

orders:        { owner: fulfilment, writers: [fulfilment] }
order_lines:   { owner: fulfilment, writers: [fulfilment] }
products:      { owner: catalogue,  writers: [catalogue] }
prices:        { owner: catalogue,  writers: [catalogue, pricing] }

# and the CI check: a migration touching a table this
# service does not own fails the build with the owner's
# name in the message.

The file is a convention until something enforces it, and the migration check is cheap enough to add in an afternoon. It also gives the useful artefact for free: a list of the tables with more than one writer, which is exactly the list of places where a boundary is missing.