The synchronous programming paradigm simplifies the specification and verification of reactive systems. However, synchronous programs must be often implemented on architectures that do not follow this model of computation (like distributed systems or systems-on-a-chip). This gives rise to desynchronization techniques, which map the synchronous program to a platform without global time while preserving the original synchronous semantics. In this paper, we present a new approach to desynchronize synchronous programs. Our approach is based on partitioning the system and deriving suited computation modes for that partitioning. These computation modes dynamically decouple the components of a system by eliminating temporarily unnecessary and undesired computations and communications. We present several variations of the general concept and discuss their pros and cons. Finally, we illustrate our approach with the help of several small examples.