Rinse the basmati rice several times in cold water until the water is almost clear. Cover with fresh water and soak for 30 minutes. Soaking helps the grains lengthen during cooking and reduces the risk of breakage. While the rice soaks, begin preparing the biryani masala.
Heat the oil or ghee in a heavy based cooking pot over a medium heat. Fry the onions until deeply golden, then remove roughly one third and reserve for layering. Add the potatoes to the remaining onions and fry for 4 to 5 minutes until lightly coloured. Remove the potatoes temporarily while you prepare the meat.
Add the cumin seeds, black cumin, cinnamon, cardamom, cloves, peppercorns and bay leaves to the pot. Fry for about 30 seconds until aromatic, then add the ginger and garlic pastes. Stir briefly before adding the lamb or mutton. Cook over medium high heat for 6 to 8 minutes, turning the pieces until lightly browned.
Add the tomatoes, ground coriander, Kashmiri chilli powder, ground cumin, turmeric and salt. Cook until the tomatoes collapse and the oil begins separating from the masala. Lower the heat and stir in the yoghurt gradually so it blends smoothly rather than splitting. Return the potatoes to the pot before continuing.
Add the dried plums and approximately 250 ml hot water. Cover and simmer gently for 40 to 50 minutes, or until the meat is tender and the potatoes are cooked through without falling apart. Add a little hot water during cooking if the masala becomes dry before the meat softens.
Stir the green chillies, mint, coriander, lemon juice and garam masala into the cooked meat. Simmer uncovered until the gravy becomes rich and fairly thick. The masala should remain moist enough to flavour the rice, but excess liquid can make the finished biryani soggy. Keep it over a very low heat while preparing the rice.
Bring approximately 2 litres of water to a vigorous boil with the salt, bay leaf, cardamom, cloves and cinnamon. Drain the soaked rice and add it to the boiling water. Cook until the grains are approximately 70 percent cooked, with a firm centre remaining. Drain immediately and allow excess steam to escape for a minute before layering.
Remove roughly half of the meat masala from the pot. Spread half of the parboiled rice over the remaining masala, followed by the reserved meat, then cover with the remaining rice. Scatter over the reserved fried onions, mint and coriander. Soak the saffron in the warm milk for several minutes, then spoon it across the rice with the ghee and lemon juice.
Cover the pot tightly, preferably placing a clean tea towel beneath the lid to trap the steam, keeping the fabric safely away from the flame. Cook over very low heat for 20 to 25 minutes. Avoid opening the lid during this stage because the trapped steam completes the cooking of the rice. Turn off the heat and leave covered for another 10 minutes before opening.
Gently lift the biryani from the sides with a wide spoon rather than vigorously stirring it, preserving the separate grains and patches of coloured rice. Serve hot with cucumber and onion raita, sliced cucumber, lemon wedges or a simple kachumber salad. A traditional biryani should reach the table with visible layers rather than being completely mixed together.