Runtime reflection ------------------ See for background: https://github.com/fare/fci2017 Ideas of systems with observability: 1. Animation. Abstract layer: imperative language for drawing circles, lines, rectangles. Concrete layer: imperative language for changing the colour of pixels. You can migrate animations. 2. Controlling microcontrollers. Abstract layer: state machine with input buttons and output LEDs. Concrete layer: Arduino/other microcontroller assembly. You can migrate programmes from one microcontroller to the other.