CREATE SOMETHING teaches through multiple modalities: interactive web experiences and exportable videos. Both need the same animations—a tool receding into use, an IDE dissolving into a terminal, text revealing character by character.
The naive approach: duplicate the animation logic in both frameworks.
// The duplication problem
// Svelte version (LessonRemotion.svelte) const hammerOpacity = $derived( $progress < 0.2 ? 1 : $progress < 0.6 ? 1 - (($progress - 0.2) / 0.4) * 0.7 : Math.max(0, 0.3 - (($progress - 0.6) / 0.4) * 0.3) ); // Remotion version (ToolReceding.tsx) const hammerOpacity = interpolate(progress, [0, 0.2, 0.6, 1], [1, 1, 0.3, 0]);
This violates DRY (Don't Repeat Yourself)—one leg of the Subtractive Triad. When we update timing in one place, we must remember to update it in another. The animations drift. Consistency erodes.
The Subtractive Triad: Heidegger (remove obscurity), Rams (remove excess), DRY (remove disconnection). The duplication problem violates the third principle.