Marked as helpful by the asker
That 5% is people closing the tab, losing network, or a rule rejecting the write between the two calls. Two calls from the client can never be atomic.
Move the creation server-side: a Cloud Function on auth.user().onCreate that writes the document. It runs even if the tab is gone. And in the app, treat a missing profile as "still creating", not as a crash.