Rehydrate chilies & toast spices: Remove chili stems and soak chilies in hot water 15–20 min. In a dry skillet over medium heat toast coriander, cumin, peppercorns, cloves, cinnamon, cardamom and mustard seeds for 1–2 min until fragrant. Cool slightly.
Grind spices & make paste: Grind the toasted whole spices to a fine powder. In a blender combine rehydrated chilies (drained), ground spices, garlic, ginger, turmeric, sugar, vinegar, yogurt/tamarind (if using) and 2–3 tbsp oil. Blend to a smooth, thick paste — add a tablespoon of reserved chili soaking water if needed.
Marinate beef: Place beef cubes in a bowl or zip bag. Add the vindaloo paste and mix thoroughly so all pieces are coated. Refrigerate at least 4 hours — ideally overnight (8–24 hours) for best flavour penetration.
Brown the beef: Remove beef from fridge 30 min before cooking. Heat 2–3 tbsp oil in a heavy pot/Dutch oven over medium-high heat. Brown beef in batches (do not overcrowd). Set browned beef aside.
Saute the onions: In the same pot, add a touch more oil if needed and saute sliced onions until deep golden, 8–12 minutes, scraping up browned bits.
Assemble & simmer (stovetop): Return beef to pot, stir in tomato paste (if using). Add stock or water to just cover meat and add potatoes if using. Bring to a simmer, then lower heat to gentle simmer, partially cover and cook 1½–2½ hours until beef is fork-tender and sauce is reduced and glossy. Stir occasionally.
Instant Pot alternative: Brown beef using Saute, saute onions, add beef and 1½–2 cups stock, seal and pressure cook on high 35–45 minutes (natural release 10–15 minutes). Reduce sauce using Saute mode if needed. Add potatoes after pressure cooking and simmer until tender.
Slow cooker alternative: After browning, transfer beef and paste to slow cooker with onions, potatoes and 1–2 cups stock. Cook on LOW 6–8 hours or HIGH 3–4 hours. Reduce sauce on stovetop if too thin.
Finish & season: Taste and adjust salt, add a pinch of sugar if the vinegar is too sharp, or a squeeze of lime to brighten. Swirl in 1 tbsp ghee or butter for extra silkiness (optional). Garnish with chopped cilantro and serve hot.