Place the beef in a bowl. Add cooking oil, ginger and garlic paste, cumin, coriander, turmeric, garam masala, chili powder, and salt, then combine. Marinate the meat for at least 30 minutes (or overnight for best results).
Heat oil in a large and deep pot. Add bay leaves, cinnamon sticks, and cardamom pods. Fry for 2-5 minutes, or until the spices release their aroma and start to darken. Add the onion and saute until soft and translucent.
Add the beef, seasonings (garam masala, turmeric, cumin, ground coriander, fresh chilis), and tomatoes. Gently stir to combine, cover, and cook for 5-10 minutes, stirring from time to time.
Reduce the heat to medium-low, cover, and allow the beef masala to simmer for 30-40 minutes, stirring every 10-15 minutes. Add more water, a little at a time, whenever the pot starts to dry up (see notes).
Stir in the coconut milk, and allow to cook for a further 10-15 minutes or until the meat has softened, and the oil has separated from the sauce.
Remove the whole spices if preferred, garnish with fresh coriander, and serve with rice, naan bread, chapati, roti, just to mention a few.