I think it also failed because it was difficult to describe the contract that the components provided in enough detail to be useful.
I think a lot of the success in the use of LLMs in programming comes as the realization of 80s-era software reuse — the LLM is able to pattern match the users needs and the software approaches it has encountered in is omnivorous tour of published material.
(Mind you, a lot of people do it sloppily, but “90% of everything is crap”)