Heat a medium Dutch oven or heavy-bottomed pot over medium-high heat. Add oil and ghee. Once hot, add goat or lamb meat and 3/4 tsp salt. Sauté for 6-7 minutes, stirring occasionally, until it has changed color and seared on some edges.
Add the garlic and ginger and sauté for another minute, until no longer raw. Add the onion, tomatoes, green chili pepper, whole spices, ground spices (except garam masala), and the remaining 1 tsp salt.
Add 1 to 1 1/4 cups water (the less the better because this will be sautéed out) so that the water covers at least 1/3 of the meat. Bring this mixture to a boil.
Once it comes to a boil, reduce the heat to a gentle simmer (low or low-medium). Cover and cook for 1 hour & 30 minutes (See Note 3), until the meat is fully cooked but not fall-off-the-bone tender. The meat should break when pressed with a wooden spoon. If not, cover and allow to cook for another 15-30 minutes, topping with water if needed.
Increase the heat to high and stir occasionally to sauté out the remaining water content/moisture (~5-7 minutes). Once the water has evaporated, continue to sauté (bhunai) for another 5-6 minutes. The masala will continue to thicken and reduce, and the oil will separate from the curry.
Reduce the heat to low and stir in the yogurt. Add the potatoes and 2 – 2 ¼ cups water depending on how much curry you’d like. (If doubling, add no more than 4 cups.)
Increase the heat to high to bring to a boil, and then reduce the heat to a simmer (low/medium-low). Cover and cook for another 23-25 minutes, until the meat and potatoes are both fork tender. Taste and adjust salt, if needed.
Uncover and allow the curry to simmer until the oil rises to the top (~2-3 min). Turn off the heat. Garnish with garam masala and cilantro. Serve with roti, paratha, naan, or basmati rice.