Computational Grid projects are ushering in an environment where clients make use of resources and services that are far too
expensive for single clients to manage or maintain. Clients compose a megaprogram with services offered by outside organizations.
However, the benefits of this paradigm come with a loss of control over job execution with added uncertainty about job completion.
Current techniques for scheduling distributed services do not simultaneously account for autonomous service providers whose
performance, reliability, and cost are not controlled by the service user. We propose an approach to scheduling that compensates
for this uncertainty. Our approach builds initial schedules based on cost estimates from service providers and during program
execution monitors job progress to determine if future deadlines will be met. This approach enables early hazard detection
and facilitates schedule repairs to compensate for delays.