The document describes an architectural reference model (ARM) for medium to large scale applications that need to undergo frequent changes. The ARM aims to ease refactoring under changing requirements by improving code factoring, separation of concerns, stability, and testability. It divides an application into layers including the interface layer, application layer, domain layer, infrastructure layer, and platform layer. The application layer provides a service-oriented architecture and acts as a coordinator. The domain layer represents domain abstractions and business logic. Examples are provided of how the ARM was implemented for banking and video rental applications.