They are really easy to program if just basic timers or like you mention conditional relay switching, but where it starts to get more complicated is in what is that input that causes that conditional switch, or say real time switching with memory, and all the circuitry associated with them.
Ultimately its up to the user how complex or simple them make them.
Like for example my current watering timers have only about 7 lines of code and by lines i mean a couple of words and variables, very basic. But saying that i don't have memory functions or input functions for that like i use to in the past. But they are designed in a certain way where i have a power bypass push button, which just acts as a manual watering button which avoids the need for an input for the arduino to do that, and the code is designed in a way that it waters first then goes into a wait loop, so say in a situation such as a power loss, once the power comes back on it waters right away instead of say waiting 12+hrs, so i err on the side that they with get more watered than less, cause a power outage could be a bump to days.
But comparison wise say vs the timer above, my little attiny85 circuits with bypass button maybe cost me $2-3 dollars to make, the timer above which doesn't have a bypass button "which could be added" are about $3.50 on the slow boat from china, and $7-10 if getting within North America for myself. So really comes down to what you need or want, as there are alot more options available now compared to when i started going down the arduino route for control.