Architectural Principles 

Rationale

In today's technology environment, we must make rapid yet appropriate decisions that incorporate Duke's strategic direction, resource allocation, technical priorities, industry trends, and other concerns. A core set of architectural principles will establish a common language and framework to guide OIT's technical decision-making. Further, they will foster cultural norms that lead to greater technical alignment.

These principles will provide a mechanism for establishing, stating, and updating the strategic technology direction of OIT. Such an approach ensures coherency in our fundamental technical direction. The principles will not be stagnant; we expect they will change over time through this process. In fact, review of the principles will be inherent in their design. Finally, we expect there to be cases where solutions will, by necessity, not follow these principles.

As a result of establishing architectural principles, the following benefits will be seen:

An effort is underway to identify an initial set of architectural principles. This will involve outreach and discussion across OIT, and we encourage feedback at any time regarding the principles. The Technology Architecture Group will be responsible for maintaining and updating the principles over time, with significant input from staff throughout OIT.

Dimensions

The following terms are used throughout the principles to refer to different aspects of our solutions.

Principles

1. Create robust, secure systems

Robust systems are designed to tolerate failure of individual components without service interruptions. By building systems with independent, redundant components we can achieve high availability in an interdependent application environment. We consider potential component failure modes when engineering systems, and validate our designs' security and fault tolerance as part of pre-deployment testing. Unanticipated failures of deployed systems are studied so that we adapt and improve our architecture over time.

Read more...

2. Link, don't duplicate

On both micro and macro scales, modular, loosely coupled architectures ensures that solutions are reusable, testable, adaptable, manageable, and supportable. The use of standards ensures that we will leverage the largest base of available knowledge while achieving the highest level of inherent interoperability. Reusable implementations of data, infrastructure, and service needs are preferred to duplication of efforts. To avoid duplicate entry of data, systems of record should be established and linked to rather than copied.

Read more...

3. Design for scalability

Systems should perform well, even in the face of rapidly-expanding demand. We can prepare for the future by designing systems to accommodate growth in usage over time - allowing for easy and economical scaling when demand rises. In general, horizontally-scaled solutions are better able to adapt to changes in load and provide better overall performance than vertically-scaled solutions. Similarly, modular solutions can provide more flexibility in scaling than monolithic architectures.

Read more...

4. Design for information lifecycles

Our system designs explicitly address the "cradle to grave" lifecycle migration of data and application technologies. We avoid strategies that make upgrade or replacement of a solution more difficult. By designing for decoupled, independent solutions, we are prepared for future technical and data migrations.

Read more...

5. Adapt to realities of people and technology resources

Solutions and services should leverage Duke's existing intellectual and technological resources whenever possible. These resources define our environment and shape our organizational capabilities. Realizing the capabilities of existing staff and our technical environment, we can more effectively meet our projects' technical goals. Creating services that work with existing human and technical investments allow us to maximize the return on these investments.

Read more...