Skip to content

Core Development Principles

John Bain edited this page Apr 25, 2023 · 1 revision

Appendix DMIA Development Principles

Design systems as highly modular and loosely coupled services.

Create flexible, independent components that can be easily combined, replaced, or updated, promoting adaptability and maintainability across the entire system.

Design systems' components with smallest blast radius in mind

Minimize the potential impact of failures by isolating and containing issues, ensuring that a single component's failure won't lead to widespread system disruption.

Build to support zero-downtime deployments

Implement strategies such as rolling updates, blue-green deployments, or canary releases to minimize disruption and downtime during application updates and maintenance.

Use distributed architectures

Leverage multiple nodes or clusters across different geographical locations to enhance resilience, fault tolerance, and availability of the system.

Expose services, including existing ones, through APIs

Facilitate seamless integration and interoperability between services by using well-defined, standardized APIs, enabling easy communication and data exchange.

Ensure automated testing is possible through good design

Develop systems that support test automation, ensuring robustness, reliability, and faster feedback cycles during development and deployment.

Design for cloud mobility

Create portable and cloud-agnostic solutions, making it easier to migrate applications and services across different cloud providers or on-premise environments if needed.

Prioritize open source

Opt for open-source technologies and platforms that offer flexibility, community support, and lower costs while encouraging collaboration and innovation.

Enforce service models in order of preference: SaaS, PaaS, IaaS

SaaS, PaaS, IaaS: Prioritize cloud services that offer the highest level of abstraction and management, reducing operational overhead and simplifying deployment.

Create reusable components that support accessibility

Develop modular, accessible components that can be easily reused across different projects, ensuring consistent user experiences and reducing development time.

Prioritize function over form without losing sight of elegance

Focus on building practical, efficient solutions that fulfill their purpose while maintaining a clean, user-friendly design.

Zero trust all the things -- assume breach perspective

Implement a security approach that assumes no trust by default, requiring continuous authentication and authorization for all users, devices, and services, minimizing the potential impact of security breaches.

Clone this wiki locally