Rinse the basmati rice under cold water until the water runs clear. Soak the rice in water for about 30 minutes, then drain and set aside.
Heat the oil or ghee in a large pot over medium heat. Add the chopped onion and cook until softened and golden brown, about 5-7 minutes.
Stir in the minced garlic and ginger, and cook for another minute until fragrant.
Add the lamb or chicken pieces to the pot and cook until they are browned on all sides, about 5-6 minutes.
Stir in the cumin, coriander, turmeric, cinnamon, black pepper, cardamom, paprika, and saffron (if using). Cook for another minute to toast the spices.
Pour in the diced tomatoes and chicken or beef broth, and bring the mixture to a boil.
Reduce the heat to low, cover, and let it simmer for about 30 minutes, or until the meat is tender and cooked through.
Stir in the yogurt and mix well.
Add the drained rice to the pot, stirring to combine. Add more water if needed to cover the rice by about an inch.
Cover the pot and cook on low heat for about 20-25 minutes, or until the rice is fully cooked and has absorbed most of the liquid.
Fluff the rice with a fork and season with salt to taste. Garnish with fresh cilantro.
Enjoy your meal!