Quick braindump on apps, services and components


  Also posted to my new "blog-in-progress" here

Someone asked me for a quick email on apps, services and components. Feedback and flames welcome.

An app is a logical grouping of components and services to perform a business objective. 

-        Logical because the components may not all be owned by or located within the organization that built the app

-        An app is built to change by swapping and versioning the services and components that make it up

-        See below for suggested definitions of component and service


Services are lightweight, loosely coupled black boxes of reusable functionality that are accessed via a standardized interface.

-        Services are built to last

-        Once deployed, a service's contract should not be changed – it is usually better to version a contract than completely replace it (especially if your service supports multiple consumers)

-        Services are not necessarily web services – a web service is merely one way in which a service can be implemented

-        Services can be composed into larger constructs referred to as Apps. 

-        Fine-grained services result in greater reuse but may be more difficult to design

  • Fine-grained services support a single, simple piece of functionality
  • Fine-grained services typically result from a bottom-up approach

-        Coarse-grained services typically support higher/more complex functionality   

  • Coarse-grained services are typically composed of two or more fine-grained services
  • Coarse -grained services typically result from a top-down approach


Components are similar to services are more tightly coupled to a specific platform or technology in terms of their implementation.

-        Components are typically built to last but may expose parameters or configurations that affect its behavior

-        Components have very specific requirements for usage – typically in the form of libraries, dlls or databases (e.g. stored procedures)

-        Components may yield better performance or throughput due to their tightly coupled nature

-        Versioning components tends to be more difficult due to their tightly coupled nature

-        Like services, components can be fine-grained or coarse-grained

-        Components can be combined with services into larger constructs referred to as Apps