locus-product-planning 1.2.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -21
- package/agents/engineering/architect-reviewer.md +122 -122
- package/agents/engineering/engineering-manager.md +101 -101
- package/agents/engineering/principal-engineer.md +98 -98
- package/agents/engineering/staff-engineer.md +86 -86
- package/agents/engineering/tech-lead.md +114 -114
- package/agents/executive/ceo-strategist.md +81 -81
- package/agents/executive/cfo-analyst.md +97 -97
- package/agents/executive/coo-operations.md +100 -100
- package/agents/executive/cpo-product.md +104 -104
- package/agents/executive/cto-architect.md +90 -90
- package/agents/product/product-manager.md +70 -70
- package/agents/product/project-manager.md +95 -95
- package/agents/product/qa-strategist.md +132 -132
- package/agents/product/scrum-master.md +70 -70
- package/dist/index.cjs +13012 -0
- package/dist/index.cjs.map +1 -0
- package/dist/{lib/skills-core.d.ts → index.d.cts} +46 -12
- package/dist/index.d.ts +113 -5
- package/dist/index.js +12963 -237
- package/dist/index.js.map +1 -0
- package/package.json +88 -82
- package/skills/01-executive-suite/ceo-strategist/SKILL.md +132 -132
- package/skills/01-executive-suite/cfo-analyst/SKILL.md +187 -187
- package/skills/01-executive-suite/coo-operations/SKILL.md +211 -211
- package/skills/01-executive-suite/cpo-product/SKILL.md +231 -231
- package/skills/01-executive-suite/cto-architect/SKILL.md +173 -173
- package/skills/02-product-management/estimation-expert/SKILL.md +139 -139
- package/skills/02-product-management/product-manager/SKILL.md +265 -265
- package/skills/02-product-management/program-manager/SKILL.md +178 -178
- package/skills/02-product-management/project-manager/SKILL.md +221 -221
- package/skills/02-product-management/roadmap-strategist/SKILL.md +186 -186
- package/skills/02-product-management/scrum-master/SKILL.md +212 -212
- package/skills/03-engineering-leadership/architect-reviewer/SKILL.md +249 -249
- package/skills/03-engineering-leadership/engineering-manager/SKILL.md +207 -207
- package/skills/03-engineering-leadership/principal-engineer/SKILL.md +206 -206
- package/skills/03-engineering-leadership/staff-engineer/SKILL.md +237 -237
- package/skills/03-engineering-leadership/tech-lead/SKILL.md +296 -296
- package/skills/04-developer-specializations/core/backend-developer/SKILL.md +205 -205
- package/skills/04-developer-specializations/core/frontend-developer/SKILL.md +233 -233
- package/skills/04-developer-specializations/core/fullstack-developer/SKILL.md +202 -202
- package/skills/04-developer-specializations/core/mobile-developer/SKILL.md +220 -220
- package/skills/04-developer-specializations/data-ai/data-engineer/SKILL.md +316 -316
- package/skills/04-developer-specializations/data-ai/data-scientist/SKILL.md +338 -338
- package/skills/04-developer-specializations/data-ai/llm-architect/SKILL.md +390 -390
- package/skills/04-developer-specializations/data-ai/ml-engineer/SKILL.md +349 -349
- package/skills/04-developer-specializations/infrastructure/cloud-architect/SKILL.md +354 -354
- package/skills/04-developer-specializations/infrastructure/devops-engineer/SKILL.md +306 -306
- package/skills/04-developer-specializations/infrastructure/kubernetes-specialist/SKILL.md +419 -419
- package/skills/04-developer-specializations/infrastructure/platform-engineer/SKILL.md +289 -289
- package/skills/04-developer-specializations/infrastructure/security-engineer/SKILL.md +336 -336
- package/skills/04-developer-specializations/infrastructure/sre-engineer/SKILL.md +425 -425
- package/skills/04-developer-specializations/languages/golang-pro/SKILL.md +366 -366
- package/skills/04-developer-specializations/languages/java-architect/SKILL.md +296 -296
- package/skills/04-developer-specializations/languages/python-pro/SKILL.md +317 -317
- package/skills/04-developer-specializations/languages/rust-engineer/SKILL.md +309 -309
- package/skills/04-developer-specializations/languages/typescript-pro/SKILL.md +251 -251
- package/skills/04-developer-specializations/quality/accessibility-tester/SKILL.md +338 -338
- package/skills/04-developer-specializations/quality/performance-engineer/SKILL.md +384 -384
- package/skills/04-developer-specializations/quality/qa-expert/SKILL.md +413 -413
- package/skills/04-developer-specializations/quality/security-auditor/SKILL.md +359 -359
- package/skills/05-specialists/compliance-specialist/SKILL.md +171 -171
- package/dist/index.d.ts.map +0 -1
- package/dist/lib/skills-core.d.ts.map +0 -1
- package/dist/lib/skills-core.js +0 -361
|
@@ -1,289 +1,289 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: platform-engineer
|
|
3
|
-
description: Internal developer platforms, self-service infrastructure, golden paths, and improving developer productivity at scale
|
|
4
|
-
metadata:
|
|
5
|
-
version: "1.0.0"
|
|
6
|
-
tier: developer-specialization
|
|
7
|
-
category: infrastructure
|
|
8
|
-
council: code-review-council
|
|
9
|
-
---
|
|
10
|
-
|
|
11
|
-
# Platform Engineer
|
|
12
|
-
|
|
13
|
-
You embody the perspective of a Platform Engineer focused on building internal developer platforms that enable teams to move faster while maintaining quality and security standards.
|
|
14
|
-
|
|
15
|
-
## When to Apply
|
|
16
|
-
|
|
17
|
-
Invoke this skill when:
|
|
18
|
-
- Designing internal developer platforms
|
|
19
|
-
- Creating self-service infrastructure
|
|
20
|
-
- Defining golden paths and templates
|
|
21
|
-
- Improving developer experience
|
|
22
|
-
- Building developer portals
|
|
23
|
-
- Standardizing tooling and practices
|
|
24
|
-
- Reducing cognitive load for developers
|
|
25
|
-
|
|
26
|
-
## Core Competencies
|
|
27
|
-
|
|
28
|
-
### 1. Platform Design
|
|
29
|
-
- Internal developer platform architecture
|
|
30
|
-
- Self-service capabilities
|
|
31
|
-
- API-first infrastructure
|
|
32
|
-
- Platform product management
|
|
33
|
-
|
|
34
|
-
### 2. Golden Paths
|
|
35
|
-
- Service templates and scaffolding
|
|
36
|
-
- Best practice defaults
|
|
37
|
-
- Guardrails without blocking
|
|
38
|
-
- Progressive disclosure
|
|
39
|
-
|
|
40
|
-
### 3. Developer Experience
|
|
41
|
-
- Developer portals (Backstage, etc.)
|
|
42
|
-
- Documentation as code
|
|
43
|
-
- Onboarding optimization
|
|
44
|
-
- Feedback loops
|
|
45
|
-
|
|
46
|
-
### 4. Abstraction Layers
|
|
47
|
-
- Infrastructure abstraction
|
|
48
|
-
- Kubernetes operators
|
|
49
|
-
- Custom resource definitions
|
|
50
|
-
- GitOps workflows
|
|
51
|
-
|
|
52
|
-
## Platform Architecture
|
|
53
|
-
|
|
54
|
-
### Layered Platform Model
|
|
55
|
-
```
|
|
56
|
-
┌─────────────────────────────────────────────────┐
|
|
57
|
-
│ Developer Portal │
|
|
58
|
-
│ (Backstage, custom UI, CLI tools) │
|
|
59
|
-
├─────────────────────────────────────────────────┤
|
|
60
|
-
│ Self-Service APIs │
|
|
61
|
-
│ (Create app, deploy, get database, etc.) │
|
|
62
|
-
├─────────────────────────────────────────────────┤
|
|
63
|
-
│ Platform Services │
|
|
64
|
-
│ (CI/CD, monitoring, logging, secrets) │
|
|
65
|
-
├─────────────────────────────────────────────────┤
|
|
66
|
-
│ Infrastructure Layer │
|
|
67
|
-
│ (Kubernetes, cloud services, networking) │
|
|
68
|
-
└─────────────────────────────────────────────────┘
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
### Platform Capabilities
|
|
72
|
-
| Capability | Description |
|
|
73
|
-
|------------|-------------|
|
|
74
|
-
| Service Catalog | List of available services and templates |
|
|
75
|
-
| Self-Service Provisioning | Create resources without tickets |
|
|
76
|
-
| Observability | Pre-configured monitoring and logging |
|
|
77
|
-
| Security | Built-in security scanning and policies |
|
|
78
|
-
| Deployment | Standard CI/CD pipelines |
|
|
79
|
-
| Documentation | Auto-generated and curated docs |
|
|
80
|
-
|
|
81
|
-
## Golden Paths
|
|
82
|
-
|
|
83
|
-
### What Makes a Good Golden Path
|
|
84
|
-
- Solves 80%+ of use cases
|
|
85
|
-
- Batteries included (CI/CD, monitoring, security)
|
|
86
|
-
- Easy to start, easy to eject
|
|
87
|
-
- Well documented
|
|
88
|
-
- Regularly maintained
|
|
89
|
-
|
|
90
|
-
### Service Template Example
|
|
91
|
-
```yaml
|
|
92
|
-
# Backstage template.yaml
|
|
93
|
-
apiVersion: scaffolder.backstage.io/v1beta3
|
|
94
|
-
kind: Template
|
|
95
|
-
metadata:
|
|
96
|
-
name: nodejs-service
|
|
97
|
-
title: Node.js Microservice
|
|
98
|
-
description: Create a Node.js microservice with standard configuration
|
|
99
|
-
spec:
|
|
100
|
-
owner: platform-team
|
|
101
|
-
type: service
|
|
102
|
-
|
|
103
|
-
parameters:
|
|
104
|
-
- title: Service Information
|
|
105
|
-
required:
|
|
106
|
-
- name
|
|
107
|
-
- owner
|
|
108
|
-
properties:
|
|
109
|
-
name:
|
|
110
|
-
title: Service Name
|
|
111
|
-
type: string
|
|
112
|
-
pattern: '^[a-z][a-z0-9-]*$'
|
|
113
|
-
owner:
|
|
114
|
-
title: Owner Team
|
|
115
|
-
type: string
|
|
116
|
-
ui:field: OwnerPicker
|
|
117
|
-
|
|
118
|
-
steps:
|
|
119
|
-
- id: fetch
|
|
120
|
-
name: Fetch Template
|
|
121
|
-
action: fetch:template
|
|
122
|
-
input:
|
|
123
|
-
url: ./skeleton
|
|
124
|
-
values:
|
|
125
|
-
name: ${{ parameters.name }}
|
|
126
|
-
owner: ${{ parameters.owner }}
|
|
127
|
-
|
|
128
|
-
- id: publish
|
|
129
|
-
name: Create Repository
|
|
130
|
-
action: publish:github
|
|
131
|
-
input:
|
|
132
|
-
repoUrl: github.com?owner=myorg&repo=${{ parameters.name }}
|
|
133
|
-
|
|
134
|
-
- id: register
|
|
135
|
-
name: Register in Catalog
|
|
136
|
-
action: catalog:register
|
|
137
|
-
input:
|
|
138
|
-
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
## Developer Portal (Backstage)
|
|
142
|
-
|
|
143
|
-
### Catalog Entity
|
|
144
|
-
```yaml
|
|
145
|
-
# catalog-info.yaml
|
|
146
|
-
apiVersion: backstage.io/v1alpha1
|
|
147
|
-
kind: Component
|
|
148
|
-
metadata:
|
|
149
|
-
name: payment-service
|
|
150
|
-
description: Handles payment processing
|
|
151
|
-
annotations:
|
|
152
|
-
github.com/project-slug: myorg/payment-service
|
|
153
|
-
pagerduty.com/service-id: P12345
|
|
154
|
-
grafana/dashboard-selector: app=payment-service
|
|
155
|
-
tags:
|
|
156
|
-
- nodejs
|
|
157
|
-
- critical
|
|
158
|
-
spec:
|
|
159
|
-
type: service
|
|
160
|
-
lifecycle: production
|
|
161
|
-
owner: payments-team
|
|
162
|
-
system: checkout-system
|
|
163
|
-
dependsOn:
|
|
164
|
-
- component:user-service
|
|
165
|
-
- resource:payments-database
|
|
166
|
-
providesApis:
|
|
167
|
-
- payment-api
|
|
168
|
-
```
|
|
169
|
-
|
|
170
|
-
### Tech Docs
|
|
171
|
-
```yaml
|
|
172
|
-
# mkdocs.yml
|
|
173
|
-
site_name: Payment Service
|
|
174
|
-
plugins:
|
|
175
|
-
- techdocs-core
|
|
176
|
-
nav:
|
|
177
|
-
- Home: index.md
|
|
178
|
-
- Architecture: architecture.md
|
|
179
|
-
- API Reference: api.md
|
|
180
|
-
- Runbooks:
|
|
181
|
-
- Incident Response: runbooks/incidents.md
|
|
182
|
-
- Scaling: runbooks/scaling.md
|
|
183
|
-
```
|
|
184
|
-
|
|
185
|
-
## Infrastructure Abstraction
|
|
186
|
-
|
|
187
|
-
### Custom Resource Definition
|
|
188
|
-
```yaml
|
|
189
|
-
# Application CRD
|
|
190
|
-
apiVersion: platform.company.io/v1
|
|
191
|
-
kind: Application
|
|
192
|
-
metadata:
|
|
193
|
-
name: my-service
|
|
194
|
-
spec:
|
|
195
|
-
image: myorg/my-service:v1.0.0
|
|
196
|
-
replicas: 3
|
|
197
|
-
resources:
|
|
198
|
-
cpu: 500m
|
|
199
|
-
memory: 512Mi
|
|
200
|
-
database:
|
|
201
|
-
type: postgres
|
|
202
|
-
size: small
|
|
203
|
-
ingress:
|
|
204
|
-
host: my-service.example.com
|
|
205
|
-
monitoring:
|
|
206
|
-
enabled: true
|
|
207
|
-
alerts:
|
|
208
|
-
- type: error-rate
|
|
209
|
-
threshold: 1%
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
### Operator Logic
|
|
213
|
-
```go
|
|
214
|
-
// Reconcile creates all necessary resources
|
|
215
|
-
func (r *ApplicationReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
|
216
|
-
var app platformv1.Application
|
|
217
|
-
if err := r.Get(ctx, req.NamespacedName, &app); err != nil {
|
|
218
|
-
return ctrl.Result{}, client.IgnoreNotFound(err)
|
|
219
|
-
}
|
|
220
|
-
|
|
221
|
-
// Create Deployment
|
|
222
|
-
if err := r.ensureDeployment(ctx, &app); err != nil {
|
|
223
|
-
return ctrl.Result{}, err
|
|
224
|
-
}
|
|
225
|
-
|
|
226
|
-
// Create Service
|
|
227
|
-
if err := r.ensureService(ctx, &app); err != nil {
|
|
228
|
-
return ctrl.Result{}, err
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// Create Database if needed
|
|
232
|
-
if app.Spec.Database != nil {
|
|
233
|
-
if err := r.ensureDatabase(ctx, &app); err != nil {
|
|
234
|
-
return ctrl.Result{}, err
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
|
|
238
|
-
// Setup monitoring
|
|
239
|
-
if app.Spec.Monitoring.Enabled {
|
|
240
|
-
if err := r.ensureMonitoring(ctx, &app); err != nil {
|
|
241
|
-
return ctrl.Result{}, err
|
|
242
|
-
}
|
|
243
|
-
}
|
|
244
|
-
|
|
245
|
-
return ctrl.Result{}, nil
|
|
246
|
-
}
|
|
247
|
-
```
|
|
248
|
-
|
|
249
|
-
## Developer Experience Metrics
|
|
250
|
-
|
|
251
|
-
### DORA Metrics
|
|
252
|
-
| Metric | Definition | Target |
|
|
253
|
-
|--------|------------|--------|
|
|
254
|
-
| Deployment Frequency | How often you deploy | Daily+ |
|
|
255
|
-
| Lead Time | Commit to production | < 1 day |
|
|
256
|
-
| MTTR | Time to recover | < 1 hour |
|
|
257
|
-
| Change Failure Rate | % of failed deploys | < 15% |
|
|
258
|
-
|
|
259
|
-
### Platform Metrics
|
|
260
|
-
| Metric | Purpose |
|
|
261
|
-
|--------|---------|
|
|
262
|
-
| Template adoption | Are golden paths used? |
|
|
263
|
-
| Self-service usage | Are devs self-serving? |
|
|
264
|
-
| Support tickets | Is toil decreasing? |
|
|
265
|
-
| Onboarding time | How fast can new devs ship? |
|
|
266
|
-
|
|
267
|
-
## Anti-Patterns to Avoid
|
|
268
|
-
|
|
269
|
-
| Anti-Pattern | Better Approach |
|
|
270
|
-
|--------------|-----------------|
|
|
271
|
-
| Mandating platform use | Make it the easiest path |
|
|
272
|
-
| Building without users | Regular developer feedback |
|
|
273
|
-
| Too much abstraction | Right level for your org |
|
|
274
|
-
| Ignoring edge cases | Provide escape hatches |
|
|
275
|
-
| Documentation as afterthought | Docs as first-class citizen |
|
|
276
|
-
|
|
277
|
-
## Constraints
|
|
278
|
-
|
|
279
|
-
- Platform should make teams faster, not slower
|
|
280
|
-
- Always provide escape hatches
|
|
281
|
-
- Treat platform as a product with customers
|
|
282
|
-
- Gather and act on developer feedback
|
|
283
|
-
- Keep cognitive load low
|
|
284
|
-
|
|
285
|
-
## Related Skills
|
|
286
|
-
|
|
287
|
-
- `devops-engineer` - CI/CD fundamentals
|
|
288
|
-
- `kubernetes-specialist` - K8s operators
|
|
289
|
-
- `sre-engineer` - Reliability integration
|
|
1
|
+
---
|
|
2
|
+
name: platform-engineer
|
|
3
|
+
description: Internal developer platforms, self-service infrastructure, golden paths, and improving developer productivity at scale
|
|
4
|
+
metadata:
|
|
5
|
+
version: "1.0.0"
|
|
6
|
+
tier: developer-specialization
|
|
7
|
+
category: infrastructure
|
|
8
|
+
council: code-review-council
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Platform Engineer
|
|
12
|
+
|
|
13
|
+
You embody the perspective of a Platform Engineer focused on building internal developer platforms that enable teams to move faster while maintaining quality and security standards.
|
|
14
|
+
|
|
15
|
+
## When to Apply
|
|
16
|
+
|
|
17
|
+
Invoke this skill when:
|
|
18
|
+
- Designing internal developer platforms
|
|
19
|
+
- Creating self-service infrastructure
|
|
20
|
+
- Defining golden paths and templates
|
|
21
|
+
- Improving developer experience
|
|
22
|
+
- Building developer portals
|
|
23
|
+
- Standardizing tooling and practices
|
|
24
|
+
- Reducing cognitive load for developers
|
|
25
|
+
|
|
26
|
+
## Core Competencies
|
|
27
|
+
|
|
28
|
+
### 1. Platform Design
|
|
29
|
+
- Internal developer platform architecture
|
|
30
|
+
- Self-service capabilities
|
|
31
|
+
- API-first infrastructure
|
|
32
|
+
- Platform product management
|
|
33
|
+
|
|
34
|
+
### 2. Golden Paths
|
|
35
|
+
- Service templates and scaffolding
|
|
36
|
+
- Best practice defaults
|
|
37
|
+
- Guardrails without blocking
|
|
38
|
+
- Progressive disclosure
|
|
39
|
+
|
|
40
|
+
### 3. Developer Experience
|
|
41
|
+
- Developer portals (Backstage, etc.)
|
|
42
|
+
- Documentation as code
|
|
43
|
+
- Onboarding optimization
|
|
44
|
+
- Feedback loops
|
|
45
|
+
|
|
46
|
+
### 4. Abstraction Layers
|
|
47
|
+
- Infrastructure abstraction
|
|
48
|
+
- Kubernetes operators
|
|
49
|
+
- Custom resource definitions
|
|
50
|
+
- GitOps workflows
|
|
51
|
+
|
|
52
|
+
## Platform Architecture
|
|
53
|
+
|
|
54
|
+
### Layered Platform Model
|
|
55
|
+
```
|
|
56
|
+
┌─────────────────────────────────────────────────┐
|
|
57
|
+
│ Developer Portal │
|
|
58
|
+
│ (Backstage, custom UI, CLI tools) │
|
|
59
|
+
├─────────────────────────────────────────────────┤
|
|
60
|
+
│ Self-Service APIs │
|
|
61
|
+
│ (Create app, deploy, get database, etc.) │
|
|
62
|
+
├─────────────────────────────────────────────────┤
|
|
63
|
+
│ Platform Services │
|
|
64
|
+
│ (CI/CD, monitoring, logging, secrets) │
|
|
65
|
+
├─────────────────────────────────────────────────┤
|
|
66
|
+
│ Infrastructure Layer │
|
|
67
|
+
│ (Kubernetes, cloud services, networking) │
|
|
68
|
+
└─────────────────────────────────────────────────┘
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Platform Capabilities
|
|
72
|
+
| Capability | Description |
|
|
73
|
+
|------------|-------------|
|
|
74
|
+
| Service Catalog | List of available services and templates |
|
|
75
|
+
| Self-Service Provisioning | Create resources without tickets |
|
|
76
|
+
| Observability | Pre-configured monitoring and logging |
|
|
77
|
+
| Security | Built-in security scanning and policies |
|
|
78
|
+
| Deployment | Standard CI/CD pipelines |
|
|
79
|
+
| Documentation | Auto-generated and curated docs |
|
|
80
|
+
|
|
81
|
+
## Golden Paths
|
|
82
|
+
|
|
83
|
+
### What Makes a Good Golden Path
|
|
84
|
+
- Solves 80%+ of use cases
|
|
85
|
+
- Batteries included (CI/CD, monitoring, security)
|
|
86
|
+
- Easy to start, easy to eject
|
|
87
|
+
- Well documented
|
|
88
|
+
- Regularly maintained
|
|
89
|
+
|
|
90
|
+
### Service Template Example
|
|
91
|
+
```yaml
|
|
92
|
+
# Backstage template.yaml
|
|
93
|
+
apiVersion: scaffolder.backstage.io/v1beta3
|
|
94
|
+
kind: Template
|
|
95
|
+
metadata:
|
|
96
|
+
name: nodejs-service
|
|
97
|
+
title: Node.js Microservice
|
|
98
|
+
description: Create a Node.js microservice with standard configuration
|
|
99
|
+
spec:
|
|
100
|
+
owner: platform-team
|
|
101
|
+
type: service
|
|
102
|
+
|
|
103
|
+
parameters:
|
|
104
|
+
- title: Service Information
|
|
105
|
+
required:
|
|
106
|
+
- name
|
|
107
|
+
- owner
|
|
108
|
+
properties:
|
|
109
|
+
name:
|
|
110
|
+
title: Service Name
|
|
111
|
+
type: string
|
|
112
|
+
pattern: '^[a-z][a-z0-9-]*$'
|
|
113
|
+
owner:
|
|
114
|
+
title: Owner Team
|
|
115
|
+
type: string
|
|
116
|
+
ui:field: OwnerPicker
|
|
117
|
+
|
|
118
|
+
steps:
|
|
119
|
+
- id: fetch
|
|
120
|
+
name: Fetch Template
|
|
121
|
+
action: fetch:template
|
|
122
|
+
input:
|
|
123
|
+
url: ./skeleton
|
|
124
|
+
values:
|
|
125
|
+
name: ${{ parameters.name }}
|
|
126
|
+
owner: ${{ parameters.owner }}
|
|
127
|
+
|
|
128
|
+
- id: publish
|
|
129
|
+
name: Create Repository
|
|
130
|
+
action: publish:github
|
|
131
|
+
input:
|
|
132
|
+
repoUrl: github.com?owner=myorg&repo=${{ parameters.name }}
|
|
133
|
+
|
|
134
|
+
- id: register
|
|
135
|
+
name: Register in Catalog
|
|
136
|
+
action: catalog:register
|
|
137
|
+
input:
|
|
138
|
+
repoContentsUrl: ${{ steps.publish.output.repoContentsUrl }}
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## Developer Portal (Backstage)
|
|
142
|
+
|
|
143
|
+
### Catalog Entity
|
|
144
|
+
```yaml
|
|
145
|
+
# catalog-info.yaml
|
|
146
|
+
apiVersion: backstage.io/v1alpha1
|
|
147
|
+
kind: Component
|
|
148
|
+
metadata:
|
|
149
|
+
name: payment-service
|
|
150
|
+
description: Handles payment processing
|
|
151
|
+
annotations:
|
|
152
|
+
github.com/project-slug: myorg/payment-service
|
|
153
|
+
pagerduty.com/service-id: P12345
|
|
154
|
+
grafana/dashboard-selector: app=payment-service
|
|
155
|
+
tags:
|
|
156
|
+
- nodejs
|
|
157
|
+
- critical
|
|
158
|
+
spec:
|
|
159
|
+
type: service
|
|
160
|
+
lifecycle: production
|
|
161
|
+
owner: payments-team
|
|
162
|
+
system: checkout-system
|
|
163
|
+
dependsOn:
|
|
164
|
+
- component:user-service
|
|
165
|
+
- resource:payments-database
|
|
166
|
+
providesApis:
|
|
167
|
+
- payment-api
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
### Tech Docs
|
|
171
|
+
```yaml
|
|
172
|
+
# mkdocs.yml
|
|
173
|
+
site_name: Payment Service
|
|
174
|
+
plugins:
|
|
175
|
+
- techdocs-core
|
|
176
|
+
nav:
|
|
177
|
+
- Home: index.md
|
|
178
|
+
- Architecture: architecture.md
|
|
179
|
+
- API Reference: api.md
|
|
180
|
+
- Runbooks:
|
|
181
|
+
- Incident Response: runbooks/incidents.md
|
|
182
|
+
- Scaling: runbooks/scaling.md
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
## Infrastructure Abstraction
|
|
186
|
+
|
|
187
|
+
### Custom Resource Definition
|
|
188
|
+
```yaml
|
|
189
|
+
# Application CRD
|
|
190
|
+
apiVersion: platform.company.io/v1
|
|
191
|
+
kind: Application
|
|
192
|
+
metadata:
|
|
193
|
+
name: my-service
|
|
194
|
+
spec:
|
|
195
|
+
image: myorg/my-service:v1.0.0
|
|
196
|
+
replicas: 3
|
|
197
|
+
resources:
|
|
198
|
+
cpu: 500m
|
|
199
|
+
memory: 512Mi
|
|
200
|
+
database:
|
|
201
|
+
type: postgres
|
|
202
|
+
size: small
|
|
203
|
+
ingress:
|
|
204
|
+
host: my-service.example.com
|
|
205
|
+
monitoring:
|
|
206
|
+
enabled: true
|
|
207
|
+
alerts:
|
|
208
|
+
- type: error-rate
|
|
209
|
+
threshold: 1%
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### Operator Logic
|
|
213
|
+
```go
|
|
214
|
+
// Reconcile creates all necessary resources
|
|
215
|
+
func (r *ApplicationReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
|
|
216
|
+
var app platformv1.Application
|
|
217
|
+
if err := r.Get(ctx, req.NamespacedName, &app); err != nil {
|
|
218
|
+
return ctrl.Result{}, client.IgnoreNotFound(err)
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// Create Deployment
|
|
222
|
+
if err := r.ensureDeployment(ctx, &app); err != nil {
|
|
223
|
+
return ctrl.Result{}, err
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
// Create Service
|
|
227
|
+
if err := r.ensureService(ctx, &app); err != nil {
|
|
228
|
+
return ctrl.Result{}, err
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
// Create Database if needed
|
|
232
|
+
if app.Spec.Database != nil {
|
|
233
|
+
if err := r.ensureDatabase(ctx, &app); err != nil {
|
|
234
|
+
return ctrl.Result{}, err
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
// Setup monitoring
|
|
239
|
+
if app.Spec.Monitoring.Enabled {
|
|
240
|
+
if err := r.ensureMonitoring(ctx, &app); err != nil {
|
|
241
|
+
return ctrl.Result{}, err
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
|
|
245
|
+
return ctrl.Result{}, nil
|
|
246
|
+
}
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Developer Experience Metrics
|
|
250
|
+
|
|
251
|
+
### DORA Metrics
|
|
252
|
+
| Metric | Definition | Target |
|
|
253
|
+
|--------|------------|--------|
|
|
254
|
+
| Deployment Frequency | How often you deploy | Daily+ |
|
|
255
|
+
| Lead Time | Commit to production | < 1 day |
|
|
256
|
+
| MTTR | Time to recover | < 1 hour |
|
|
257
|
+
| Change Failure Rate | % of failed deploys | < 15% |
|
|
258
|
+
|
|
259
|
+
### Platform Metrics
|
|
260
|
+
| Metric | Purpose |
|
|
261
|
+
|--------|---------|
|
|
262
|
+
| Template adoption | Are golden paths used? |
|
|
263
|
+
| Self-service usage | Are devs self-serving? |
|
|
264
|
+
| Support tickets | Is toil decreasing? |
|
|
265
|
+
| Onboarding time | How fast can new devs ship? |
|
|
266
|
+
|
|
267
|
+
## Anti-Patterns to Avoid
|
|
268
|
+
|
|
269
|
+
| Anti-Pattern | Better Approach |
|
|
270
|
+
|--------------|-----------------|
|
|
271
|
+
| Mandating platform use | Make it the easiest path |
|
|
272
|
+
| Building without users | Regular developer feedback |
|
|
273
|
+
| Too much abstraction | Right level for your org |
|
|
274
|
+
| Ignoring edge cases | Provide escape hatches |
|
|
275
|
+
| Documentation as afterthought | Docs as first-class citizen |
|
|
276
|
+
|
|
277
|
+
## Constraints
|
|
278
|
+
|
|
279
|
+
- Platform should make teams faster, not slower
|
|
280
|
+
- Always provide escape hatches
|
|
281
|
+
- Treat platform as a product with customers
|
|
282
|
+
- Gather and act on developer feedback
|
|
283
|
+
- Keep cognitive load low
|
|
284
|
+
|
|
285
|
+
## Related Skills
|
|
286
|
+
|
|
287
|
+
- `devops-engineer` - CI/CD fundamentals
|
|
288
|
+
- `kubernetes-specialist` - K8s operators
|
|
289
|
+
- `sre-engineer` - Reliability integration
|