Trim the lamb leg of excess fat and cut it into 2-inch (5-centimeter) cubes.
Season with salt and black pepper, and transfer to the fridge to let chill for 1 hour.
Preheat an oven to 350˚F (177˚C).
In a 5-quart (4.7-liter) Dutch oven or braiser, heat the oil over medium-high heat.
Pat the lamb pieces dry with a paper towel. Brown them on all sides, 8-10 minutes, then transfer to a plate.
Lower the heat to medium, then add the butter.
Once it's hot and melted, add the onion, garlic, ginger, serrano and cardamom pods. Cook, stirring occasionally, for 4 to 5 minutes, or until the onion has softened and is starting to brown.
Add the chili powder, coriander, cumin, fenugreek, garam masala, turmeric and sugar, and stir well. Cook, stirring often, for 2 to 3 minutes, or until the spices are very fragrant and have darkened in color.
While the spices cook, use a blender or food process to pulse the chopped tomatoes into a thick puree.
Pour the tomato puree into the pot and stir well. Add the chicken stock and bring to a simmer. Cook for 5 minutes.
Season with salt and black pepper, and return the lamb and any juices to the pot. Stir so that the lamb pieces are covered in the sauce.
Cover and transfer to the oven. Braise for 1 hour 45 minutes.
Remove the pot from the oven and carefully remove the lid.
Add the potato cubes and coconut milk, and stir well.
Re-cover the pot and return it to the oven to braise for an additional 1 hour 15 minutes, or until the lamb is very tender and easily shredded with a fork. Season to taste, if needed, with salt and black pepper.
Serve over steamed basmati rice and top with the sliced white onion and cilantro. Serve alongside warm naan bread for dipping.