Melt your butter in a heavy-bottomed pot over medium heat. Add the rice and stir constantly for about 2 minutes—you want to coat every grain. This toasting step builds flavor and keeps the rice from getting mushy later. It's a small move but it matters.
Pour in the milk slowly while stirring, then add sugar, cinnamon, cardamom, and salt. Bring everything to a gentle simmer, not a rolling boil. Reduce heat to medium-low and let it bubble away gently for about 35-40 minutes, stirring occasionally.
You'll hear it bubble and pop as it cooks—that's your sign it's working. The rice should be completely tender and the liquid mostly absorbed but still creamy (not dry). Mine always sticks a little to the bottom and that's fine, just keep stirring every few minutes to prevent burning.
In a small bowl, whisk together the egg with a splash of the hot pudding mixture. This tempers the egg so it doesn't scramble. Slowly pour this back into the pot while stirring constantly—this makes the pudding extra silky and rich.
Add the vanilla bean paste and rose water, stirring until everything's combined. The pudding should be thick and creamy now, coating the back of a spoon. If it looks too thin, cook for another 2-3 minutes to let more liquid evaporate.
When your kitchen smells like warm vanilla and toasted spices, you're done. Fold in the shredded coconut gently. Taste and adjust sweetness if you need to—everyone's preferences are different, and that's totally okay.
Transfer to a serving bowl or individual cups and let it cool for about 10 minutes. Top with chopped pistachios right before serving for that crunch factor. The creamy rice pudding recipe is best served warm or at room temperature, not cold.