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