I think the major difference is that on the art side, things can be developped more or less in isolation of each other. Assets don’t affect each other; once an asset is done, modifying or working on another asset isn’t gonna make you rework all the previous assets.
Programming is very different in that aspect. Every single system you implement affects all other systems ( I’m simplifying of course, but that’s more or less true ). Other systems start to break down, or function in a different way than you expected. Basically, the entire thing becomes a beast that you can’t control anymore. And it’s exponential. Managing a dozen systems is still doable, adding a 13th requires to verify that the 12 previous ones are still working as expected. But when it’s your 500th system you’re adding, and it can break or affect hundreds of existing ones, suddenly the complexity explodes.
Basically, think of it that way: when systems are totally independant of each other, like art assets, complexity ( like the time & effort it takes to do the job ) is additive: if you have 5 assets, A B C D and E, then the total complexity of the system is A + B + C + D + E.
Programming isn’t additive, it’s more like it’s multiplicative. It becomes A * B * C * D * E.
The entire program’s complexity doesn’t become understandable by a human anymore. You can still design new systems, and “estimate” how long it’ll take to implement them, but that’s only in a “black box” environment. Now fit that same system in an existing environment with hundreds of other systems, and how the hell are you supposed to estimate how long it’ll take to make it work with everything else ?
To make a comparison as an artist, if A B C D are spaceships and you’re starting to work on “E”, imagine if things suddenly started to break randomly in either of A, B, C and D. Like, some vertices would get randomly displaced ( every time you add a triangle to E, you’d have to verify if the meshes of A B C and D weren’t affected. And most likely they were ). Or some textures get some corruption, and you have to partially remake them. Every. Single. Time. Imagine that ? Well, that’s the life of a programmer 
And in a nutshell, that’s why estimating how long it takes to implement something is more of the art of divination than engineering. And that goes worse and worse as your program grows. The beast feeds on itself.