Prepare the Lamb: Wash and pat dry the lamb pieces. Set aside.
Heat the Oil: Heat vegetable oil or ghee in a large heavy-bottomed pot over medium heat.
Cook the Onions: Add sliced onions and cook until golden brown. Remove a small portion for garnish if desired.
Add Whole Spices: Add cardamom, cloves, cinnamon stick, and bay leaves. Stir for about 30 seconds until fragrant.
Add Ginger and Garlic: Stir in the ginger-garlic paste and cook for 1–2 minutes.
Cook the Lamb: Add the lamb pieces and cook for 5–7 minutes, stirring until lightly browned.
Add Ground Spices: Mix in Kashmiri chili powder, coriander, cumin, fennel powder, turmeric, black pepper, and salt. Stir well to coat the lamb.
Add Yogurt: Lower the heat. Gradually add whisked yogurt, stirring continuously to create a smooth, rich curry base.
Add Liquid: Pour in the water or lamb stock. Stir everything together and bring to a gentle simmer.
Slow Cook: Cover and cook over low heat for approximately 1½–2 hours, stirring occasionally, until the lamb is tender and fully cooked. Add a little extra water if needed.
Finish the Curry: Stir in garam masala and simmer uncovered for another 5 minutes until the gravy thickens.
Garnish and Serve: Garnish with fresh coriander leaves and serve hot with steamed basmati rice, naan, or roti.
Cooking Tip: For the best Rogan Josh, cook the lamb slowly over low heat and allow the spices to develop a rich, aromatic flavour.