BIG PICTURE THINKING

Everything exists within a context. When building software, either individual components or complex systems, it’s always important to keep the bigger picture in mind. As we make design and implementation decisions during the course of a project we always do so with an eye toward how those decisions fit into the surrounding context. For example, we often prefer REST interfaces for internal communication even when something simpler would do. Doing so keeps components loosely coupled which makes it easier to re-purpose components or change implementation strategy easily and quickly.

It’s also important to realize that software systems, especially web-based ones, are never truly “done”. They evolve over time, whether planned for or not, and the ability to continuously evolve should be integral to the design of the system. Creating a system that can be enhanced and extended, indefinitely, is an explicit design goal.

OverStory believes that sketching a high-level architecture, based on an understanding of the problem domain, past experience and knowledge of successful industry patterns is the proper starting point.

The details of the architecture will evolve as the project progresses but the patterns should remain recognizable.

An important principle that informs our architectural designs is Resource Orientation. The most well-known aspect of resource orientation is REST which has become very popular in recent years. Even more important is the underlying principle of managing and exchanging resources as a core abstraction. This is as opposed to classical RPC systems that abstract actions by issuing commands to invoke code remotely in other system components.

Resource oriented architectures focus on the nouns rather than verbs. API calls describe a desired result rather than mandating how that result should be produced. There are many wide-ranging implications to this paradigm, bestowing benefits such as loose coupling, composability, interposition, substitutability and scalability. These are in fact the properties of the World Web Wide that have enabled it to scale larger than any man-made system in history and still run smoothly. Resource oriented systems work well both at vast, world-wide scale and at the smaller scale of a web application.

In addition to the technical benefits, a resource oriented architecture protects you against the future. Obsolete or expensive system components can be rewritten, possibly using very different technologies, and replaced without affecting (or even informing) other components. Like a living organism, the parts can evolve and regenerate while the whole remains intact and continues moving forward. Adhering to resource oriented design principles results in a system that expects and enables change rather than becoming brittle and resistant to it.