Good rundown, especially the honest framing that most of your latency is sitting in the Mongo call and not the runtime. One thing worth adding for anyone reading the type-stripping section as "great, I'll drop ts-node everywhere" -- the unsupported-syntax list in Node's own docs is longer than just enum and decorators. Parameter properties (the constructor(private foo: string) shorthand a lot of NestJS-flavored Express code uses) and TS import aliases (import Foo = Bar.Baz) also throw ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX, same as enum declarations and namespaces with actual runtime values. None of those are exotic in a backend that grew up with decorator-style patterns even before using real decorators, so "just run node app.ts" can still blow up on day one for a reason that has nothing to do with enum.
Good rundown, especially the honest framing that most of your latency is sitting in the Mongo call and not the runtime. One thing worth adding for anyone reading the type-stripping section as "great, I'll drop ts-node everywhere" -- the unsupported-syntax list in Node's own docs is longer than just enum and decorators. Parameter properties (the constructor(private foo: string) shorthand a lot of NestJS-flavored Express code uses) and TS import aliases (import Foo = Bar.Baz) also throw ERR_UNSUPPORTED_TYPESCRIPT_SYNTAX, same as enum declarations and namespaces with actual runtime values. None of those are exotic in a backend that grew up with decorator-style patterns even before using real decorators, so "just run node app.ts" can still blow up on day one for a reason that has nothing to do with enum.