Season the lamb shanks with the salt and pepper. If you have the time, do this the night before and refrigerate. If not, season and let them sit at room temperature for 30 to 45 minutes before you brown them.
In a large Dutch oven or other heavy-bottomed, deep-sided skillet, heat the oil over medium-high heat. Brown the lamb shanks in the oil very well on all sides, about 7 minutes. Remove and set aside on a plate.
Wipe out or clean the skillet and heat the olive oil over medium heat. Add the red onions and cook until softened, about 3 minutes. Add the garlic, garam masala, coriander, and cardamom and cook until fragrant, 30 seconds more. Stir in the tomato paste and cook for an additional 30 seconds more.
Add the lamb and any accumulated juices back to the pan and pour in the stock. Bring the mixture to a boil, cover, and then simmer over low heat, flipping the lamb occasionally until the meat is tender and falling off the bone, 1.5 to 2 hours. NOTE: If you chose to use a pressure cooker or instapot set the timer to high pressure for 30 mins.
When the lamb is nearly done, make the relish: In a bowl, mix together the shallot, lemon, ginger, cilantro, and olive oil. Season with salt to taste and set aside.
Remove the lamb to a plate and cover with foil to keep it warm. Simmer the liquid left in the pan for 10 to 15 minutes more until it thickens. Strain if you please. Plate the lamb, spoon the sauce over the shanks, and top with the relish. Serve with polenta, orzo, or mashed potatoes. Pass the remaining relish at the table. You'll want it on everything.