-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathengineering.html
More file actions
267 lines (242 loc) · 18.8 KB
/
Copy pathengineering.html
File metadata and controls
267 lines (242 loc) · 18.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
<!DOCTYPE html>
<html lang="en" data-theme="dark">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Engineering | Orange Dev Tracker | Bitcoin Data Labs</title>
<meta name="description"
content="Real-time analytics and KPIs for Bitcoin Core development. Track unique contributors, maintainers, codebase size, and commit trends.">
<link rel="canonical" href="https://tracker.bitcoindatalabs.org/index.html">
<script src="https://cdn.jsdelivr.net/npm/echarts@5.4.3/dist/echarts.min.js"></script>
<link href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;600&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://bitcoindatalabs.org/styles/styles.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">
<link rel="icon" type="image/png" href="https://bitcoindatalabs.org/favicon.png">
<!-- Open Graph -->
<meta property="og:title" content="Engineering | Orange Dev Tracker | Bitcoin Data Labs">
<meta property="og:description" content="Real-time analytics and KPIs for Bitcoin Core development.">
<meta property="og:image" content="https://tracker.bitcoindatalabs.org/assets/og-image.png">
<link rel="stylesheet" href="styles/style.css">
</head>
<body class="has-fixed-header">
<div id="main-container">
<div id="header"></div>
<div id="app-content">
<div class="page-hero">
<p class="hero-narrative" style="margin-bottom: 12px;">How fast is Bitcoin Core shipping code — and where is the effort going?</p>
<div style="display: flex; justify-content: space-between; align-items: flex-end; margin-bottom: 10px;">
<p style="color: var(--text-secondary); font-size: 0.95rem; margin: 0; opacity: 0.8;">
<i class="fas fa-database" style="font-size: 0.85em; margin-right: 4px;"></i> <strong>Scope:</strong> Core (<span style="font-family: var(--bdl-font-mono);">bitcoin/bitcoin</span>, <span style="font-family: var(--bdl-font-mono);">gui</span>, <span style="font-family: var(--bdl-font-mono);">secp256k1</span>) and Ecosystem (<span style="font-family: var(--bdl-font-mono);">guix.sigs</span>, <span style="font-family: var(--bdl-font-mono);">HWI</span>, <span style="font-family: var(--bdl-font-mono);">qa-assets</span>).
</p>
<div id="freshness-line" class="freshness-line" style="margin: 0;">Data refreshed: -</div>
</div>
<!-- Vital Signs: KPIs -->
<div class="hero-scorecard" id="vital-signs" style="margin-bottom: 30px;">
<div class="kpi-card" style="border: none; border-right: 1px solid rgba(255,255,255,0.05); border-radius: 0; box-shadow: none; background: transparent; position: relative;">
<div class="kpi-label">
Contributors
</div>
<div class="kpi-value" id="kpi-contributors" style="margin-bottom: 2px;">-</div>
<div class="kpi-sub" id="kpi-contributors-sub" style="display: flex; gap: 10px; justify-content: center; font-size: 0.85em; margin-top: 4px;">
<span style="color: var(--primary); border-bottom: 1px dotted; cursor: help;" title="Core repositories include bitcoin/bitcoin, bitcoin-core/gui, and bitcoin-core/secp256k1">Core: <span id="kpi-contributors-core">-</span></span>
<span style="color: var(--text-secondary); border-bottom: 1px dotted; cursor: help;" title="Ecosystem repositories (e.g., guix.sigs, HWI, qa-assets, ...)">Eco: <span id="kpi-contributors-eco">-</span></span>
</div>
</div>
<div class="kpi-card" style="border: none; border-right: 1px solid rgba(255,255,255,0.05); border-radius: 0; box-shadow: none; background: transparent;">
<div class="kpi-label">Maintainers</div>
<div class="kpi-value" id="kpi-maintainers">-</div>
<div class="kpi-sub">Total / Active</div>
</div>
<div class="kpi-card" style="border: none; border-right: 1px solid rgba(255,255,255,0.05); border-radius: 0; box-shadow: none; background: transparent;">
<div class="kpi-label">PRs Merged</div>
<div class="kpi-value" id="kpi-prs-merged">-</div>
<div class="kpi-sub" id="kpi-prs-merged-sub">in last 30 days</div>
</div>
<div class="kpi-card" style="border: none; border-right: 1px solid rgba(255,255,255,0.05); border-radius: 0; box-shadow: none; background: transparent; position: relative;">
<div class="kpi-label">
Total Commits
</div>
<div class="kpi-value" id="kpi-total-commits" style="margin-bottom: 2px;">-</div>
<div class="kpi-sub" id="kpi-commits-sub" style="display: flex; gap: 10px; justify-content: center; font-size: 0.85em; margin-top: 4px;">
<span style="color: var(--primary); border-bottom: 1px dotted; cursor: help;" title="Core repositories include bitcoin/bitcoin, bitcoin-core/gui, and bitcoin-core/secp256k1">Core: <span id="kpi-commits-core">-</span></span>
<span style="color: var(--text-secondary); border-bottom: 1px dotted; cursor: help;" title="Ecosystem repositories (e.g., guix.sigs, HWI, qa-assets, ...)">Eco: <span id="kpi-commits-eco">-</span></span>
</div>
</div>
<div class="kpi-card" style="border: none; border-radius: 0; box-shadow: none; background: transparent;">
<div class="kpi-label">BIPs</div>
<div class="kpi-value" id="kpi-bips">-</div>
<div class="kpi-sub" id="kpi-bips-sub">Active / Discussed recently</div>
</div>
</div>
</div>
<div class="container" style="padding-top: 0;">
<!-- Row 1: Structural Distribution (Status Quo) -->
<section style="display: flex; gap: 20px; margin-bottom: 30px; min-height: 400px; flex-wrap: wrap;">
<!-- Left 2/5: Work Snapshot -->
<div class="card" style="flex: 2; min-width: 300px; display: flex; flex-direction: column;">
<h3 style="margin: 0 0 5px 0;">Unique Commits by Area (Current Snapshot)</h3>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0 0 15px 0; line-height: 1.4;">Shows the distribution of engineering effort across the codebase right now. Useful for identifying which subsystems are currently receiving the most active development.</p>
<div id="chart-snapshot-work" style="flex: 1; height: 350px; width: 100%;"></div>
</div>
<!-- Right 3/5: Human Pyramid -->
<div class="card" style="flex: 3; min-width: 300px; display: flex; flex-direction: column;">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 5px;">
<h3 style="margin: 0;">The Engagement Pyramid (Authored Commits)</h3>
</div>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0 0 15px 0; line-height: 1.4;">Categorizes contributors by their lifetime commit volume. Highlights the project's reliance on core maintainers versus the broader long-tail of casual contributors.</p>
<div id="chart-engagement-tiers" style="flex: 1; height: 350px; width: 100%;"></div>
</div>
</section>
<!-- Act 2: Codebase Anatomy -->
<section class="card" style="margin-bottom: 30px;">
<div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 15px;">
<div>
<h3 style="margin: 0 0 5px 0;">Codebase Anatomy</h3>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0; line-height: 1.4; max-width: 700px;">Explore the architecture and size of the codebase across different programming languages and functional areas.</p>
</div>
</div>
<div class="kpi-row" style="margin-bottom: 30px;">
<div class="metric-card">
<div class="metric-label">Total Volume</div>
<div class="metric-value" id="kpi-total-lines">-</div>
<div style="font-size:0.8em; color:var(--text-secondary);">Lines of Code (LOC)</div>
</div>
<div class="metric-card">
<div class="metric-label">File Count</div>
<div class="metric-value" id="kpi-total-files">-</div>
<div style="font-size:0.8em; color:var(--text-secondary);">Source Files</div>
</div>
<div class="metric-card">
<div class="metric-label">Tech Stack</div>
<div class="metric-value" id="kpi-total-langs">-</div>
<div style="font-size:0.8em; color:var(--text-secondary);">Active Languages</div>
</div>
</div>
<!-- Row 1: Category Analysis -->
<div class="chart-row">
<div class="chart-box">
<div class="chart-header">Functional Footprint (File Count)</div>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin-bottom: 20px; line-height: 1.4;">Shows how the codebase is structured by functional area, based on the sheer number of source files. Highlights architectural breadth.</p>
<div id="chart-snapshot-files-cat" style="height:300px;"></div>
</div>
<div class="chart-box">
<div class="chart-header">Code Volume by Category (LOC)</div>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin-bottom: 20px; line-height: 1.4;">Measures the size of each functional area by lines of code. Reveals where the heaviest logic and complexity reside.</p>
<div id="chart-snapshot-volume" style="height:300px;"></div>
</div>
</div>
<!-- Row 2: Language Analysis -->
<div class="chart-row">
<div class="chart-box">
<div class="chart-header">Polyglot Composition (File Count)</div>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin-bottom: 20px; line-height: 1.4;">Breaks down the file count by programming language. Useful for understanding the variety of tooling and scripting used.</p>
<div id="chart-snapshot-files-lang" style="height:300px;"></div>
</div>
<div class="chart-box">
<div class="chart-header">Tech Stack Dominance (LOC)</div>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin-bottom: 20px; line-height: 1.4;">Displays the dominant programming languages by lines of code. Emphasizes the project's heavy reliance on core languages like C++ and Python.</p>
<div id="chart-snapshot-stack" style="height:300px;"></div>
</div>
</div>
<!-- Disclaimer -->
<div
style="border: 1px solid var(--border-color); background: var(--bg-secondary); padding: 20px; border-radius: 12px; margin-bottom: 30px; color: var(--text-secondary); text-align: center; font-size: 14px;">
<strong style="color: var(--secondary);">⚠️ Data Normalization Notice</strong><br>
Historical line-of-code trends are mathematically scaled to match the current static codebase size (0.9M
LOC).<br>
Discrepancies between historical net churn (adds - deletes) and actual on-disk size have been normalized to
reflect realistic growth patterns.
</div>
</section>
<!-- Row 2: The Hero Narrative (Historial Context) -->
<section class="card" style="margin-bottom: 30px;">
<div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 15px;">
<div>
<h3 style="margin: 0 0 5px 0;">Evolution of Functional Areas (Authored Commits) <span id="badge-category-partial"
class="partial-year-badge" style="display: none;">2026 Partial</span></h3>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0; line-height: 1.4; max-width: 700px;">Tracks how development focus shifts over time. Shows the historical velocity of code authored in different subsystems, revealing evolving technical priorities.</p>
</div>
<div style="display: flex; gap: 10px; align-items: center;">
<div class="window-toggle" style="margin: 0;">
<button id="btn-category-year-full" class="window-btn active">Full Years</button>
<button id="btn-category-year-ytd" class="window-btn">YTD 2026</button>
</div>
</div>
</div>
<div id="chart-category" style="height: 450px; width: 100%;"></div>
<hr style="border: 0; border-top: 1px solid var(--border-color); margin: 30px 0;">
<div style="margin-bottom: 15px;">
<h3 style="margin: 0 0 5px 0;">Longitudinal Tech Evolution (Lines of Code 2009-2025)</h3>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0; line-height: 1.4;">Tracks the growth of different programming languages over time. Shows historical shifts in technology choices and testing infrastructure.</p>
</div>
<div id="chart-streamgraph" style="height:400px; width: 100%;"></div>
<hr style="border: 0; border-top: 1px solid var(--border-color); margin: 30px 0;">
<div style="margin-bottom: 15px;">
<h3 style="margin: 0 0 5px 0;">Longitudinal Category Evolution (Lines of Code 2009-2025)</h3>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0; line-height: 1.4;">Visualizes the historical expansion of functional areas. Illustrates when specific subsystems (e.g., wallet, consensus) experienced rapid development.</p>
</div>
<div id="chart-category-evolution" style="height:400px; width: 100%;"></div>
</section>
<!-- Row 3: Momentum (Velocity) -->
<section style="display: flex; gap: 20px; margin-bottom: 30px; min-height: 400px; flex-wrap: wrap;">
<!-- Full Width: Code Committer Onboarding -->
<div class="card" style="flex: 1; width: 100%; display: flex; flex-direction: column;">
<div style="display: flex; justify-content: space-between; align-items: flex-start; margin-bottom: 15px;">
<div>
<h3 style="margin: 0 0 5px 0;">New Code Contributors <span id="badge-growth-partial"
class="partial-year-badge" style="display: none;">2026 Partial</span></h3>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0; line-height: 1.4; max-width: 700px;">Measures the onboarding rate of developers making their first code commit across Core and Ecosystem repositories. Indicates the project's ability to attract and integrate engineering talent over time.</p>
</div>
<div class="window-toggle" style="margin: 0;">
<button id="btn-growth-year-full" class="window-btn active">Full Years</button>
<button id="btn-growth-year-ytd" class="window-btn">YTD 2026</button>
</div>
</div>
<div id="chart-growth" style="flex: 1; height: 350px;"></div>
</div>
</section>
<!-- Act 5: Engineering Rigor -->
<section class="card" style="margin-bottom: 30px;">
<h3 style="margin-bottom: 5px;">Engineering Efficiency: Historical Churn vs. Net Change</h3>
<p style="color: var(--text-secondary); font-size: 0.85rem; margin: 0 0 20px 0; line-height: 1.4;">Tracks the ratio of code added/deleted against the net change in repository size. Highlighting weeks where net LOC went down but churn was high reveals periods of intense refactoring and high-quality engineering.</p>
<div id="chart-churn" style="height: 500px; width: 100%;"></div>
<!-- Explanatory Text Footer -->
<div class="info-box accent-left">
<h4 style="margin-top: 0; color: inherit; display: flex; align-items: center; gap: 8px;">
<i class="fas fa-microscope"></i> How to Analyze this Data
</h4>
<div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(250px, 1fr)); gap: 20px;">
<div>
<strong style="color: var(--text-primary);">Total Effort (Churn Intensity)</strong><br>
The grey bars represent the <b>total volume of activity</b> (adds + deletes). Large bars mean
the code was heavily modified, even if the final size didn't change much.
</div>
<div>
<strong style="color: var(--text-primary);">Footprint (Net Change)</strong><br>
The solid line shows <b>system growth or shrinkage</b>. If the line dips below zero while churn
is
high, it indicates a "Refactoring Week" where code was improved and simplified.
</div>
<div>
<strong style="color: var(--text-primary);">Refactoring Discipline</strong><br>
High churn paired with negative net change is the hallmark of engineering discipline.
These "Net-Negative" sprints prove that developers are simplifying the system rather than just
adding complexity
</div>
</div>
</div>
</section>
</div>
</div>
</div>
<div id="footer"></div>
<script src="https://bitcoindatalabs.org/components/app-components.js"></script>
<script src="js/utils.js"></script>
<script src="js/theme.js"></script>
<script src="js/charts-dashboard.js?v=5"></script>
<script src="js/charts-codebase.js"></script>
<script src="js/charts-advanced.js"></script>
<script src="js/app.js?v=5"></script>
<script src="js/app-config.js"></script>
</body>
</html>