Before you do anything else, add breadcrumbs and milk to a large bowl and stir to combine. Let them soak while you continue.
In a large pot or Dutch oven, heat the ½ cup olive oil over medium heat. Add the finely chopped onion and cook for 6-8 minutes, stirring occasionally, until softened and translucent. Add garlic and stir for 2 minutes until fragrant.
Scoop out half of the cooked onion and garlic mixture and add it to the bowl with the milk-soaked breadcrumbs.
Leave the rest in the pot on medium heat.
Add the tomatoes with their juices to remaining onion, garlic and oil in the pot. Stir in the salt and basil, cover partially, and bring to a simmer. Puree with an immersion blender (or carefully in batches using a regular blender), if desired.
Let the sauce cook on low while you prepare the meatballs.
Stir the eggs into the breadcrumb mixture with a fork, then add the ground meat, parmesan, parsley, salt, and black pepper. Gently mix with your hands until just combined.
Shape the mixture into 2-inch meatballs and place them on a plate or tray. You'll get about 24 meatballs.
Optional: Freeze for 5 minutes (this helps them hold their round shape).
Preheat a large skillet over medium heat for 4-5 minutes, then add the oil.
Once the oil is shimmering hot, add the meatballs in batches and cook until browned on all sides, about 6-8 minutes per batch.
Transfer the browned meatballs to the simmering tomato sauce. Discard the meatball cooking oil (it will not add good flavor to the sauce).
Gently stir the meatballs into the sauce to coat them evenly. Cover partially and simmer for 20 minutes until the meatballs are cooked through (to 165ºF).
Taste and adjust seasoning to taste. I like to add a little splash of soy sauce if the sauce needs more salt - this gives an umami boost in addition to the salt.
