In a large bowl, combine yogurt, turmeric, cumin, coriander, paprika, chili powder, salt, lemon juice, garlic, and ginger.
Add the chicken pieces to the marinade, ensuring each piece is coated.
Cover and refrigerate for at least 30 minutes (or up to 8 hours for more flavor).
Heat 1 tbsp oil in a large skillet over medium-high heat.
Add the marinated chicken (shaking off excess marinade) and cook for 4-5 minutes on each side until lightly browned. It doesn’t need to be fully cooked, as it will finish cooking in the sauce. Remove chicken from the pan and set aside.
In the same skillet, add 2 tbsp butter. Once melted, add the chopped onions. Sauté for 3-4 minutes until soft and golden.
Add minced garlic and grated ginger. Cook for 1-2 minutes until fragrant.
Add cumin, coriander, garam masala, chili powder, and sugar. Stir well to coat the onions in the spices.
Pour in the crushed tomatoes and stir. Let it simmer for 5-7 minutes. If you want a smooth sauce, blend it using a blender or immersion blender.
Add heavy cream (or coconut milk), water (or chicken broth), and salt. Stir and bring to a gentle simmer.
Return the cooked chicken to the sauce. Simmer for 10-15 minutes, or until the chicken is fully cooked and tender.
Taste and adjust seasonings, adding more salt or spices as needed.
Serve hot, garnished with fresh cilantro. Serve with steamed rice, naan, or roti.