Add the olive oil and butter to a soup pot and heat it over medium heat. Once the butter is melted, add the onion and celery. Sauté these until they become soft and lightly browned, which should take about 7 to 10 minutes. You want them to be fragrant and slightly caramelized for depth of flavor.
Next, stir in the garlic and cook it for about 30 seconds. You should be able to smell the wonderful aroma of the garlic filling your kitchen. Be careful not to burn it, as burnt garlic can turn bitter.
Now, pour in the chicken or vegetable broth along with the Italian seasoning. Stir well to combine everything together.
Add the cut asparagus and diced potato to the pot. Increase the heat to high and bring the mixture to a boil. Cover the pot with the lid slightly open to let some steam escape. This will help the soup cook evenly while keeping it from boiling over.
Once it reaches a boil, reduce the heat so it's gently simmering. Let it cook until the potatoes are tender, which should take about 15 minutes. You can check by piercing them with a fork—the fork should slide in easily.
After the potatoes are cooked, it’s time to blend the soup. You can use an immersion blender to puree it right in the pot or transfer it in batches to a regular blender. If you're using a regular blender, let the soup cool for a bit before blending to avoid any hot splashes.
Once blended to your desired consistency, stir in the lemon juice and heavy cream. This adds a lovely creaminess and brightness to the soup.
Season the soup with salt and pepper as needed. I find that it often needs a generous amount of salt to bring out the flavors fully.
Serve the soup immediately, garnished with additional asparagus tips or a swirl of cream if desired. Enjoy your delicious creation!