User Centric Approach
The fastest way to deliver usable software is in cooperation with a user. No services should be developed without an interested consumer committed to providing feedback.
A formal Experience Design Research phase has a profound impact on identifying a hypothesis focused on unique user value
Microservices as a Best Practice
Microservices architecture is a convergence of concepts such as Service oriented Architecture (SOA), continuous delivery, virtualization and domain driven design. It creates technical and organizational scalability in performance through the distribution of tasks and in development by enabling teams to work autonomously from concept through to deployment.
- They are defined by the principles of Domain Driven Design and represent business concepts
- They are focused on doing one thing well
- They are preferably only large enough to do this one thing
- They are developed, evolved and executed autonomously
- They provide language neutral interfaces
- They do not rely on intelligence with the communication system (smart endpoints, dumb pipes)
- They do rely on infrastructure support for composition and orchestration; however, the services themselves are agnostic of the infrastructure in which they are hosted and orchestrated.
Microservices in OSDU
For more on Microservices review the preferred architecture style in OSDU
Aligned Autonomous Teams
Developing software effectively in a large distributed company requires empowering independent teams to develop software aligned through common goals and principles.
Continuous Delivery and Feedback
Build software in such a way that it can be released into production at any time in a manner that provides immediate feedback.
Adopt Hypothesis Driven Development: Development of new products and services as a series of experiments to validate a hypothesis of value and scale
Make Security Everyone's Concern
Security is a shared responsibility; it has to be valued as a business concern, considered at the time of design, implemented during development, validated through testing and monitored and reacted to during operations.
This requires a competency program targeted at each skill combined with shared practices throughout the DevOps process.
Leverage Cloud Provider Expertise
Security is a shared responsibility; providing the best security in the cloud requires understanding of what controls the cloud provider delivers and leveraging/complimenting those controls to the best of our ability.
Protect Data As the most Valuable Asset
Data is the most critical asset of a data ecosystem. Access should be entitled, usage should be governed and the control should remain the responsibility of the owner.
Put Customers in Control of Data and Users
Avoid users and services that operate with elevated privileges. Customers should manage their own users and entitle their own data.
Monitor Everything Important to the User
Reliability should always be observed from the perspective of the user and not the system. There might need to be separate monitoring for the different user categories
Favor Managed Offerings
When possible, select a service with a well-defined support model so that we can focus our attention on the technology that we develop rather than on what we consume. Once our technology has matured, then we can consider hosting dependent services if it achieves greater transparency, or improved compliance in operations.
Use Robust and Fault Tolerant Patterns
Achieving a step change in both system reliability and release agility in a highly distributed environment requires design and implementation that are resilient in the presence of failure.
Microservices operate in a distributed environment and need to be designed for failure. When successfully accomplished, microservices bring resiliency to a system through the isolation of fault.
Automate at Every Step
A microservices architecture is comprised of many moving parts deployed and operated in a distributed environment. Scalable systems development and evolution requires removing the human element whenever possible in development, assurance, deployment, and operations.
Support Multiple Clouds
Avoid the least Common Denominator
Poly-cloud does not mean cloud agnostic. Make informed trade-off decisions, on a service by service basis, on when to use a portable solution vs. accommodating solutions that are optimized for cost, performance and reliability. The type of application and its needs for performance, latency and data volume will determine how closely the application need to run on bare metal.
Adopt Community (Open Source) APIs
We need to aim for a Provider API. When possible, select an Open Source API that has Cloud optimized implementations as a means of balancing portability and optimization.