In a small pan over a moderate heat, add the coriander seeds, cumin seeds, cinnamon, fennel seeds, mustard seeds, cardamom pods, fenugreek seeds and cloves. Stir them gently for 30 seconds until the seeds start to pop and spit around the pan. Remove from the heat.
Add to a pestle & mortar or a spice grinder and drind into a fine powder.
Add the turmeric powder, chilli powder, curry leaves, garlic, ginger and finally the vinegar. Stir well to combine everything. Set aside.
Heat a non-stick wok or frying pan over a moderate heat with the 1/4 cup of oil until just hot. Add the curry paste and fry gently for 2-3 minutes, stirring regularly to avoid sticking. Remove from the heat and spoon the paste into a bowl and set aside.
Add the beef to a saucepan and add one heaped tablespoon of the curry paste. Cover with 4½ cups water. Bring to a boil and reduce the heat to low. Simmer gently for 1 hour.
Remove from the heat and using a slotted spoon, take out the beef and place in a separate bowl. Keep the cooking liquid.
In a non-stick wok, heat 2 tbsp oil over a medium heat until hot. Add the onion and bay leaf and fry for 4-5 minutes until browned and softened. Add the remaining curry paste and stir into the onion before adding the beef. Stir well for 1-2 minutes.
Add about 1 cup of the beef cooking liquid and the salt. Let it gently bubble for 5-10 minutes to reduce to a thick sludgy consistency. Repeat this process of adding liquid and reducing to a thick consistency for about 30 minutes, until all the cooking liquid has been used. You should end up with a thick sauce coating the beef and very soft onions. Some of the oil should also have separated, this is normal. See the pics and video in this recipe for a visual guide to how it should look.
You're done! Remove from the heat and serve your beef balti with Indian Breads, like flaky paratha, roti, chapatis or naan. You can also serve with basmati rice of course.