Software has long suffered with the analogy of building
construction. While it is certainly handy, and generally well
accepted, I would like to propose my top 10 alternative
analogies for software development.   10- Politics  Creating
software is like being an elected official. You get into it to
do something, achieve something, and participate in something
larger than yourself. You are "forced" to take on non-productive
tasks like fund raising and campaigning. Eventually you stop
fighting it and set aside a (growing) percentage of your
otherwise productive time. Accomplishment slowly moves from what
you can do to what you can get others to do and success is
measured through polling and statistics. Instead of counting
delivered projects, you know what percentage of projects
succeed; in place of consistently delighted customers you trend
against customer satisfaction scores.  9- Music  Great software
is like great music, you might not know it when you first
encounter it but compared to some number of others it