Writing software is easy. Writing the right software is hard. A lot of the time, that's the problem: teasing out the requirements from the client, and then separating the blue-sky dreams from what should actually be done. A lot of software projects, even if they're on track for budget and time get into trouble when the clients ask for more. Cowboy developers who grew up writing their own software on their own time for their own amusement can take a while to learn that "could" and "should" are different. That is, in a way, even more important than the correct architecture. Badly written software that still functions is a pain, but software written to the wrong requirements doesn't do anyone any good.
Mokalus of Borg
PS - You have probably encountered both kinds.
PPS - Older software can drift either way, depending on whether the requirements change over time.