Sieve the Besan to fine flour. Make sure that there are no lumps in the flour.
Heat Ghee in a heavy bottom steel pan.
Once the ghee is hot, lower the heat to medium and add besan flour or gram flour to it.
Take a heavy flat spatula and start roasting the besan in ghee. After 2 minutes, reduce the heat to low. Keep stirring.
You have to constantly stir the besan in ghee to avoid any burning. Also, Besan will clump up in ghee, so press it down with flat spatula and flatten it at the surface of the pan to break any lumps. It is a tedious work but the result is amazing.
Stir and roast the besan in ghee on low heat for about 15 minutes. You will notice that besan will start leaving ghee in 15 minutes and the raw smell is gone. This is important to roast the besan till this point that it starts leaving ghee.
Now add 2 cups of warm water to the pan slowly. It splutters so be careful.
Keep stitiing and when the water is absorbed, add the soaked saffron with milk, cardamom powder adn sugar to it. Keep stirring.
If you like slightly loose sheera type Halwa, then switch off the flame at this point.
If you like slightly grainy halwa, then cook for 2-3 minutes more till it thickens more. Switch off the heat and let stand for 2-3 minutes and then break it up with spatula.
Add the chopped pistachios and almonds and serve warm.