As a foodie who's had to repeatedly explain my job in free/open source software creation to non-technical people (hello, I greatly appreciated the brilliant analogy in "I am a software chef" by Stanislav Ochotnicky.

I am a software chef. I create recipes and prepare them. I work in a restaurant, that we call Linux distribution. There are many restaurants, each having their own recipes, rules and so on... Each restaurant usually has hundreds of chefs, some of them specialize in few recipes (build scripts), some are more flexible. In my case I specialize in a type of recipes dealing with coffee (i.e. Java)... Quite often the food is made of more recipes (dependencies) and I have to create those first. Sometimes these recipes are already being prepared by other chefs, so I just use their work for my final meal...

Creating recipes is only part of my job though. I also work with our suppliers of ingredients (upstream developers)... Third part of my job is improving cooking process... So sometimes I move some furniture around so that other chefs don't have so much between the fridge and other places. Or I create a new mixer (tools) that speeds up mixing of ingredients.

The full analogy is in Stanislav's blog post, and I can't help but think this would make an excellent lesson plan somewhere.