Combine all of the ingredients in a large bowl. Mix thoroughly until completely combined. If the mixture feels a little wet, add extra breadcrumbs until it is a little tackier. If the mixture feels dry or grainy, add a little extra milk.
Roll out meatballs about a ¼ cup in size. This should provide 20-24 meatballs.
Fill the pan with olive oil about a half-fingernail deep. Raise the heat to medium heat. Once hot, place your meatballs into the pan. Do this in batches and do not crowd the pan.
Fry the meatballs for 1 minute on each side until browned, or you can fry them all the way through until they reach 165 degrees, and end the cooking process here. I prefer to finish them in a tomato sauce. Remove the meatballs from the pan when they are browned all around and set them aside.
In the same pot, add a little olive oil. Add in sliced garlic and saute for 1-2 minutes. Pour in a 28-oz can of crushed tomatoes or hand-crush a can of whole plum tomatoes yourself. Add basil and salt, and bring to a simmer.
Transfer the meatballs to the sauce and allow them to simmer for at least 30 minutes but up to 2 hours. Remove the meatballs from the sauce and serve. Use the rest of the sauce in the pot to serve with pasta.
Video
Notes
I prefer to use a cast iron pan or stainless steel pan to fry meatballs if I'm not cooking them in the same pot as the sauce. It is best not to use a non-stick pan because you won't get a crust on the meatballs. Cast-iron and stainless steel retain heat really well, so all of the meatballs cook evenly and develop a nice brown crust
I used a ¼ cup of oil but depending on the size of your pan this can differ. You want the oil to be about half a fingernail deep in the pan.
Usually, I'm making meatballs with Sunday sauce. I simmer them in the sauce for 2-3 hours. The longer you simmer them, the softer they will be.
Don't overwork the meatballs. The more you mix together the meat, the denser it will get which will result in hard meatballs.