If you go back to the ggplot book, the grammar of graphics philosophy is heavily oriented toward layers. This naturally leads to an approach of beginning with the most basic and proceeding to the more specific.
library(ggplot2)
# adapted from documentation
# base object -- note not suitable for ALL geoms, such as geom_histogram()
p <- ggplot(mtcars, aes(wt, mpg))
# add a geom
p + geom_point()
# add a second geom
p + geom_point() + geom_line()
I'm not sure if I know of a consensus/good practice, but I typically do:
ggplot() call.
All geom_ and/or stat_ functions (in the order that I want them to get some elements drawn over others, for example).
scale_ functions
facet_ functions
Labels (using labs(), usually)
theme() settings
In the (rare) event that I need more fine-grained control over my legends, I put the functions controlling them in between the facet specifications and the labels.