Preheat the oven to 350°F (175°C).
Pat the beef dry with paper towels. Season with salt and pepper.
Heat the oil in a large Dutch oven over medium-high heat.
Add the beef in batches, making sure not to overcrowd the pan. Sear for about 2–3 minutes per side, until each piece is nicely browned.
Transfer the browned beef to a plate and set aside.
Lower the heat to medium. In the same pot, add the serrano peppers, ginger, garlic, lemongrass, lime leaves, curry paste, and turmeric, stirring for 2–3 minutes until fragrant.
Stir in the sliced mushrooms and cook for 4–5 minutes, until they release their moisture and start to brown.
Pour in the coconut milk and water, stirring to fully dissolve the curry paste and lift any browned bits from the pot.
Add the palm sugar and fish sauce, stirring until the sugar melts. Taste and adjust seasoning with salt or pepper as desired.
Return the seared beef along with any juices to the pot. Add the chopped onion and carrots, stirring gently to coat everything in the sauce.
Cover with a lid and transfer the pot to the oven. Braise for 2½ to 3 hours, until the beef is tender and the sauce is rich and aromatic.
Remove from the oven. Discard the lemongrass pieces and lime leaves.
Let the curry rest, covered, for about 30 minutes before serving.
Spoon the tender beef, mushrooms, and creamy coconut sauce over steamed rice. Garnish with fresh cilantro, lime juice, and chili oil or chili flakes.