Automation software is made up of many smaller subcomponents that operate at different levels of complexity. For example, the lowest-level software controls sensors and actuators that interact with the physical world, while the highest-level software controls the overall infrastructure, such as enterprise resource planning systems in manufacturing. Structuring the software in a functional and maintainable way is key to the smooth operation of the system.