Heat oil or ghee in a large pot or Dutch oven over medium heat.
- Add onions and cook until golden brown, stirring occasionally.
- Stir in garlic and ginger; cook for 1 minute until fragrant.
- Add coriander, cumin, garam masala, turmeric, chili powder, black pepper, and salt; toast spices for 30 seconds.
- Add tomatoes and cook until they break down into a thick paste.
- Stir in beef cubes to coat with the spice mixture; cook for 4–5 minutes to brown slightly.
- Pour in enough water or beef broth to just cover the beef. Bring to a boil, then reduce heat to low, cover, and simmer for 1½–2 hours, until beef is tender and sauce has thickened.
- Adjust seasoning as needed. Garnish with fresh cilantro before serving.