DynamoDB scales to basically infinity and costs pennies to start. But if you've built on it with TypeScript, you know the day-to-day is rough: You build partition/sort key strings by hand ( USER#${username} ) and typo them. You marshal and unmarshal every attribute ( { S: ... } , { N: ... } ). You get zero type safety — the SDK returns Record<string, AttributeValue> | undefined and wishes you luck. Single-table design — the thing you're supposed to do — is all in you...