Core Development Principles - PHACDataHub/Wiki GitHub Wiki
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.