1) Make the meatballs
Heat oven to 400°F. Line a sheet pan with parchment.
In a bowl, gently mix beef, pork, breadcrumbs, Parmesan, egg, garlic, parsley, salt, and pepper. If it feels stiff or crumbly, add milk or water 1 tablespoon at a time to moisten. Roll into small meatballs, about 3/4-inch to 1-inch in diameter (roughly 24 to 30 meatballs).

2) Bake (or brown) the meatballs
Arrange meatballs on the sheet pan and bake 12 to 15 minutes, until lightly browned and cooked through. (Optional but helpful: aim for 160°F in the center for pork and beef.) Set aside.
3) Build the broth
In a large pot, warm olive oil over medium heat. Add onion, carrots, and celery. Cook 6 to 8 minutes, stirring, until softened. Add garlic and cook 30 seconds until fragrant.

4) Simmer
Add broth, Parmesan rind (if using), bay leaf, salt, and pepper. Bring to a simmer. If you are using a Parmesan rind, you can start a little lighter on the salt and adjust at the end.
Add the baked meatballs and simmer gently for 10 minutes so the flavors marry.
5) Cook the pasta
Stir in the pasta and simmer until just tender, usually 8 to 10 minutes (check your package). Stir occasionally so the small pasta does not cling to the bottom.
Best-for-leftovers option: Cook the pasta in a separate pot, then add it to each bowl when serving. That way it stays perfectly al dente and does not soak up all your broth overnight.
6) Add greens and finish
Stir in spinach (or escarole) and cook until wilted and bright. Spinach takes 1 to 3 minutes, escarole is usually more like 3 to 5 minutes, and thin-sliced kale can take 5 to 8 minutes. Turn off heat. Remove bay leaf and Parmesan rind.
Taste and adjust salt and pepper. If you want the soup to taste extra alive, add a small squeeze of lemon juice.

7) Serve
Ladle into bowls and finish with extra Parmesan and a pinch of red pepper flakes if you like a little heat. Bread is not required, but it is absolutely encouraged.