In the center of competence pattern, a team of experts is charged with defining patterns, establishing best practices, developing support tools, and providing education for a subset of the architecture. The center of competence (CoC) is not expected to build and deliver this part of the system but rather help other teams excel in their day-to-day development work. CoC teams can be organized around technologies, use cases, patterns, and high-risk areas.
Creating a CoC will make it easier for development teams to implement patterns and technologies we want in the architecture. Since the CoC is a support group, its primary goal is to increase development speed and improve the overall quality of the software system.
Category | Allocation |
Elements |
CoC Team—group of developers and architects. Responsibility Area—subset of the architecture. Can be a pattern, technology, or use case. |
Relations |
Responsible for—connects a CoC team with their responsibility areas. |
Rules for Use | Typically a CoC is responsible for only one type of technology or use case. |
Strengths | Promotes reusability and scalability of experts. Greater access to experts and reusable assets can positively influence many quality attributes, including security, scalability, performance, reliability, and maintainability. |
Weaknesses | Centers of competence create pockets of expert knowledge, which can be easily disrupted by turnover. Weak CoCs can create confusion and slow down development. |
Here is an example of how one company, consisting of a few hundred developers, organized center of competence teams.
CoC Team | Responsibility Area |
---|---|
Job Scheduling Use Case | Develop a framework for the job scheduling use case and create tools so teams can instantiate the framework on clusters themselves. |
Performance | Consult with teams about load and performance testing, provide tools for testing and data collection, collect and organize data sets and other testing assets. |
Database Technologies | Consult with teams to select supported database technologies appropriate to use case, maintain tools for provisioning databases, create or distribute training materials. |
Core Platform | Maintain common container management system, provide supported Docker base images, create tools for day-to-day tasks such as log aggregation and health checks. |
3.147.55.35