In a large mixing bowl, add yogurt, ginger, minced garlic, cumin, garam masala, turmeric, and chili powder. Season with a pinch of salt. Stir to combine everything.
Add the chicken into the yogurt mixture and mix to coat the cubes evenly. Seal the bowl with foil or plastic wrap. Set aside and marinate in the fridge for at least 30 minutes to 2 hours. Better if overnight.
In a large pan or pot, heat oil over medium-high heat. Divide the chicken into 2 to 3 batches. Once the oil is hot add a batch of chicken and saute for 4 to 6 minutes. Stir frequently to prevent burning.
Set the first batch aside and continue to repeat the process until all batches of chicken are sauteed.
In the same pan add 2 tablespoons of butter. Add the ginger and onions and saute for 4 to 6 minutes. Make sure to scrape up any brown bits in the pan.
Add the garlic, garam masala, and cumin. Saute for another minute or until fragrant. Stir constantly.
Pour the crushed tomatoes into the pan and season with the chili powder and some salt. Simmer for about 15 minutes or until the sauce thickens up and becomes a deep brown-red color.
Adjust the sauce’s consistency with a few tablespoons of water if needed. Add the chicken, sugar, and heavy cream to the pan. Stir constantly and cook for another 8 to 10 minutes until the sauce has reached the desired thickness.
Sprinkle the coriander leaves and turn the heat off.