Bring the water to a boil in a medium saucepan, salt the water lightly, and add the asparagus spears. Cook at a lively simmer for 10 minutes. Lift out with tongs and set aside. Reserve the cooking water.
In a separate saucepan large enough to hold the finished soup, heat the butter, add the chopped shallot, and cook gently until soft but not browned. Add the cooked asparagus spears and one cup of the cooking water and bring to a boil. Cook at a lively simmer for 5 minutes. Remove from the heat and strain the soup through a medium sieve into a bowl, reserving the liquid.
Purée the solids in a food processor with enough of the reserved liquid to allow the mixture to purée smoothly.
Strain the purée through the sieve back into the non-reactive saucepan, rubbing the mixture through with a flexible scraper or wooden spoon and leaving the fibrous parts in the sieve. Discard the contents of the sieve.
Add the cream and enough of the remaining asparagus cooking water to give the soup the consistency you want. Season to taste with salt, freshly ground black pepper, and cayenne pepper. Reheat gently over low heat, making sure not to let the soup boil.
Serve hot or chilled. (If you want to serve it chilled, let it cool, then refrigerate it uncovered until thoroughly cold, then cover with plastic wrap. You can keep it refrigerated for up to 2 days.)
Don't be tempted to omit the final straining of the soup! If you leave the bits of fibrous asparagus skin in the soup, they give it a very unpleasant texture. Use a sieve with a medium mesh, not too coarse and not too fine: too coarse will let too much of the fiber through, too fine will make the job of straining too difficult.
The richest version of this recipe, using a full cup of whipping cream, produces an especially luscious and velvety soup. For a lighter soup with fewer calories, use the smaller amount of whipping cream or substitute light cream. If you're planning to use only 1/4 cup of cream, cook the asparagus in 3 cups of water so that you'll have enough cooking water to add to the finished soup to achieve the right consistency.
To make this soup vegan, cook the asparagus in 3 cups of water, omit the cream, and use oil instead of butter to cook the shallot.