In a large bowl, combine the ground beef, egg, breadcrumbs, Parmesan, garlic, Italian seasoning, salt, and pepper. Mix everything with clean hands until well combined. Roll the mixture into small 1-inch meatballs. Try to make them even in size so they cook uniformly.
Place the meatballs on a plate or tray and set aside while you prepare the soup base. If time allows, refrigerate them for 10 minutes to help them firm up.
In your Dutch oven, heat the olive oil over medium heat. Add the chopped onion, carrots, and celery. Cook for about 5–7 minutes, stirring now and then until the vegetables start to soften. Toss in the minced garlic and let it cook for another minute until fragrant, but not browned.
Pour in the chicken broth and the can of diced tomatoes, juice and all. Turn up the heat and bring everything to a gentle boil. The aroma at this point is so inviting!
Carefully drop the meatballs into the simmering broth, one by one. Reduce heat to low, cover the pot with a lid, and let them cook gently for about 20 minutes. They’ll infuse the broth with flavor as they cook.
Stir in your small pasta and cook for about 8–10 minutes, until it’s tender. Add chopped spinach or kale in the last few minutes so it wilts down nicely. You don’t want to overcook it.
Taste the soup and adjust seasoning with extra salt or pepper if needed. Ladle into bowls and top with freshly chopped parsley or even more Parmesan if you like.