docs(10_Wiki): Topic_Business/General/Graphic/Programming을 Topics/ 하위로 이동
최상위 10_Wiki/Topic_*였던 4개 카테고리 폴더를 10_Wiki/Topics/Topic_* 로 재배치. 콘텐츠 변경 없음(순수 폴더 이동) — Topics/ 하위 나머지 폴더는 이미 지난 커밋에서 전부 정리된 상태(잔존 항목은 에이전트 운영 상태 및 사용자가 보존을 요청한 업데이트0615/무제 3.canvas 뿐).
This commit is contained in:
@@ -0,0 +1,242 @@
|
||||
---
|
||||
id: wiki-2026-0508-axify
|
||||
title: Axify (Engineering Productivity Platform)
|
||||
category: 10_Wiki/Topics
|
||||
status: verified
|
||||
canonical_id: self
|
||||
aliases: [Axify, DORA dashboard, value stream mapping, engineering metrics, AI impact measurement]
|
||||
duplicate_of: none
|
||||
source_trust_level: B
|
||||
confidence_score: 0.85
|
||||
verification_status: applied
|
||||
tags: [dora, devops-metrics, engineering-productivity, value-stream, ai-impact, axify, observability]
|
||||
raw_sources: []
|
||||
last_reinforced: 2026-05-10
|
||||
github_commit: pending
|
||||
tech_stack:
|
||||
language: SaaS
|
||||
framework: Axify Platform
|
||||
---
|
||||
|
||||
# Axify
|
||||
|
||||
## 📌 한 줄 통찰
|
||||
> **"매 engineering productivity 의 데이터화"**. 매 DORA + value stream + AI 도입 의 measure. 매 vanity metric (사용량) 의 X — 매 actual outcome (lead time, deploy freq) 의 track. 매 modern engineering leader 의 dashboard.
|
||||
|
||||
## 📖 핵심
|
||||
|
||||
### 매 product
|
||||
- 매 SaaS platform.
|
||||
- 매 engineering leader 의 target.
|
||||
- 매 DORA + VSM + AI impact.
|
||||
|
||||
### DORA Metrics (4 key)
|
||||
1. **Deployment Frequency**: 매 production 의 deploy 빈도.
|
||||
2. **Lead Time for Changes**: 매 commit → prod 의 시간.
|
||||
3. **Mean Time to Recover (MTTR)**: 매 incident 의 회복.
|
||||
4. **Change Failure Rate**: 매 deploy 후 의 incident 비율.
|
||||
|
||||
→ 매 Google "Accelerate" 책 의 5-year research.
|
||||
|
||||
### DORA tier
|
||||
| Tier | Deploy freq | Lead time | MTTR | CFR |
|
||||
|---|---|---|---|---|
|
||||
| Elite | On-demand | <1 hr | <1 hr | 0-15% |
|
||||
| High | weekly-monthly | 1 day-1 week | <1 day | 16-30% |
|
||||
| Medium | monthly | 1 week-1 month | <1 day | 16-30% |
|
||||
| Low | <monthly | 1-6 months | >1 week | 16-30% |
|
||||
|
||||
### Value Stream Mapping (VSM)
|
||||
- 매 idea → prod 의 entire flow.
|
||||
- 매 wait time vs work time.
|
||||
- 매 bottleneck identify.
|
||||
- 매 Kanban / Lean 의 origin.
|
||||
|
||||
### Axify Intelligence
|
||||
- 매 LLM-powered analyst.
|
||||
- 매 generic LLM 가 X — 매 org 의 repo / pipeline / incident 의 학습.
|
||||
- 매 metric 변동 의 cause analysis.
|
||||
- 매 chatbot 의 query.
|
||||
|
||||
### AI Impact 측정 (vs vanity metric)
|
||||
| Vanity (X) | Real (✓) |
|
||||
|---|---|
|
||||
| 매 PR 의 # | 매 PR cycle time |
|
||||
| 매 AI 의 사용량 | 매 first review time |
|
||||
| 매 suggestion 의 # | 매 acceptance rate |
|
||||
| 매 line 의 generated | 매 deploy frequency |
|
||||
| 매 활성 user | 매 lead time |
|
||||
|
||||
### 매 integration
|
||||
- **VCS**: GitHub, GitLab, Bitbucket, Azure DevOps.
|
||||
- **CI/CD**: Jenkins, CircleCI, GitHub Actions.
|
||||
- **Issue**: Jira, Linear.
|
||||
- **Chat**: Slack, MS Teams.
|
||||
|
||||
### 매 case study
|
||||
- **BDC**: 매 51% deploy speed 향상.
|
||||
- **Newforma**: 매 22× deploy 의 frequency.
|
||||
|
||||
### 매 alternative
|
||||
- **LinearB**: similar.
|
||||
- **Faros AI**: data layer.
|
||||
- **Code Climate Velocity**: similar.
|
||||
- **Sleuth**: incident-focused.
|
||||
- **Pluralsight Flow**: open-source-friendly.
|
||||
|
||||
## 💻 패턴
|
||||
|
||||
### DORA collection (custom)
|
||||
```python
|
||||
from datetime import datetime, timedelta
|
||||
from github import Github
|
||||
|
||||
g = Github('token')
|
||||
repo = g.get_repo('org/repo')
|
||||
|
||||
def deployment_frequency(weeks=4):
|
||||
cutoff = datetime.now() - timedelta(weeks=weeks)
|
||||
deploys = [d for d in repo.get_deployments()
|
||||
if d.created_at > cutoff and d.environment == 'production']
|
||||
return len(deploys) / weeks # 매 deploys per week
|
||||
|
||||
def lead_time(weeks=4):
|
||||
cutoff = datetime.now() - timedelta(weeks=weeks)
|
||||
deploys = [d for d in repo.get_deployments()
|
||||
if d.created_at > cutoff and d.environment == 'production']
|
||||
|
||||
lead_times = []
|
||||
for d in deploys:
|
||||
commit = repo.get_commit(d.sha)
|
||||
lead_times.append((d.created_at - commit.commit.author.date).total_seconds() / 3600)
|
||||
|
||||
return median(lead_times) # hours
|
||||
|
||||
def mttr(weeks=4):
|
||||
cutoff = datetime.now() - timedelta(weeks=weeks)
|
||||
incidents = fetch_incidents(cutoff) # 매 PagerDuty / Sentry / etc.
|
||||
return median(i.resolved_at - i.started_at for i in incidents).total_seconds() / 3600
|
||||
|
||||
def change_failure_rate(weeks=4):
|
||||
deploys = count_deploys(weeks)
|
||||
incidents = count_incidents(weeks, related_to_deploy=True)
|
||||
return incidents / deploys
|
||||
```
|
||||
|
||||
### Value Stream visualization
|
||||
```python
|
||||
def value_stream_data(repo, weeks=4):
|
||||
cutoff = datetime.now() - timedelta(weeks=weeks)
|
||||
stages = {
|
||||
'idea_to_first_commit': [],
|
||||
'first_commit_to_pr': [],
|
||||
'pr_to_review': [],
|
||||
'review_to_merge': [],
|
||||
'merge_to_deploy': [],
|
||||
}
|
||||
|
||||
for ticket in fetch_tickets(cutoff):
|
||||
commits = ticket.linked_commits()
|
||||
prs = ticket.linked_prs()
|
||||
deploys = ticket.linked_deploys()
|
||||
|
||||
if commits and ticket.created_at:
|
||||
stages['idea_to_first_commit'].append(commits[0].time - ticket.created_at)
|
||||
# ... etc
|
||||
|
||||
return {stage: median(times) for stage, times in stages.items()}
|
||||
```
|
||||
|
||||
### AI Impact measurement
|
||||
```python
|
||||
def ai_review_impact(before_date, after_date):
|
||||
"""매 AI 의 도입 전 / 후 의 metric 비교."""
|
||||
metrics = ['lead_time', 'pr_cycle_time', 'first_review_time',
|
||||
'deploy_frequency', 'change_failure_rate']
|
||||
|
||||
return {
|
||||
m: {
|
||||
'before': calculate(m, ref_date=before_date, window=4),
|
||||
'after': calculate(m, ref_date=after_date, window=4),
|
||||
}
|
||||
for m in metrics
|
||||
}
|
||||
|
||||
# 매 statistical significance check
|
||||
def is_significant(before_samples, after_samples, alpha=0.05):
|
||||
from scipy import stats
|
||||
_, p = stats.ttest_ind(before_samples, after_samples)
|
||||
return p < alpha
|
||||
```
|
||||
|
||||
### Slack notification (DORA)
|
||||
```python
|
||||
import slack_sdk
|
||||
|
||||
def post_weekly_dora():
|
||||
metrics = {
|
||||
'deploy_freq': deployment_frequency(),
|
||||
'lead_time_hours': lead_time(),
|
||||
'mttr_hours': mttr(),
|
||||
'cfr_pct': change_failure_rate() * 100,
|
||||
}
|
||||
|
||||
text = f"""*Weekly DORA*
|
||||
:rocket: Deploys: {metrics['deploy_freq']:.1f}/week
|
||||
:stopwatch: Lead time: {metrics['lead_time_hours']:.1f}h
|
||||
:wrench: MTTR: {metrics['mttr_hours']:.1f}h
|
||||
:fire: CFR: {metrics['cfr_pct']:.1f}%"""
|
||||
|
||||
slack_client.chat_postMessage(channel='#engineering', text=text)
|
||||
```
|
||||
|
||||
### Outcome > vanity check
|
||||
```python
|
||||
def is_real_improvement(metric_before, metric_after, vanity_metric_change):
|
||||
"""매 vanity 의 increase 가 매 real metric 의 improve?"""
|
||||
real_improvement = metric_after['lead_time'] < metric_before['lead_time']
|
||||
if vanity_metric_change > 0 and not real_improvement:
|
||||
return 'WARN: vanity-only — 매 사용량 ↑ 가, 매 lead time 의 변화 X'
|
||||
return 'OK' if real_improvement else 'NEUTRAL'
|
||||
```
|
||||
|
||||
## 🤔 결정 기준
|
||||
| 상황 | Tool |
|
||||
|---|---|
|
||||
| Modern team | Axify / LinearB |
|
||||
| Open-source / DIY | Custom DORA script |
|
||||
| Incident-focused | Sleuth |
|
||||
| Data warehouse | Faros AI |
|
||||
| Manual | GitHub Insights |
|
||||
| Free tier | Pluralsight Flow |
|
||||
|
||||
**기본값**: DORA + VSM + AI impact 의 monthly review.
|
||||
|
||||
## 🔗 Graph
|
||||
- 부모: [[DevOps]] · [[SRE]]
|
||||
- 변형: [[DORA-Metrics]] · [[Value-Stream-Mapping]] · [[Engineering-Metrics]]
|
||||
- Adjacent: [[CI CD]] · [[Git Branching Strategies]] · [[Code-Review]] · [[Goodharts-Law]]
|
||||
|
||||
## 🤖 LLM 활용
|
||||
**언제**: 매 engineering metrics 의 design. 매 AI tool 도입 의 ROI 의 measure. 매 productivity dashboard.
|
||||
**언제 X**: 매 individual surveillance (toxic). 매 single metric goal (Goodhart).
|
||||
|
||||
## ❌ 안티패턴
|
||||
- **Vanity metric 만**: 매 사용량 ↑ 가, 매 outcome X.
|
||||
- **Individual measure**: 매 surveillance.
|
||||
- **Single metric goal**: 매 game.
|
||||
- **No baseline**: 매 before-after 비교 X.
|
||||
- **Real-time alert 의 noise**: 매 fatigue.
|
||||
- **No statistical sig**: 매 noise 의 trend mistake.
|
||||
|
||||
## 🧪 검증 / 중복
|
||||
- Verified (DORA "Accelerate" book, Axify docs).
|
||||
- 신뢰도 B.
|
||||
- Related: [[Quality_Code_Review_Modern]] · [[Git Branching Strategies]] · [[Goodharts-Law]] · [[CI CD]].
|
||||
|
||||
## 🕓 Changelog
|
||||
| 날짜 | 변경 |
|
||||
|---|---|
|
||||
| 2026-04-18 | Auto-mapped |
|
||||
| 2026-05-08 | Phase 1 |
|
||||
| 2026-05-10 | Manual cleanup — DORA + VSM + AI impact + 매 GitHub API DORA collection code |
|
||||
Reference in New Issue
Block a user