Quick answer: Error codes that change between releases break support workflows. A stable code scheme (category.subsystem.code) lets support documentation outlive any single release.
Players Google your error code. If the code changes between versions, your docs and forum threads become useless.
Three-part code
Format: NET.MM.0042 = Network.Matchmaker.error 42. Categories are stable; subsystems rarely change; specific codes append-only.
Reserve ranges
0001-0999 for network, 1000-1999 for storage, etc. Adding a new subsystem opens a new range; old codes stay valid.
Append-only
Codes are never reused. A deprecated code stays deprecated; the documentation explains why.
Per-code documentation
One docs page per code. URL pattern: /errors/NET.MM.0042. Support links directly; SEO accumulates.
“Error codes are an API. Stable APIs build trust over time.”
Audit your error codes for the next release. Renumbering is painful; keeping them stable forever is the reward for one careful audit.