In a heavy large pot, heat the oil over medium. Add the cinnamon stick, cardamom pods, cloves, bay leaf and cumin seeds. Fry for ~30 seconds until fragrant (don’t let burn).
Add the sliced onions and a pinch of salt, sauté, stirring, until soft and light golden (around 8–10 minutes).
Add garlic, ginger and green chillies; sauté for another 1 minute until fragrant.
Stir in turmeric, cumin powder, coriander powder and chilli powder. Cook for 30 seconds, stirring, so spices bloom but don’t scorch.
Add the tomato purée and chopped tomatoes. Stir to coat, reduce heat to medium-low, and simmer 3-4 minutes until tomato breaks down and oil begins to separate from masala.
Increase heat to medium-high. Add beef cubes. Stir to coat with the masala and sear for 2–3 minutes, turning so that all sides get some colour.
Pour in the water. Bring to a gentle boil, reduce to a simmer. Cover with lid and cook 30- 35 minutes, stirring occasionally, until the beef is partly tender.
Add the potato chunks. Stir gently to submerge. Cover and continue simmering 20-25 minutes or until potatoes are cooked through and beef is fully tender. If sauce is too thin, remove lid in last 10 min to reduce; if too thick and sticking, add a splash of water.
Stir in the coconut milk and garam masala. Simmer 5 more minutes gently (don’t boil vigorously).
Off the heat, stir in the lemon juice, adjust salt to taste, and sprinkle chopped coriander. Remove whole spices (bay leaf, cinnamon, cloves) before serving, unless you like to leave them in.
Serve hot with basmati rice, naan, or flatbread of choice.
Add your first comment to this post