Sessions or JWTs — what is the real trade-off?
Revocation against lookup. A session id is a meaningless handle; the server holds the state, so signing someone out is deleting a row, at the cost of a store lookup on every request. A JWT carries signed claims, so any service can verify it with no shared state — and nothing can un-issue it before it expires. Everything else, including the "stateless scales better" argument, is smaller than that one difference.
The pattern that resolves it: a short-lived access token (minutes) plus a long-lived refresh token that IS checked against a store. You get stateless verification and a revocation point.