This is my big-batch, two–sheet-pan version of classic spaghetti and meatballs, built for feeding people without stress. The meatballs are intentionally rich, a mix of 75/25 beef and ground pork or veal, so the method is designed to keep them tender and flavorful without turning your sauce into an oil slick. The sauce itself is flexible and family-style, a layered tomato base with just enough natural sweetness to feel balanced, not sugary.
The key move here is separating structure from flavor. The meatballs are par-baked on racks first to set their shape and shed excess fat, then finished gently in the sauce so everything comes together without heaviness. It is a practical, forgiving approach that scales well, freezes well, and tastes like you worked harder than you actually did.
This is not a precious recipe. It is designed to be adjusted by the size of your pot, the appetite of your table, and the truth of what your sauce looks like in the moment. The guardrails are here so you can relax and cook with confidence, not second-guess every step.
Snapshot
- Implements: large mixing bowl; wire rack plus 2 sheet pans; foil for lining pans; very large Dutch oven or stock pot (or two pots); tongs or a slotted spoon; optional instant-read thermometer
- Oven setting: 425°F (218°C) for par-baking meatballs
- Stove setting: medium heat for sauce aromatics, low for simmering
- Batch size: approximately 40 meatballs (2-inch size), enough sauce to simmer the batch and serve with spaghetti (extra meatballs and sauce likely, freeze and feel victorious)
Ingredients
Part 1: The sauce (big enough to simmer everything)
Aromatics
- 2 to 3 Tbsp olive oil
- 2 large yellow onions, finely chopped (or grated for a smoother sauce)
- 4 to 5 garlic cloves, smashed or finely minced (measure with your heart)
- 1 (6 oz) can tomato paste
- 1 to 2 whole carrots, peeled (for sweetness, removed later)
- Salt to taste
Tomatoes (start with 6 cans, then adjust with full cans only)
Start with:
- 2 (28 oz) cans tomato sauce
- 2 (28 oz) cans whole San Marzano tomatoes
- 2 (14.5 oz) cans diced tomatoes (fire roasted is great; Italian-seasoned is fine but reduce added herbs)
Optional adds you may use based on pot volume:
- 1 to 3 additional large (28 oz) cans of tomato sauce or whole/crushed tomatoes (added only if needed for volume)
Seasoning and depth
- 1 Parm rind (optional but highly recommended)
- 2 to 3 bay leaves (optional, but classic)
- Dried basil, 1 to 2 Tsp (or to taste)
- Dried oregano, a pinch (seriously)
- Kosher salt, added gradually
- Sugar, ½ Tsp at a time at the end if needed (optional)
Optional umami helper (use restrained)
Choose one, only if the sauce tastes hollow after simmering:
- Better Than Bouillon Roasted Beef, ½ to 1 Tsp max for a full pot
or
- Knorr Rich Beef stock pot, 1 max
Optional finishing balance
- Red wine vinegar or lemon juice, 1 Tsp at the end if it tastes heavy (optional)
Part 2: The meatballs
Meat
- 2 lb ground beef (75/25)
- 1 lb ground pork OR veal
Panade (choose one)
Option A (classic):
- 1¼ cups white bread, crusts removed, torn small
- ¾ cup whole milk (or 2%)
Option B (plush with a little extra structure):
- ¾ cup white bread, crusts removed, torn small
- ½ cup plain panko breadcrumbs
- ¾ cup whole milk
Flavor and binders
- 2 large eggs
- ½ cup finely grated Parmigiano-Reggiano (green can is totally fine!)
- 2 to 3 Tbsp freeze-dried parsley
- 2 to 2½ Tsp garlic powder
- 3 Tsp onion powder
- 1¼ to 1½ Tsp freshly ground black pepper
- 1 Tsp fennel seed (optional)
- ⅛ to ¼ Tsp freshly grated nutmeg (optional)
- 1½ Tsp kosher salt to start (adjust after test patty, likely 1½ to 2 Tsp total)
For par-baking
- Olive oil or nonstick spray (for the rack)
Part 3: Pasta and serving
- Spaghetti, 1.5 to 2 lb depending on crowd
- Parmigiano-Reggiano, for serving
- Parsley, chopped, for serving (optional)
Method
Start the sauce and get it simmering
Sweat the onions
Heat olive oil in a large pot over medium heat. Add the onions and cook, stirring frequently, until very soft and translucent, 8 to 12 minutes. You want sweet and mellow, not browned.
Add 1 to 2 Tsp salt here to begin building flavor.
Add the garlic for the last 30 to 60 seconds until fragrant.
Add tomato paste and cook until brick red
Add the tomato paste and cook, stirring frequently, for several minutes until it deepens to brick red. This builds a deeper flavor base.
Add your other tomatoes
Add
- 2 (28 oz) cans of tomato sauce
- 2 (28 oz) cans of whole tomatoes (crush by hand as you add)
- 2 (14.5 oz) cans of diced tomatoes
Rinse your 2 cans of sauce with about half a can’s worth of water (you can splash back and forth to rinse) then add this sauce water to the pot.
Add the whole peeled carrot(s), Parm rind, and bay leaves if using.
Bring to a gentle simmer, then reduce heat to low.
Let it simmer
Simmer partially covered, stirring occasionally. While it simmers, make the meatballs (step 2). The sauce wants at least 30 minutes total, longer is better. 60 to 90 minutes is excellent.
Make the meatballs (while the sauce simmers)
Make the panade
Pre-heat oven to 425°F (218°C).
Combine bread and milk and let sit 5 minutes. Mash into a thick paste. If it’s soupy, squeeze gently. If it’s dry, add a splash more milk.
If using the bread plus panko option, stir panko in after the bread becomes a paste.
Mix the flavor base
In a large bowl, mix thoroughly:
- panade
- eggs
- Parm
- freeze-dried parsley
- garlic powder
- onion powder
- black pepper
- fennel seed (if using)
- nutmeg (if using)
- 1½ Tsp kosher salt
Add meat and mix
Add the beef and pork (or veal). Mix until combined. Don’t be afraid to get your hands dirty.
Test patty
Cook a small patty and taste. Adjust salt, pepper, and other seasoning to your taste.
Shape
Roll into 2-inch meatballs. Lightly packed, not compressed.
Par-bake on a rack (your grease-control step)
Line sheet pans with foil. Place wire racks on top. Lightly oil the racks.
Arrange meatballs with a little space between.
Bake 12 to 15 minutes, until they are set and lightly browned but not fully cooked through. Optional nerd target: 120 to 130°F (49 to 54°C) internal.
You will see a lot of fat on the pan. That’s correct.
Check the sauce and adjust volume if needed
Sauce texture choice:
If you want it smoother, use an immersion blender in quick pulses. Stop before you get to a full puree.
Make sure the sauce volume matches the batch
This is where we keep it sane.
Before adding meatballs, look at your pot and ask:
“If I add all my meatballs, will they be mostly submerged without stacking too tightly?”
- If yes: proceed.
- If it looks tight: open one additional 28 oz can (sauce or whole) and simmer 10 minutes.
- If it looks crowded or stacked: open two additional 28 oz cans, one at a time, simmering briefly between.
Also: if your pot can’t comfortably hold everything, split sauce into two pots now. (And put a bigger pot on your shopping list for next time.)
Finish meatballs in the simmering sauce
Bring sauce back to a gentle simmer.
Add meatballs in batches if needed so you don’t break them.
Simmer gently 25 to 40 minutes, partially covered, stirring from the bottom occasionally. Avoid boiling hard.
As they simmer:
- the meatballs finish cooking
- the sauce thickens
- some fat renders into the sauce (good flavor, controlled)
Optional: beef base
After the meatballs have simmered 15 to 20 minutes, taste the sauce.
Only if it tastes hollow, dissolve and add:
- ½ Tsp BTB or ½ Knorr pot, taste, then decide if it needs more
Stop before it becomes stew-like.
End adjustments
Remove carrot(s), Parm rind, bay leaves.
Taste and add, if needed:
- salt
- a small pinch of sugar (½ Tsp at a time)
- if it tastes heavy, add 1 Tsp red wine vinegar or lemon juice
Cook spaghetti and combine intelligently
Bring a large pot of salted water to a boil.
Cook spaghetti until just shy of al dente.
Reserve 2 cups pasta water, then drain.
The best serving approach
In a large pan or pot, toss pasta with a few ladles of sauce and a splash of pasta water until glossy and well-coated.
Serve meatballs on top. Spoon extra sauce over everything.
Finish with Parm and parsley.
Notes, swaps, and guardrails
Why this method works for 75/25 beef plus pork or veal
High-fat meat stays juicy, but can turn greasy. Par-baking on a rack renders excess fat early. Finishing in sauce prevents drying and adds cohesion.
Variation: Using Italian sausage
If you prefer to use 1 lb Italian sausage (sweet, hot, or a mix) instead of ground pork or veal:
- Reduce salt significantly. Start with ½ to ¾ Tsp and finalize after a test patty. Sausage is already heavily seasoned and salted.
- Garlic and fennel may be reduced or omitted entirely, depending on your sausage brand and desired flavor profile.
- Seasoning becomes more brand-dependent. Taste your sausage first, then adjust the additional seasonings accordingly. Some sausages are already very garlicky, while others are milder.
Oregano rule
A pinch only. Too much equals pizza. You’re right.
Sauce too thick?
Add hot water or pasta water a little at a time. This is tradition, not dilution.
Sauce too thin?
Simmer uncovered longer. Tomatoes will concentrate.
Meatballs dense?
Usually overmixing or overpacking. Fold gently, roll lightly.
Meatballs falling apart?
Usually too-wet panade. Also, make sure they par-bake long enough to set before saucing.
Storage and freezer plan
- Meatballs plus sauce keep 4 days refrigerated.
- Freeze meatballs in sauce or separately.
- Reheat gently by simmering, not microwaving into rubber.