Heat olive oil in a large pot over medium heat. Add diced onion and sauté for 3-4 minutes until it starts softening and smells amazing. Stir in minced garlic and cook for another 30 seconds—don't let it burn or it gets bitter.
Toss in carrots, celery, potato, and zucchini. Stir everything together and let it cook for 5 minutes without adding liquid yet. This helps build flavor before the broth goes in.
Pour in vegetable broth and diced tomatoes with their juices. Add dried basil and oregano now—they need time to bloom and release their flavor. Bring everything to a boil, then reduce heat and let it simmer.
Simmer for 15 minutes until the potatoes are starting to get tender. This is when I taste and adjust seasoning with salt and pepper. The spring minestrone soup recipe base should taste pretty good at this point.
Add cannellini beans and pasta to the pot. Cook for another 10-12 minutes until the pasta is tender but not mushy. Stir occasionally so nothing sticks to the bottom (mine always catches a little and that's totally fine).
Fold in fresh spinach and lemon juice in the final minute. The spinach wilts down way faster than you'd think—I always panic it won't fit, but it absolutely does. Taste again and adjust seasonings to your preference.
Ladle into bowls and top generously with grated Pecorino cheese. I always drizzle a tiny bit of olive oil on top because why not. Serve immediately or refrigerate for later—it honestly tastes better the next day.