Load balancing, "ip forwarding", ssl termination, transport upgrades (h3 and such with h11 backends) caching/acceleration. Reverse proxies are a requirement. (Yes I understand not all apply to websockets) Maturity in edge servers matters imo.
the actual code used in my reverse proxy is battle hardened since 2009, the app itself is tiny