We are moving towards a world of pervasive computing in which users can access and manipulate information from anywhere at anytime. Computing devices and networks are becoming ubiquitous. In this new world, computing will no longer be tethered to desktops: users will become increasingly mobile. As users move across environments, they will have access to a dynamic range of computing devices and software services. They will want to use the resources to perform computing tasks. Today's computing infrastructure does not support this model of computing very well because computers interact with users in terms of low level abstractions: applications and individual devices. Today, if a mobile user wants to use the computing resources of a new environment, he has to manually figure out how to perform a computing task using local resources and/or to migrate his computing context from another environment. Such manual operation is unacceptable in a pervasive computing world because it does not scale with the increasing amount of software services, user mobility and resource dynamism. It also demands that users spend too much time on non-task related configuration activities. This technical report describes an approach called task-driven computing that can be used to solve this problem. The approach is based on the insight that with appropriate system support it is possible to let users interact with their computing environments in terms of high level tasks and free them from low level configuration activities.