Take a small pot (preferably with a handle) and add water, sugar, cardamom and saffron. Heat it on a medium-high heat until the sugar melts. Turn off the flame and keep it aside.
Heat a pan on medium flame and add ghee. Once the ghee has melted, add the besan flour.
Turn the flame to medium-low and roast the besan while stirring continuously until it starts turning golden brown. It will take about 12-15 minutes or more to fully roast the besan and your kitchen will be filled with a delicious nutty aroma.
Add the milk 1 tablespoon at a time while stirring continuously. The mixture will fluff up when you add the milk. This steps helps to give the halwa a little grainy texture.
Pour in water and sugar mixture little by little while stirring continuously. Be careful as there will be some splatter when you initially start pouring, but that will stop once the syrup mixes with the besan.
The halwa will start to boil and thicken. Continue stirring. When it is just thickened, stir in a tablespoon of ghee for the extra richness.
The halwa is ready when it starts to leave the sides of the pan. Remove from flame. Garnish with nuts. Serve immediately.