Software hovers around the line between barely works and almost works.
This has nothing to do with technology. It's human nature. Given the resources (time, skills, tools) needed to write software that more than barely works, almost everyone from the lowliest hacker to the biggest megacorporation will choose instead to write more software, or more complex software. New functionality is added or new ideas pursued until the software degenerates from “barely works” to “almost works”. At this point, either the effort is made to get the software back up to the barely works state, or it just gets worse until it is abandoned.
I think this is an important point in the SoftwareAppreciation category as well. I'd wager most not-very-technical managers of tech would not see something working as ‘barely working’, only to be surprised when the problems in the future crop up (see also TendingSoftware).