Heat oil in a Dutch oven (or large cooking pot) for 2 minutes over medium-high heat until the oil starts to sizzle and shimmer. Add cubed beef chunks and stir well to cook evenly for 6-8 minutes until the beef browns.
Add onions, garlic, and ginger. Mix well by stirring with a spatula for about 2 minutes until fragrant. Add all the seasonings, including curry powder, cumin, soy sauce, brown sugar, black pepper, and bay leaves. Continue stirring to combine for about 3 minutes.
Stir in coconut milk and broth to combine. Turn the heat down to medium-low and cover the lid. Simmer for 25 minutes until the beef is tender, stirring occasionally to cook the beef evenly. To check the tenderness of the beef, use a fork. If you can insert a fork into the center of the beef with little resistance, it's cooked fork-tender.
Add potatoes and carrots and bring to a simmer uncovered. Stir occasionally and cook for 15 minutes until the potatoes and carrots start to soften. Add ¼ cup water if needed to thin out the sauce (if it gets too thick). Remove the pot from heat and let it rest for 20 minutes to slightly cool down. The longer it rests, the more flavorful the beef curry gets.