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()

# add a theme
p + geom_point() + geom_line() + theme(
panel.background = element_rect(fill = NA),
panel.grid.major = element_line(colour = "grey50"),
panel.ontop = TRUE)

# add a title and lable axes
p + geom_point() + geom_line() + theme(
panel.background = element_rect(fill = NA),
panel.grid.major = element_line(colour = "grey50"),
panel.ontop = TRUE) + ggtitle("Illustrative Plot") + xlab("Miles per gallon") + ylab("Horsepower")

Created on 2020-01-06 by the reprex package (v0.3.0)