Gather all your ingredients.
Smash the black cardamom pods, and remove the seeds. Place in a small bowl with the cinnamon, cloves, whole chilies (if using), whole green cardamom, fennel seeds, and whole mace. If using ground chilies or ground mace, omit here because you will add them a little later.
In a spice grinder, grind these whole spices to a coarse powder. Using a sieve, separate the larger pieces and run them through the grinder again. Return to the same bowl and if you didn’t use the whole chilies and mace earlier, stir them in now along with the ground ginger and salt.
In a large sauté pan or dutch oven, heat 2 tablespoons ghee over medium heat and add a pinch of asafetida, if using. Stir for one minute. Add the cumin seeds and sauté for a minute or two until aromatic and the cumin seeds turn a slightly darker shade. Stir in the ground spices and sauté for 2 to 3 minutes to toast them until aromatic. Stir frequently so that the spices don't burn. Add a splash of water if the spices stick or are too thick.
Add the meat and yogurt and stir to combine; add water to just cover the meat. Cover the pan and simmer over low heat. The curry should only be slightly bubbling.
Take peek at the masala every 15 minutes or so to check on the liquid level, and stir to prevent burning. Add water as needed and cook until the meat is tender. This will take about an hour for lamb or beef, depending on the size of your cubes of meat. Also, adjust the cook time depending on the protein you are using. Chicken will probably take 15 to 20 minutes.
When the meat is cooked, check for seasoning. You are looking for a thick sauce, but not a dry one. Add a little water if your curry has cooked down completely. If your meat is tender but the sauce is watery, remove the meat and cook the sauce down over medium-hight heat until it reaches the consistancy you are looking for. Taste for seasonings; add additional chili powder, salt, or additional yogurt to mellow the spicing, to your taste.