@wipal/agent-team 1.0.0
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/.claude/rules/common/general-rules.md +141 -0
- package/.claude/rules/lessons/lessons.md +91 -0
- package/.claude/rules/role-rules/dev-fe-rules.md +146 -0
- package/.claude/rules/role-rules/sa-rules.md +226 -0
- package/.claude/skills/SKILL-INDEX.md +299 -0
- package/.claude/skills/community/security-validator/SKILL.md +392 -0
- package/.claude/skills/core/agent-creation/SKILL.md +338 -0
- package/.claude/skills/core/code-review/SKILL.md +154 -0
- package/.claude/skills/core/git-automation/SKILL.md +93 -0
- package/.claude/skills/core/retrospect-work/SKILL.md +172 -0
- package/.claude/skills/domain/architecture/adr-writing/SKILL.md +254 -0
- package/.claude/skills/domain/architecture/adr-writing/references/adr-best-practices.md +257 -0
- package/.claude/skills/domain/architecture/adr-writing/references/adr-examples.md +246 -0
- package/.claude/skills/domain/architecture/adr-writing/references/adr-template.md +160 -0
- package/.claude/skills/domain/architecture/architecture-patterns/SKILL.md +316 -0
- package/.claude/skills/domain/architecture/architecture-patterns/references/event-driven.md +393 -0
- package/.claude/skills/domain/architecture/architecture-patterns/references/microservices.md +315 -0
- package/.claude/skills/domain/architecture/architecture-patterns/references/monolith.md +321 -0
- package/.claude/skills/domain/architecture/architecture-patterns/references/serverless.md +457 -0
- package/.claude/skills/domain/architecture/performance-engineering/SKILL.md +227 -0
- package/.claude/skills/domain/architecture/performance-engineering/references/benchmarking.md +336 -0
- package/.claude/skills/domain/architecture/performance-engineering/references/caching-strategies.md +284 -0
- package/.claude/skills/domain/architecture/performance-engineering/references/optimization.md +298 -0
- package/.claude/skills/domain/architecture/security-architecture/SKILL.md +206 -0
- package/.claude/skills/domain/architecture/security-architecture/references/auth-patterns.md +209 -0
- package/.claude/skills/domain/architecture/security-architecture/references/compliance.md +246 -0
- package/.claude/skills/domain/architecture/security-architecture/references/threat-modeling.md +219 -0
- package/.claude/skills/domain/architecture/system-design/SKILL.md +227 -0
- package/.claude/skills/domain/architecture/system-design/references/distributed-systems.md +231 -0
- package/.claude/skills/domain/architecture/system-design/references/resilience.md +344 -0
- package/.claude/skills/domain/architecture/system-design/references/scalability.md +303 -0
- package/.claude/skills/domain/architecture/tech-selection/SKILL.md +192 -0
- package/.claude/skills/domain/architecture/tech-selection/references/build-vs-buy.md +258 -0
- package/.claude/skills/domain/architecture/tech-selection/references/evaluation-framework.md +203 -0
- package/.claude/skills/domain/architecture/tech-selection/references/tech-radar.md +257 -0
- package/.claude/skills/domain/backend/api-design/SKILL.md +121 -0
- package/.claude/skills/domain/backend/database-design/SKILL.md +156 -0
- package/.claude/skills/domain/backend/performance-be/SKILL.md +210 -0
- package/.claude/skills/domain/backend/security/SKILL.md +138 -0
- package/.claude/skills/domain/backend/testing-be/SKILL.md +203 -0
- package/.claude/skills/domain/devops/ci-cd/SKILL.md +188 -0
- package/.claude/skills/domain/devops/containerization/SKILL.md +177 -0
- package/.claude/skills/domain/devops/deployment/SKILL.md +198 -0
- package/.claude/skills/domain/devops/infrastructure-as-code/SKILL.md +178 -0
- package/.claude/skills/domain/devops/monitoring/SKILL.md +163 -0
- package/.claude/skills/domain/frontend/accessibility/SKILL.md +179 -0
- package/.claude/skills/domain/frontend/frontend-design/SKILL.md +138 -0
- package/.claude/skills/domain/frontend/performance-fe/SKILL.md +195 -0
- package/.claude/skills/domain/frontend/state-management/SKILL.md +190 -0
- package/.claude/skills/domain/frontend/testing-fe/SKILL.md +193 -0
- package/.claude/skills/domain/product/requirements-gathering/SKILL.md +136 -0
- package/.claude/skills/domain/product/roadmap-planning/SKILL.md +169 -0
- package/.claude/skills/domain/product/sprint-planning/SKILL.md +151 -0
- package/.claude/skills/domain/product/stakeholder-communication/SKILL.md +162 -0
- package/.claude/skills/domain/product/user-stories/SKILL.md +141 -0
- package/.claude/skills/domain/quality/bug-reporting/SKILL.md +150 -0
- package/.claude/skills/domain/quality/regression-testing/SKILL.md +178 -0
- package/.claude/skills/domain/quality/test-automation/SKILL.md +185 -0
- package/.claude/skills/domain/quality/test-planning/SKILL.md +177 -0
- package/.claude/skills/leadership/code-review-advanced/SKILL.md +167 -0
- package/.claude/skills/leadership/mentoring/SKILL.md +151 -0
- package/.claude/skills/leadership/technical-debt/SKILL.md +166 -0
- package/.claude/skills/leadership/technical-decision/SKILL.md +160 -0
- package/.claude/skills/security-reports/.gitkeep +0 -0
- package/.claude/skills/skills-registry.yaml +441 -0
- package/README.md +232 -0
- package/bin/agent-team.js +107 -0
- package/package.json +51 -0
- package/src/commands/add.js +227 -0
- package/src/commands/init.js +136 -0
- package/src/commands/list.js +66 -0
- package/src/commands/remove.js +71 -0
- package/src/commands/switch.js +53 -0
- package/src/index.js +11 -0
- package/src/interactive/prompts.js +153 -0
- package/src/server/api/agents.js +150 -0
- package/src/server/api/roles.js +97 -0
- package/src/server/api/skills.js +79 -0
- package/src/server/index.js +78 -0
- package/src/ui/agents.html +174 -0
- package/src/ui/css/styles.css +470 -0
- package/src/ui/index.html +107 -0
- package/src/ui/roles.html +371 -0
- package/src/ui/skills.html +332 -0
- package/src/utils/file-utils.js +193 -0
- package/src/utils/skill-resolver.js +594 -0
- package/src/utils/skill-scanner.js +154 -0
- package/templates/CLAUDE.md.tmpl +42 -0
- package/templates/knowledge.md.tmpl +31 -0
|
@@ -0,0 +1,303 @@
|
|
|
1
|
+
# Scalability Strategies
|
|
2
|
+
|
|
3
|
+
## What is Scalability?
|
|
4
|
+
The ability of a system to handle growing amounts of work by adding resources.
|
|
5
|
+
|
|
6
|
+
## Types of Scaling
|
|
7
|
+
|
|
8
|
+
### Vertical Scaling (Scale Up)
|
|
9
|
+
```
|
|
10
|
+
Before: After:
|
|
11
|
+
┌──────────┐ ┌──────────────────┐
|
|
12
|
+
│ 4 CPU │ │ 64 CPU │
|
|
13
|
+
│ 16 GB │ ──▶ │ 256 GB │
|
|
14
|
+
│ 1 TB │ │ 16 TB │
|
|
15
|
+
└──────────┘ └──────────────────┘
|
|
16
|
+
|
|
17
|
+
Pros:
|
|
18
|
+
- Simple (no code changes)
|
|
19
|
+
- Strong consistency (single node)
|
|
20
|
+
- Lower latency (no network)
|
|
21
|
+
|
|
22
|
+
Cons:
|
|
23
|
+
- Hardware limits
|
|
24
|
+
- Expensive at scale
|
|
25
|
+
- Single point of failure
|
|
26
|
+
- Downtime for upgrades
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
### Horizontal Scaling (Scale Out)
|
|
30
|
+
```
|
|
31
|
+
Before: After:
|
|
32
|
+
┌──────────┐ ┌──────────┐
|
|
33
|
+
│ Server │ │ Server 1 │
|
|
34
|
+
│ │ ──▶ ├──────────┤
|
|
35
|
+
└──────────┘ │ Server 2 │
|
|
36
|
+
├──────────┤
|
|
37
|
+
│ Server 3 │
|
|
38
|
+
└──────────┘
|
|
39
|
+
|
|
40
|
+
Pros:
|
|
41
|
+
- Nearly unlimited scale
|
|
42
|
+
- Commodity hardware
|
|
43
|
+
- No single point of failure
|
|
44
|
+
- Incremental growth
|
|
45
|
+
|
|
46
|
+
Cons:
|
|
47
|
+
- Complexity (distributed)
|
|
48
|
+
- Network latency
|
|
49
|
+
- Data consistency challenges
|
|
50
|
+
- Load balancing needed
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
## Load Balancing
|
|
54
|
+
|
|
55
|
+
### Algorithms
|
|
56
|
+
```
|
|
57
|
+
┌─────────────────────────────────────────────────────────┐
|
|
58
|
+
│ Load Balancer │
|
|
59
|
+
├─────────────────────────────────────────────────────────┤
|
|
60
|
+
│ │
|
|
61
|
+
│ ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐ │
|
|
62
|
+
│ │ Server1 │ │ Server2 │ │ Server3 │ │ Server4 │ │
|
|
63
|
+
│ └─────────┘ └─────────┘ └─────────┘ └─────────┘ │
|
|
64
|
+
│ │
|
|
65
|
+
└─────────────────────────────────────────────────────────┘
|
|
66
|
+
|
|
67
|
+
Strategies:
|
|
68
|
+
1. Round Robin - Rotate through servers
|
|
69
|
+
2. Weighted Round Robin - More weight to stronger servers
|
|
70
|
+
3. Least Connections - Route to least busy
|
|
71
|
+
4. IP Hash - Same IP to same server (session affinity)
|
|
72
|
+
5. Least Response Time - Route to fastest responding
|
|
73
|
+
6. Random - Distribute randomly
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Health Checks
|
|
77
|
+
```
|
|
78
|
+
Active Health Checks:
|
|
79
|
+
- LB periodically checks endpoint
|
|
80
|
+
- Remove unhealthy servers from pool
|
|
81
|
+
- Add back when healthy
|
|
82
|
+
|
|
83
|
+
Passive Health Checks:
|
|
84
|
+
- Monitor real requests
|
|
85
|
+
- Track failure rates
|
|
86
|
+
- Circuit breaker pattern
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Database Scaling
|
|
90
|
+
|
|
91
|
+
### Read Replicas
|
|
92
|
+
```
|
|
93
|
+
┌─────────────┐
|
|
94
|
+
│ Primary │
|
|
95
|
+
│ (Writes) │
|
|
96
|
+
└──────┬──────┘
|
|
97
|
+
│
|
|
98
|
+
┌─────────────┼─────────────┐
|
|
99
|
+
│ │ │
|
|
100
|
+
▼ ▼ ▼
|
|
101
|
+
┌──────────┐ ┌──────────┐ ┌──────────┐
|
|
102
|
+
│ Replica1 │ │ Replica2 │ │ Replica3 │
|
|
103
|
+
│ (Reads) │ │ (Reads) │ │ (Reads) │
|
|
104
|
+
└──────────┘ └──────────┘ └──────────┘
|
|
105
|
+
|
|
106
|
+
Considerations:
|
|
107
|
+
- Replication lag
|
|
108
|
+
- Read-after-write consistency
|
|
109
|
+
- Connection routing
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Sharding (Horizontal Partitioning)
|
|
113
|
+
```
|
|
114
|
+
Sharding Strategies:
|
|
115
|
+
|
|
116
|
+
1. Range-based:
|
|
117
|
+
Shard 1: Users 1-1,000,000
|
|
118
|
+
Shard 2: Users 1,000,001-2,000,000
|
|
119
|
+
Shard 3: Users 2,000,001-3,000,000
|
|
120
|
+
|
|
121
|
+
Pros: Range queries efficient
|
|
122
|
+
Cons: Hot spots, uneven distribution
|
|
123
|
+
|
|
124
|
+
2. Hash-based:
|
|
125
|
+
Shard = hash(user_id) % num_shards
|
|
126
|
+
|
|
127
|
+
Pros: Even distribution
|
|
128
|
+
Cons: Range queries inefficient, resharding complex
|
|
129
|
+
|
|
130
|
+
3. Directory-based:
|
|
131
|
+
Lookup table: user_id → shard
|
|
132
|
+
|
|
133
|
+
Pros: Flexible, easy resharding
|
|
134
|
+
Cons: Lookup overhead, single point of failure
|
|
135
|
+
|
|
136
|
+
4. Geographic:
|
|
137
|
+
Shard by location (US, EU, Asia)
|
|
138
|
+
|
|
139
|
+
Pros: Compliance, latency
|
|
140
|
+
Cons: Uneven distribution possible
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
### Vertical Partitioning
|
|
144
|
+
```
|
|
145
|
+
Split by functionality:
|
|
146
|
+
|
|
147
|
+
┌─────────────────┐ ┌─────────────────┐
|
|
148
|
+
│ Users DB │ │ Orders DB │
|
|
149
|
+
├─────────────────┤ ├─────────────────┤
|
|
150
|
+
│ id │ │ id │
|
|
151
|
+
│ email │ │ user_id │
|
|
152
|
+
│ password_hash │ │ total │
|
|
153
|
+
│ created_at │ │ status │
|
|
154
|
+
└─────────────────┘ │ created_at │
|
|
155
|
+
└─────────────────┘
|
|
156
|
+
|
|
157
|
+
Benefits:
|
|
158
|
+
- Smaller tables, better cache
|
|
159
|
+
- Isolated scaling
|
|
160
|
+
- Security (sensitive data separate)
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
## Caching Strategies
|
|
164
|
+
|
|
165
|
+
### Cache Patterns
|
|
166
|
+
```
|
|
167
|
+
1. Cache-aside (Lazy Loading)
|
|
168
|
+
┌───────┐ ┌───────┐ ┌───────┐
|
|
169
|
+
│Client │────▶│Cache │────▶│ DB │
|
|
170
|
+
└───────┘ └───────┘ └───────┘
|
|
171
|
+
│
|
|
172
|
+
│ miss
|
|
173
|
+
▼
|
|
174
|
+
Application code manages cache
|
|
175
|
+
On read: Check cache → if miss, read DB → populate cache
|
|
176
|
+
On write: Update DB → invalidate cache
|
|
177
|
+
|
|
178
|
+
2. Write-through
|
|
179
|
+
┌───────┐ ┌───────┐ ┌───────┐
|
|
180
|
+
│Client │────▶│Cache │────▶│ DB │
|
|
181
|
+
└───────┘ └───────┘ └───────┘
|
|
182
|
+
│
|
|
183
|
+
│ always write both
|
|
184
|
+
▼
|
|
185
|
+
Write to cache AND DB synchronously
|
|
186
|
+
Data always consistent
|
|
187
|
+
|
|
188
|
+
3. Write-behind (Write-back)
|
|
189
|
+
┌───────┐ ┌───────┐ ┌───────┐
|
|
190
|
+
│Client │────▶│Cache │────▶│ DB │
|
|
191
|
+
└───────┘ └───────┘ └───────┘
|
|
192
|
+
│
|
|
193
|
+
│ async write to DB
|
|
194
|
+
▼
|
|
195
|
+
Write to cache, async write to DB
|
|
196
|
+
Higher throughput, risk of data loss
|
|
197
|
+
|
|
198
|
+
4. Refresh-ahead
|
|
199
|
+
Proactively refresh before expiration
|
|
200
|
+
Good for predictable access patterns
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
### Cache Eviction Policies
|
|
204
|
+
```
|
|
205
|
+
LRU (Least Recently Used):
|
|
206
|
+
- Evict item not accessed longest
|
|
207
|
+
- Good for temporal locality
|
|
208
|
+
|
|
209
|
+
LFU (Least Frequently Used):
|
|
210
|
+
- Evict item accessed least often
|
|
211
|
+
- Good for popularity-based access
|
|
212
|
+
|
|
213
|
+
FIFO (First In First Out):
|
|
214
|
+
- Simple queue-based eviction
|
|
215
|
+
- Less optimal but simple
|
|
216
|
+
|
|
217
|
+
TTL (Time To Live):
|
|
218
|
+
- Expire after time period
|
|
219
|
+
- Good for stale data prevention
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
## Queue-Based Scaling
|
|
223
|
+
|
|
224
|
+
### Message Queue Pattern
|
|
225
|
+
```
|
|
226
|
+
┌─────────┐ ┌─────────────┐ ┌─────────┐
|
|
227
|
+
│Producer │────▶│ Queue │────▶│Consumer │
|
|
228
|
+
└─────────┘ │ │ └─────────┘
|
|
229
|
+
│ ┌─┬─┬─┬─┬─┐ │
|
|
230
|
+
│ └─┴─┴─┴─┴─┘ │
|
|
231
|
+
└─────────────┘
|
|
232
|
+
|
|
233
|
+
Benefits:
|
|
234
|
+
- Decouple producers from consumers
|
|
235
|
+
- Handle traffic spikes (queue absorbs)
|
|
236
|
+
- Scale consumers independently
|
|
237
|
+
- Asynchronous processing
|
|
238
|
+
|
|
239
|
+
Examples:
|
|
240
|
+
- RabbitMQ, Kafka, SQS, Redis Streams
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
### Backpressure
|
|
244
|
+
```
|
|
245
|
+
When consumers can't keep up:
|
|
246
|
+
|
|
247
|
+
1. Drop (oldest/newest/random)
|
|
248
|
+
2. Block producer
|
|
249
|
+
3. Shed load (reject new requests)
|
|
250
|
+
4. Scale consumers
|
|
251
|
+
5. Buffer (temporary solution)
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Autoscaling
|
|
255
|
+
|
|
256
|
+
### Metrics for Scaling
|
|
257
|
+
```
|
|
258
|
+
Scale Out Triggers:
|
|
259
|
+
- CPU > 70% for 5 minutes
|
|
260
|
+
- Memory > 80% for 5 minutes
|
|
261
|
+
- Request queue depth > 100
|
|
262
|
+
- Response time > 500ms
|
|
263
|
+
- Custom business metrics
|
|
264
|
+
|
|
265
|
+
Scale In Triggers:
|
|
266
|
+
- CPU < 30% for 15 minutes
|
|
267
|
+
- Memory < 40% for 15 minutes
|
|
268
|
+
- Queue depth < 10
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
### Scaling Strategies
|
|
272
|
+
```
|
|
273
|
+
Reactive:
|
|
274
|
+
- Respond to current metrics
|
|
275
|
+
- May be too slow for spikes
|
|
276
|
+
|
|
277
|
+
Predictive:
|
|
278
|
+
- Use ML to predict load
|
|
279
|
+
- Scale before traffic arrives
|
|
280
|
+
- Requires historical data
|
|
281
|
+
|
|
282
|
+
Scheduled:
|
|
283
|
+
- Scale at known times
|
|
284
|
+
- Black Friday, end of month
|
|
285
|
+
- Simple and predictable
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
## Best Practices
|
|
289
|
+
|
|
290
|
+
### Design for Scale
|
|
291
|
+
1. **Stateless services** - No server affinity
|
|
292
|
+
2. **Idempotent operations** - Safe to retry
|
|
293
|
+
3. **Async where possible** - Don't block
|
|
294
|
+
4. **Partition data** - Enable horizontal scaling
|
|
295
|
+
5. **Cache aggressively** - Reduce DB load
|
|
296
|
+
6. **Use CDNs** - Offload static content
|
|
297
|
+
|
|
298
|
+
### Avoid
|
|
299
|
+
1. **Distributed transactions** - Use sagas
|
|
300
|
+
2. **Joins across shards** - Denormalize
|
|
301
|
+
3. **Synchronous dependencies** - Add queues
|
|
302
|
+
4. **Locks on hot data** - Use optimistic locking
|
|
303
|
+
5. **Single points of failure** - Replicate everything
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: tech-selection
|
|
3
|
+
description: |
|
|
4
|
+
Use when evaluating and selecting technologies for a project.
|
|
5
|
+
Provides frameworks for objective comparison and decision making.
|
|
6
|
+
version: 1.0.0
|
|
7
|
+
category: architecture
|
|
8
|
+
tags:
|
|
9
|
+
- technology
|
|
10
|
+
- evaluation
|
|
11
|
+
- selection
|
|
12
|
+
- decision-framework
|
|
13
|
+
dependencies:
|
|
14
|
+
- adr-writing
|
|
15
|
+
references:
|
|
16
|
+
- references/evaluation-framework.md
|
|
17
|
+
- references/build-vs-buy.md
|
|
18
|
+
- references/tech-radar.md
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
# Technology Selection
|
|
22
|
+
|
|
23
|
+
## Core Principle
|
|
24
|
+
**Choose technology based on requirements, not trends. Fit the tool to the problem.**
|
|
25
|
+
|
|
26
|
+
## When to Use This Skill
|
|
27
|
+
|
|
28
|
+
### Trigger Conditions
|
|
29
|
+
- Starting a new project
|
|
30
|
+
- Evaluating alternatives for existing system
|
|
31
|
+
- Replacing deprecated technology
|
|
32
|
+
- Team wants to adopt new technology
|
|
33
|
+
|
|
34
|
+
### Keywords
|
|
35
|
+
- "choose technology"
|
|
36
|
+
- "evaluate options"
|
|
37
|
+
- "technology selection"
|
|
38
|
+
- "which framework"
|
|
39
|
+
- "build vs buy"
|
|
40
|
+
|
|
41
|
+
## Evaluation Framework
|
|
42
|
+
|
|
43
|
+
### Step 1: Define Requirements
|
|
44
|
+
```
|
|
45
|
+
Functional Requirements:
|
|
46
|
+
- What must the technology do?
|
|
47
|
+
- What features are required?
|
|
48
|
+
- What integrations needed?
|
|
49
|
+
|
|
50
|
+
Non-Functional Requirements:
|
|
51
|
+
- Performance requirements
|
|
52
|
+
- Scalability needs
|
|
53
|
+
- Security requirements
|
|
54
|
+
- Compliance requirements
|
|
55
|
+
|
|
56
|
+
Constraints:
|
|
57
|
+
- Budget constraints
|
|
58
|
+
- Timeline constraints
|
|
59
|
+
- Team expertise
|
|
60
|
+
- Infrastructure constraints
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Step 2: Create Evaluation Matrix
|
|
64
|
+
```
|
|
65
|
+
| Criteria | Weight | Tech A | Tech B | Tech C |
|
|
66
|
+
|----------------|--------|--------|--------|--------|
|
|
67
|
+
| Performance | 20% | 4/5 | 5/5 | 3/5 |
|
|
68
|
+
| Scalability | 15% | 5/5 | 4/5 | 4/5 |
|
|
69
|
+
| Developer XP | 15% | 4/5 | 3/5 | 5/5 |
|
|
70
|
+
| Documentation | 10% | 5/5 | 4/5 | 4/5 |
|
|
71
|
+
| Community | 15% | 4/5 | 5/5 | 3/5 |
|
|
72
|
+
| Cost | 15% | 3/5 | 4/5 | 5/5 |
|
|
73
|
+
| Risk | 10% | 4/5 | 4/5 | 3/5 |
|
|
74
|
+
|----------------|--------|--------|--------|--------|
|
|
75
|
+
| Weighted Score | 100% | 4.05 | 4.10 | 3.85 |
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Step 3: Evaluate Options
|
|
79
|
+
```
|
|
80
|
+
For each technology, assess:
|
|
81
|
+
1. Maturity - How long has it existed?
|
|
82
|
+
2. Adoption - Who else uses it?
|
|
83
|
+
3. Support - Commercial/community support?
|
|
84
|
+
4. Documentation - Quality and completeness?
|
|
85
|
+
5. Learning curve - Time to proficiency?
|
|
86
|
+
6. Ecosystem - Plugins, integrations?
|
|
87
|
+
7. Future outlook - Active development?
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
### Step 4: Prototype/POC
|
|
91
|
+
```
|
|
92
|
+
If uncertain:
|
|
93
|
+
1. Build small prototype
|
|
94
|
+
2. Test critical requirements
|
|
95
|
+
3. Involve team members
|
|
96
|
+
4. Document findings
|
|
97
|
+
5. Time-box the evaluation
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
### Step 5: Document Decision
|
|
101
|
+
```
|
|
102
|
+
Write ADR with:
|
|
103
|
+
- Evaluated options
|
|
104
|
+
- Scoring rationale
|
|
105
|
+
- Final decision
|
|
106
|
+
- Consequences
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Decision Criteria
|
|
110
|
+
|
|
111
|
+
### Technology Fit Criteria
|
|
112
|
+
```
|
|
113
|
+
1. Problem Fit
|
|
114
|
+
- Does it solve our problem?
|
|
115
|
+
- Is it over/under-engineered?
|
|
116
|
+
|
|
117
|
+
2. Team Fit
|
|
118
|
+
- Does team have expertise?
|
|
119
|
+
- Can team learn it quickly?
|
|
120
|
+
- Is talent available to hire?
|
|
121
|
+
|
|
122
|
+
3. Organization Fit
|
|
123
|
+
- Does it align with tech strategy?
|
|
124
|
+
- Does it fit existing infrastructure?
|
|
125
|
+
- Does it meet compliance needs?
|
|
126
|
+
|
|
127
|
+
4. Ecosystem Fit
|
|
128
|
+
- Integration with existing tools?
|
|
129
|
+
- Community support?
|
|
130
|
+
- Long-term viability?
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
## Build vs Buy Decision
|
|
134
|
+
|
|
135
|
+
### When to Build
|
|
136
|
+
```
|
|
137
|
+
✅ Core competitive advantage
|
|
138
|
+
✅ Unique requirements
|
|
139
|
+
✅ Full control needed
|
|
140
|
+
✅ No suitable solution exists
|
|
141
|
+
✅ Long-term strategic value
|
|
142
|
+
✅ Team has expertise and time
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### When to Buy
|
|
146
|
+
```
|
|
147
|
+
✅ Commodity functionality
|
|
148
|
+
✅ Faster time to market needed
|
|
149
|
+
✅ Team lacks expertise
|
|
150
|
+
✅ Maintenance burden too high
|
|
151
|
+
✅ Solution exists and is mature
|
|
152
|
+
✅ Not core to business
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
## Common Evaluation Pitfalls
|
|
156
|
+
|
|
157
|
+
### Avoid
|
|
158
|
+
```
|
|
159
|
+
❌ Resume-driven development
|
|
160
|
+
❌ Hype-driven decisions
|
|
161
|
+
❌ Not involving team
|
|
162
|
+
❌ Skipping POC for critical choices
|
|
163
|
+
❌ Ignoring operational concerns
|
|
164
|
+
❌ Underestimating learning curve
|
|
165
|
+
❌ Ignoring vendor lock-in
|
|
166
|
+
❌ Not considering total cost
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
## Output
|
|
170
|
+
|
|
171
|
+
When using this skill:
|
|
172
|
+
1. **Evaluation Matrix** - Scored comparison
|
|
173
|
+
2. **ADR** - Documented decision
|
|
174
|
+
3. **POC Report** - If prototype was built
|
|
175
|
+
4. **Migration Plan** - If replacing existing tech
|
|
176
|
+
|
|
177
|
+
## Rules
|
|
178
|
+
|
|
179
|
+
### DO
|
|
180
|
+
- ✅ Start with requirements, not solutions
|
|
181
|
+
- ✅ Evaluate at least 2-3 options
|
|
182
|
+
- ✅ Include team in evaluation
|
|
183
|
+
- ✅ Consider total cost of ownership
|
|
184
|
+
- ✅ Build POC for risky choices
|
|
185
|
+
- ✅ Document decision with ADR
|
|
186
|
+
|
|
187
|
+
### DON'T
|
|
188
|
+
- ❌ Choose based on trends/hype
|
|
189
|
+
- ❌ Make decision alone
|
|
190
|
+
- ❌ Ignore existing expertise
|
|
191
|
+
- ❌ Forget operational costs
|
|
192
|
+
- ❌ Skip documentation
|