There are a couple things in play here. First, if an application really needed 500GB of space today, you’d overprovision 25-30% just to be safe when it (inevitably) grows. Thin provisioning lets you hide than unused overprovisioning until it is actually needed.
Second, while a single node may need 500GB of space, in many cases if you have a cluster of dozens of servers in a scale-out application, not every server will have the same exact data needs (and you can’t generally predict which nodes will fill up first). In this case, using thin provisioning lets you exploit the difference between nodes and only allocate flash for nodes that really need it, on-the-fly.
Finally, there is the issue of how storage needs vary over time. Most applications start with smaller datasets, and the “data requirement” are guesstimates about the final state (months or years in the future) which may or may not happen. Thin provisioning lets you give applications as much space as they think they’ll need, but doesn’t actually dedicate the flash expense until it is really needed.