For the marinade
In a large bowl, whisk the yoghurt, then add all the spices, salt, ginger, and garlic paste. Stir to combine well. Add chicken and mix well to coat evenly. Cover and marinate in the refrigerator for at least six hours or ideally overnight.
For the spinach gravy
Boil spinach until cooked. Process it into a puree with a hand mixer or blender, and keep aside.
Heat oil in a heavy-bottomed pan on medium heat. Cook the chicken pieces, along with its marinade, for around 5–6 minutes each side or until tender. Take the chicken out of the pan and keep aside.
In the same pan, melt butter on low heat. Add cardamom and clove and stir. Add onions, stir and sauté until it turns light brown. Add ginger and garlic paste, and stir and sauté for another 2–3 minutes.
Add red chilli powder, turmeric powder, coriander powder, garam masala powder, salt to taste (note we have already added salt in the marinade), and yoghurt. Do not stir immediately, as yoghurt will curdle. Cook gently on low heat for 3–4 minutes or until the oil has separated.
Add spinach purée to the onion masala, cover, and cook for 3–4 minutes until it comes to the boil. Add chicken and cook on high heat for 4–5 minutes, stirring occasionally, until any excess water has evaporated, the oil surfaces and the chicken pieces are well coated with the spinach gravy.
Serve with roti or tandoori roti