Ingredients:

  • 8 oz Ground Beef (80/20 mix preferred)
  • 8 oz Ground Pork (or Italian Sausage)
  • 1 Large Egg, lightly beaten
  • 1/2 cup Fresh Breadcrumbs (Panko or stale bread)
  • 1/4 cup Grated Parmesan Cheese (plus extra for serving)
  • 2 Tbsp Fresh Parsley, finely chopped
  • 2 cloves Garlic, minced (for meatballs)
  • 2 Tbsp Whole Milk
  • 1 tsp Kosher Salt
  • 1/2 tsp Black Pepper, freshly ground
  • 2 Tbsp Olive Oil, extra virgin, divided
  • 1 medium Yellow Onion, finely diced
  • 2 medium Carrots, peeled and diced
  • 2 stalks Celery stalks, diced
  • 3 cloves Garlic, minced (for soup base)
  • 1 (14.5 oz) can Crushed Tomatoes (San Marzano style preferred)
  • 6 cups Beef or Chicken Stock (low sodium)
  • 1 tsp Dried Oregano
  • 1/2 tsp Dried Basil
  • 1 Bay Leaf
  • 4 oz Spaghetti, broken into 1-inch pieces
  • Fresh Basil, torn (For garnish)
  • Parmesan Cheese, shaved or grated (For serving)

Instructions:

  1. Combine Ingredients: In the large mixing bowl, gently combine the ground beef, pork, egg, breadcrumbs, Parmesan, parsley, 2 minced garlic cloves, milk, salt, and pepper. Do not overmix! Mix just until combined to keep the meatballs tender.
  2. Form Balls: Roll the mixture into small, uniform meatballs (roughly 1 inch / 2.5 cm in diameter). This recipe should yield 30-35 meatballs.
  3. Brown (Optional but Recommended): Heat 1 Tbsp of olive oil in the Dutch Oven over medium-high heat. Brown the meatballs on all sides until nicely coloured (about 3-4 minutes). Remove the meatballs and set them aside.
  4. Sauté Aromatics: Reduce the heat to medium. Add the remaining 1 Tbsp of olive oil to the Dutch Oven. Add the diced onion, carrots, and celery. Cook gently for 8–10 minutes, stirring occasionally, until the vegetables have softened beautifully and the onion is translucent.
  5. Bloom Garlic and Herbs: Add the remaining 3 cloves of minced garlic, dried oregano, and dried basil. Cook for 60 seconds until fragrant.
  6. Deglaze and Add Liquid: Pour in a splash of the stock and scrape up any browned bits from the bottom of the pot. Add the remaining stock, crushed tomatoes, and the bay leaf. Stir well to combine.
  7. Simmer Meatballs: Bring the soup to a gentle boil, then reduce heat to low and place the browned meatballs back into the soup. Cover partially and simmer for 20 minutes, allowing the meatballs to cook through and the flavours to meld.
  8. Add Pasta: Increase the heat to bring the soup back to a rolling simmer. Add the broken pieces of spaghetti. Cook uncovered for 6–8 minutes, or until the pasta is al dente (tender but still with a slight bite).
  9. Adjust and Rest: Remove the bay leaf. Taste the soup and adjust the seasoning (salt and pepper) if necessary. Let the soup rest off the heat for 5 minutes before serving—this helps the flavours settle and prevents the pasta from overcooking immediately.
  10. Serve: Ladle into bowls and finish with a generous grating of fresh Parmesan cheese and torn fresh basil.