Dry roast the cumin, coriander, dried chillies and black pepper until aromatic. Then add the dried fenugreek and grind this spice mixture into a powder.
Heat the oil and butter/ghee in a pan. Add the ginger and garlic pastes and stir it in for a few seconds. Then add the meat and fry it over high heat in the fragrant oil until it changes colour slightly. Once browned, take the meat out using a slotted spoon and place it into a bowl. Keep it covered.
Add the onion slices into the pan with the residual oil and fry them until almost golden. Next add the chopped tomatoes, salt and all the powdered spices (including the ground ones) except for the garam masala. Mix everything well, then turn the heat down and allow the tomato-onion mixture to cook and thicken up. Once the oil begins to get released from the sides, whisk the yoghurt and mix it in well until fully incorporated.
Then add the meat back into the gravy and stir it in. Add about 1 cup of warm water and turn the heat down to low. Cover the pan and allow the meat to simmer and cook until fully tender. If you have a pressure cooker, this should take about 20-30 minutes depending on the cuts of meat being used. Without a pressure cooker, this will take at least an hour or more. Keep topping up with warm water as and when needed.
Once the meat is fully cooked, taste and adjust salt and sprinkle the garam masala, slit chilli and chopped coriander. Stir them in and turn the heat off. Allow the dish to rest for at least 10 minutes (covered) before serving so that the flavours get properly infused. Garnish with ginger and more coriander, and serve with either rice or naan...or whatever else you prefer.