Set the chunks of beef into a bowl or sealable baggie. Whisk together the fish sauce, 5-spice powder, salt and pepper. Pour over the beef and marinate while you prepare your other ingredients. (NOTE: I like to marinate at least 30 minutes, though longer is better. Consider starting your marinade the morning of cooking).
Heat the vegetable oil in a large pot or Dutch oven to medium-high heat. Add the beef in batches and brown each side, turning as needed – about 10 minutes total. Set the beef aside onto a plate.
Reduce the heat to medium and add the onion and peppers. Cook for 10 minutes, stirring often, until the onion starts to brown.
Add the garlic and cook for 30 seconds, or until the garlic blooms.
Stir in the lemongrass, ginger, tomato paste, star anise, and ground annatto. Mix well in the bottom of the pot.
Add the beef stock and coconut water, then the browned beef along with any juices from the plate. Bring to a boil, then reduce heat. Cover and simmer for 1.5 hours, or until the meat is tender, stirring as needed.
Add the carrots, chili oil, and soy sauce. Stir, then cover and simmer 30 minutes, or until the carrots are cooked and the beef very tender. Remove from heat.
Stir in the fish sauce. Taste and adjust for salt and pepper.
Serve with Thai basil or fresh chopped herbs.