The Web services research community has proposed a number of approaches for service composition, ranging from manual to semi-automatic to completely automatic. However, it is often difficult to take independently developed services and compose them, since they may not work together correctly. For service composition to occur, the services in question must be designed and developed in a manner that facilitates their composition. In this paper, we propose a novel approach for service design and composition that combines top-down and bottom-up elements. Our approach is driven by faceted, tag-based functional requirements provided by end-users. These requirements describe, at a high-level, the families of compositions that end-users desire. The requirements kick off a top-down service development lifecycle, where enterprise architects and service developers design, develop and test workflows and services, possibly reusing existing flows and services in the process. At runtime, end-users can specify goals, which are satisfied through a bottom-up composition of flows from the available services. The composed flows include those explicitly designed by the architects as well as new ones that are assembled in a serendipitous manner from the available services. With examples from a case study in the financial services domain, we demonstrate our approach for designing and developing services that can be composed into myriad workflows based on end-user goals.