Bring a large pot of water (minimum of about 4 quart) to a rolling boil. Bring to a simmer and add small and large cardamom, cinnamon stick, bay leaves and salt (I add about 1 tbsp).
Add rice and cook on low heat for not more than 5 - 7 minutes. Once the rice is half-cooked, immediately drain it into a colander* (See Notes for how I sequence this step).
Heat oil in a heavy-bottomed stockpot. Once it begins to shimmer, brown onions on medium-low heat for 10 - 15 minutes till they color evenly (medium to deep brown). Traditionally in a biryani, you are supposed to brown onions for close to half an hour on low heat. For that, you require a very heavy-bottomed pan that allows you to brown them without burning them. Since I use a simple stainless steel stockpot, I stick to about 10 minutes.
Add a little bit of salt (I add about ½ teaspoon at this stage).
Add crushed ginger and garlic and stir for roughly 30 seconds – 1 minute. Make sure they don’t burn.
Add cumin powder, coriander powder, red chili flakes and turmeric powder** (see Notes on best practice). Do a taste test and if you want to add more salt, do it now (I add another ½ teaspoon here). Stir for roughly a minute or two till they stop smelling raw. Deglaze the pan with a splash of water if needed.
Increase heat and add chopped tomatoes. Stir continuously till the tomatoes become soft and break down, about 5-7 minutes.
Add prawn and stir on high heat for about 5-7 minutes till it’s fully cooked.
Add chopped green chili and cilantro. Remove from heat.
In a separate stockpot, add half of the cooked rice. If you are using saffron, lightly dry-roast the saffron threads in an empty frying pan and then crumble them into a little bit of hot milk or water. Pour half of it on the rice and give a quick stir to spread the color. Rushdie also adds some butter at this stage.
Put the prawns on the bed of rice and cover with layer of remaining rice. Pour the rest of the saffron on top of the rice and stir gently without disturbing the prawn masala.
To put the biryani on ‘dum’, turn the heat up and then, dial it to the lowest point. Tightly wrap the lid with a cotton cloth and cover the biryani with it for about 10 minutes.
Once ready, gently mix the prawn and rice (taking special care to not break the rice) and place in large serving platter. Garnish with fresh cilantro and chilies.