For years I have thought that software development is very similar in feeling to archaeology. As a software developer you get to work on that legacy project that is ancient. The ancient developers are gone and you are on your own. You start to dig into the project and discover different artifacts that tell the story of the project. Sometimes you can uncover written traces from the past that we usually call comments. These traces can be hard to understand especially if the landscape around them has changed and they are now out of context. The ancient texts are sometimes written in a language you do not understand. However written traces are sparse and you usually need to uncover other artifacts like code fragments or just try to reimagine the life of the ancients by clicking on the software buttons and tracing code paths. There are layers of code from different ages. You can see how requirements changed through the ages and the developers adapted and changed their ways. Usually more recent code destroys and replaces the older code but you can always discover something from the dawn of ages. Sometimes you are required to restore broken artifacts from the past. You can use modern tools to do so but you need to preserve their original function and they should be able to work together with all the other ancient code.
Sometimes you are amazed of what the long gone developers have done with their primitive tools. They built ships of wood and giant pyramids without machines. They did not have generics in the language, cool IDEs and refactoring tools. They were strong and conquered the hostile territories of the far north and south. They wrote their own web services implementations and parsed XML as string using clever patterns and had patience and willpower that developers nowadays lack.
More often however the ancient developers were not that clever. They had no knowledge of simple according to our standards things. They did not know they could smelt metals to create tools, they did not know they should not drink and eat from lead cups and plates. Things like semantic HTML, unit tests and separating code into layers were unbeknownst to them.
Sometimes you uncover scenes of bloody sacrifices due to absurd superstitions or simply scenes of horrific, barbarian brutality. These moments can make you really sad when you dig all the skeletons. Your reaction is usually "WTF?!?!?" and the skeletons are often on display in The Daily WTF museum
for other archaeologists to study.
If you study the ancients long enough you get to know their ways and you become good at navigating their catacombs. You can predict what artifacts you will find and you can restore them faster. You become used to the horrors of the bloody sacrifices and they do not scare you so much anymore. At this point you may become indifferent and start to commit atrocities (into SVN) similar to the ancients. However you may also realize that you are now part of history and you are responsible for what future archaeologists will find. You can make their lives easier and make them admire your work or you can horrify them. The choice is yours.
It seems like there is even a term "Software Archeology