Describir: Software architectures to improve programmability and in-situ visibility of cyber-physical systems