Not long ago, most industrial control systems had modest software requirements – typically, a few thousand source lines of code. Today, however, an embedded control system may contain hundreds of thousands of source lines and employ dozens of software tasks, all of them contending for a limited amount of memory and CPU time.

To speed development of these complex systems, companies often divide the work among multiple development teams, each responsible for developing a separate software subsystem. Given the parallel development paths, performance issues invariably arise at the integration phase, when, for the first time, the various subsystems begin competing with one other for system resources. Subsystems that worked well in isolation now respond slowly, if at all. Unfortunately, many of these issues emerge only during integration and verification testing, when the cost of software redesign and recoding is at its highest.