Event names are an API you cannot version
Analytics event names behave like a public API with no versioning: once data is collected under a name, that name is load-bearing forever.
Rename contact_form to form_submit and you now have two events, each holding half the history, with no way to merge them retrospectively in the source data.
The rules that prevent regret
Lowercase with underscores. GA4 event names are case-sensitive, so Form_Submit and form_submit are different events. Pick one convention and never deviate.
Verb or noun_verb, consistently. form_submit, phone_click, video_start. Not submitted_form in one place and form_submit in another.
Generic name, specific parameters. form_submit with form_id: contact beats contact_form_submit. The first aggregates by default and segments on demand; the second requires you to know every variant in advance.
Never encode a value in a name. purchase_over_100 is a name that will need a sibling next quarter.
Reserved and automatic names
GA4 collects a set of automatic events and reserves certain names. Using a reserved name for your own purpose either fails silently or produces data that behaves unexpectedly.
Check the reserved list before naming anything. It is short, and discovering the conflict after three months of collection is expensive.
The limits
There are caps: distinct event names per property, parameters per event, and distinct values per parameter before high-cardinality bucketing begins.
Accounts hit these by creating an event per variation. Once you pass the limit, new events are silently dropped, which is exactly as much fun as it sounds.
The document
One page, in the repository, listing every event, its parameters, when it fires, and what it means. Not in a wiki nobody can find — next to the code that fires it.
Every measurement setup that survives a change of personnel has this document. Every one that does not becomes archaeology within a year, at which point somebody proposes starting fresh with better names, and the cycle repeats.