Crush the fennel in a mortar and pestle or with a spice grinder. Transfer to a small bowl. Add the oregano, basil, black pepper and crushed red pepper flakes. Stir to combine and set aside.
FOR THE MEATBALLS:
Preheat the oven to 375°.
In a medium skillet, heat the olive oil over medium heat. Add the onions and garlic and sweat them until the onions are softened and translucent and the garlic is fragrant. Remove from heat and set aside to cool.
In a large bowl, combine the bread crumbs and milk and set aside for a minute or two to let the bread soak up the milk. Add 3 teaspoons of the spice mixture, egg. and the cooled onion and garlic mixture. Stir well to combine.
Remove the sausage from its casings (if it has casings) and add to the breadcrumb mixture. Use your clean hands to mix the sausage completely with the breadcrumb mixture until it's evenly combined.
Using a mini 2-teaspoon cookie scoop, form the meatballs into small meatballs and place on a half sheet pan. (Note: the meatballs are very soft, so if you're rolling by hand, you may want to refrigerate the meatball mixture for 15-20 minutes, so it firms up and is easier to work with.)
Bake for 15 minutes or until the meatballs are lightly browned and cooked through.
FOR THE SOUP:
In a large stock pot or dutch oven, heat the oil over medium heat. Add the carrots, celery, onion and stir to coat with the oil. Cook for 5-6 minutes or until the vegetables become tender and the onions and celery look translucent.
Stir in the salt and garlic and cook for an additional minute until the garlic is fragrant. Add the remaining 1 teaspoon of spice mix and stir to combine.
Crush the tomatoes with your hands or a potato smasher and add the tomatoes and their puree to the pot. Add the broth and bay leaf and bring to a boil. Reduce heat to a low simmer and cook for 15 minutes.
Stir in the meatballs and pasta and simmer for 15 minutes. Stir in the chopped kale and heat through just until the kale wilts, about 5 minutes. Serve with grated parmesan cheese.