Scientific applications often harness the concurrency in their workloads to par- tition and operate them as independent tasks and achieve reasonable performance. To improve performance at scale, the partitions are operated in parallel on large pools of resources in distributed computing systems, such as clouds, clusters, and grids. However, the exclusive and on-demand deployment of applications on these platforms presents challenges. The target hardware is unknown until runtime and variable between deployments when applications are deployed on these platforms. So operating parameters such as the number of partitions and the instances to provision for execution must be determined at runtime for efficient operation. In this work, I build and demonstrate elastic applications to provide the desired characteristics for operation on distributed computing systems. I present case-studies of elastic applications from different scientific domains and draw broad observations on their design and the challenges to their efficient operation. I develop and evaluate techniques at the middleware and the application layer to achieve efficient operation. In effect, the presented techniques create self-operating elastic applications that dy- namically determine the partitions of their workloads and the scale of resources to utilize. I conclude by showing that self-operating applications achieve high time- and cost-efficiency in their deployed environments in distributed computing systems.