This chapter describes controller-based software. It explains how controller-based designs are used to build orchestration software that manages service deployments of cloud services; a later chapter discusses how controller-based designs are pertinent for devices in the Industrial Internet of Things. The chapter begins by introducing the traditional concept of a control loop. It covers delay in a control loop and the consequent problems delay can cause, instabilities, and using hysteresis as a mechanism to dampen problems. It then considers a software control loop using an event-driven design rather than a design that relies on measurement and reactive adjustments. It emphasizes the idea of using a declarative specification and an automated state transition system that achieves the specified conditions. As an example, the chapter examines the controller system built into Kubernetes. It reviews the software components and describes how they use an event queue. The chapter also describes the Kubernetes Custom Resource Definition (CRD) facility. It concludes with a discussion of reactive and dynamic planning, and the design approach known as an operator pattern.