Engineering is about following best practices based on empirical data/knowledge as much as possible and "winging it" when faced with the unforeseen. Although "winging it" is a bit of a loose statement because generally unforeseen challenges are usually solved based on past experience and quite a bit of lateral thinking.
Therefor in my opinion software development "done properly" has more in common with engineering than gardening. :-)
Therefor in my opinion software development "done properly" has more in common with engineering than gardening. :-)