Definitely using subdivision modelling (subdivision modifier).These types of complex geometries are very hard to control when you have complex topology. SubD allows you to have very simple topology while creating the complexity you need. See for yourself:
Simple topology of only 6 faces
Complex geometry that comes out of it when subdivision modifier is applied
To achieve this zaha hadid like forms you need to work with both fluid geometries and hard creases that connect them. This can also be easily done in blender either by creating loop cuts from the both sides of the edges you want to crease like this:
Note that this approach increases complexity of your model's topology and thus is less favourable (but sometimes neccessary)
Or by using Mean Crease that you can find under edge data in item options when in edit mode, like this:
This method does not create additional topology and is completely procedural.
In the end you get something like this out of only 6 faces that can be still easily controled:
Other option how to create such geometries would be using procedural modelling (you basically create a script that creates the geometry based on it). In blender you could try to do it in geometry nodes, but in my opinion they are not yet user-friendly enough to use them for such tasks.