Making the Invisible Visible: Observing Complex Software Dynamics