Begin by trimming the woody ends off the asparagus, then peel the lower stalks if they seem tough or stringy. Chop the asparagus into 2-inch pieces, keeping some tips aside for garnish if you like.
Peel and dice the potatoes into roughly 1-inch cubes. Rinse them in cold water to remove excess starch, which helps keep the soup smooth and velvety.
Heat the olive oil in a large heavy-bottomed pot over medium heat. Add the chopped onion and minced garlic, sautéing gently until fragrant and translucent, about 3–4 minutes. The kitchen should fill with a sweet aroma as they soften.
Add the diced potatoes and chopped asparagus to the pot. Stir well and cook for another 2–3 minutes, allowing the vegetables to mingle and develop a slight sheen.
Pour in the vegetable broth, then bring everything to a gentle boil. Reduce the heat to low, cover the pot, and let it simmer for 15–20 minutes, until the potatoes are very tender and the asparagus tips are soft but still vibrant green.
Once cooked, carefully remove the pot from heat. Use an immersion blender directly in the pot to puree the soup until smooth and silky, or transfer in batches to a blender. Be cautious and blend until the mixture is velvety, about 1 minute.
Return the pureed soup to low heat. Stir in the heavy cream or coconut milk, then season with salt and pepper to taste. Squeeze in the juice of half a lemon to brighten the flavors, stirring gently to combine.
Let the soup sit off heat for a couple of minutes to meld the flavors. Taste and adjust seasoning if needed, adding more salt, pepper, or lemon juice for balance.
Ladle the hot, velvety soup into bowls. Garnish with reserved asparagus tips or a drizzle of olive oil if desired. Serve immediately, enjoying the vibrant color and comforting texture.