Preheat your oven to 325°F (170°C). Pour the oil into a large Dutch oven and heat over medium heat. Add the cardamom pods, cinnamon stick, cloves, and peppercorns to the hot oil and cook for 1 minute, stirring constantly, until fragrant and aromatic. Remove the whole spices with a slotted spoon and set them aside on a plate for later.
Increase the heat to high and add the beef to the pot in batches, being careful not to overcrowd. Cook each batch until deeply browned on all sides, then lift out with a slotted spoon and transfer to paper towels to drain any excess oil.
Add the onion to the same pot and cook over high heat, stirring frequently, for about 3 minutes until it begins to caramelize and turn golden at the edges. Stir in the ginger, garlic, paprika, cumin, coriander, salt, cayenne or chile, and ¼ cup of the measured water. Cook this spice mixture for about 1 minute, stirring constantly, to release the essential oils and deepen the flavors.
Return the browned beef and reserved whole spices to the pot. Gradually add the yogurt, stirring continuously to prevent it from curdling. Pour in the remaining water, then add the tomatoes and red bell pepper, stirring to combine everything well.
Bring the mixture to a boil on the stovetop, then cover the pot with a tight-fitting lid and transfer it to the preheated oven. Cook for 2 hours, or until the beef becomes melt-in-your-mouth tender and the sauce has thickened beautifully.
Remove from the oven and taste, adjusting the seasoning with additional salt if needed. Serve hot over fluffy boiled rice, garnished generously with fresh cilantro leaves for a bright, herbal finish.