One of the more interesting capabilities of Revit (for a long time now, not a recent one) is the concept of Phases. Specifically, that you can define, for example, the "Existing" state of a building, then define a "New Construction" phase and demolish existing elements (like walls) as well as add new elements.
Internally, each type of element within Revit has a "PhaseCreated" and a "PhaseDemolished". Sounds pretty cool, right? It is.
A Couple More Worthwhile Notes...
As I understand it (and real Reviteers, please jump on me if I'm wrong on this) - while Elements can be created or demolished in particular phases, they cannot change. If the idea is to change something, it must be demolished and re-created. Another interesting behavior is that of Room objects - room objects are locked to a single phase (which makes some sense, seeing that they would wind up changing between phases if you dropped in a wall, for example). Some strange things do happen out there in the wild, though - case in point - an existing window which is demolished seems to magically cause a "filler wall" to be created.
A Developer's Life Gets Harder
Here's where the hard part comes in as an application developer, though - when you have multiple phases within one model, are moving into not just 3D CAD but 4D (time). As developers we are used to dealing with the model as "the current state reality" - but in Revit, when you dig through the model, you're digging through a whole potential timeline of model construction - you have to do extra work to determine the state of the model as of "Phase X".
For example, if you're interested in the "New Construction" phase, you need to ignore any elements that are existing but demolished as part of the "New Construction" phase.
One of the interesting new capabilities in 2008 is that you can access the ROOM, TO_ROOM and FROM_ROOM for FamilyInstances (doors, windows, light fixtures, etc). The trick is that this ability to access room data is actually "Phase-based" - when you want to know, for example, which room a desk is in, you have to specify during which phase of construction.
The more I grasp the Revit Phased approach, the more I think that most of the applications we're developing will need to prompt the user for which phase they should work on. While specific companies may not be using Phases today - you probably still need to support the phase checking concept (because if you don't and someone decides to "try it", then you'll probably get the wrong answer!).
To that end, we're posting a new version of Earth Connector for Revit, which prompts the user for which Phase they would like to display.
This 4D stuff is cool, but developers may need to stock up on some Ibuprofen.