01 - Place a large skillet over medium heat and add the ground beef. Break the meat apart with a wooden spoon and cook until fully browned with no pink remaining, approximately 5 to 7 minutes.
02 - Add the finely diced onion to the browned beef and cook for 2 to 3 minutes until softened. Stir in the minced garlic and continue cooking for 30 seconds until fragrant.
03 - Drain any excess rendered fat from the skillet, leaving about 1 to 2 tablespoons in the pan to support the roux.
04 - Add the unsalted butter to the skillet and stir until completely melted. Sprinkle the all-purpose flour over the beef mixture and cook for 1 to 2 minutes, stirring constantly to form a smooth roux.
05 - Slowly pour in the beef broth and whole milk while whisking constantly to prevent lumps from forming. Continue whisking until the mixture is smooth and well combined.
06 - Stir in the Worcestershire sauce, salt, black pepper, paprika, and dried thyme. Mix thoroughly to distribute the seasonings evenly throughout the gravy.
07 - Bring the mixture to a gentle simmer and cook for 5 to 7 minutes, stirring frequently, until the gravy reaches your desired consistency and coats the back of a spoon.
08 - Taste the finished gravy and adjust the seasoning with additional salt and pepper as needed. Ladle hot over mashed potatoes, steamed rice, or split biscuits.