Prep the oven and pan: Preheat the oven to 375°F (190°C). Lightly oil a 9x13-inch baking dish or similar casserole pan.
Cook the noodles (if not using no-boil): Bring a large pot of salted water to a boil.
Cook lasagna noodles until very al dente, about 2 minutes less than package time. Drain and lay flat on a lightly oiled sheet to prevent sticking.
Brown the meat: Heat olive oil in a large skillet or pot over medium-high heat. Add ground beef (and sausage if using) and cook, breaking it up, until browned and no longer pink.
Drain excess fat if needed.
Sauté aromatics: Add onion and cook until softened, about 4–5 minutes. Stir in garlic and cook 30 seconds until fragrant.
Build the sauce: Stir in crushed tomatoes, tomato sauce, and tomato paste. Add oregano, basil, thyme, red pepper flakes (if using), sugar (if needed), and a generous pinch of salt and pepper.
Reduce heat and simmer 15–20 minutes, stirring occasionally. Taste and adjust seasoning.
Mix the ricotta layer: In a bowl, combine ricotta, egg, Parmesan, parsley, a pinch of salt, and a few grinds of black pepper. Mix until smooth.
Layer the lasagna: Spread a thin layer of sauce on the bottom of the baking dish.
Add a layer of noodles, slightly overlapping.
First layer: Spread one-third of the ricotta mixture over the noodles. Sprinkle with mozzarella. Spoon sauce over the top.
Repeat layers: Add another layer of noodles, then ricotta, mozzarella, and sauce.
Repeat for a total of three layers, ending with sauce on top.
Finish with cheese: Sprinkle remaining mozzarella and a handful of Parmesan over the top. Cover the pan loosely with foil, tenting it so the cheese doesn’t stick.
Bake: Bake covered for 25 minutes. Remove foil and bake another 15–20 minutes, until the top is bubbly and lightly golden.
Rest before slicing: Let the lasagna rest for at least 15–20 minutes.
This helps it set, making cleaner slices and better texture.
Serve: Garnish with extra parsley and a little Parmesan. Slice and serve warm.