A lot of people have tried to explain what software development is using analogies. Even though analogies are not always efficient, they can highlight especially the problems in layman terms.
Kevin Barnes recently shows how a code garden makes more sense than the usual factory comparison. There have been more in the past:
I am sure there are many more,. I think analogies, work, but the same analogy does not work for everyone. It heavily relies on knowledge and perception of what is being used. That is why it is important to use the right analogy for the right audience. Also, it is a fact that software development has common aspects with other domains, but never all. That is one of the reason it cannot be used to explain it, but highlight only those aspects.
Having said that, I had tried my hand at it, and found myself likening it to running a restaurant. It was a good experience, helped me understand some things. What do you think? Have you tried a hand at it?