SrcLog Valuation Methodology

How We Value Open Source Projects

Every repository on SrcLog displays two financial estimates: the cost to build it and its market value. Here is exactly how we calculate them.

These are estimates for educational and illustrative purposes only. They are not financial advice, not a formal appraisal, and should not be used for investment or acquisition decisions.

Overview

We compute two metrics for each repository:

  • Cost to Build — the estimated labour cost to recreate the codebase from scratch, plus accumulated maintenance.
  • Market Value — the creation cost scaled by the project's real-world popularity and recent activity.

Both are computed entirely from publicly available GitHub metadata: repository size, primary language, creation date, stars, forks, watchers, and last push date.

1

Cost to Build

Based on a modified COCOMO II (COnstructive COst MOdel) approach, adapted for open-source repositories where only aggregate metadata is available.

Step 1 — Estimate Lines of Code

GitHub reports repository size in kilobytes (all files combined). We apply two factors to isolate source code:

effective_kb = min(size_kb, 500 000) // cap at 500 MB to exclude data repos
code_kb = effective_kb × code_density(lang) // strip assets, docs, binaries
loc = code_kb × lines_per_kb(lang)
Language group Code density Lines / KB
C, C++, Go, Rust, Swift55 %22
Java, Kotlin, Scala, C#55 %20
JavaScript, TypeScript55 %28
Python, Ruby, Elixir55 %35
PHP, Perl, Lua55 %30
HTML, CSS, SCSS45 %40
Jupyter Notebook, R Markdown20 %12
Shell, Bash55 %25
Other / unknown55 %28

Step 2 — Development Hours

Each language has a characteristic productivity rate (hours per 1 000 lines), reflecting tooling maturity, verbosity, and cognitive load. A non-linear complexity overhead is then applied — larger codebases require disproportionately more effort (Brooks' Law).

dev_hours = (loc / 1000) × hours_per_kloc(lang) × complexity_factor(loc)
Language Hours / KLOC
Assembly320
C260
C++230
Rust210
Java / Kotlin / Scala160
C# / Swift150
Go140
JavaScript / TypeScript105
Python85
Ruby / Elixir / Clojure75
PHP / Perl / Lua80
Shell / Bash90
HTML / CSS / SCSS55
Jupyter Notebook / R70
Other120
Codebase size Complexity ×
< 10 K LOC1.00
10 K – 100 K LOC1.12
100 K – 500 K LOC1.28
500 K – 2 M LOC1.48
> 2 M LOC1.70

Step 3 — Labour Cost + Maintenance

We use $75 / hour as the blended global rate for a mid-level software developer (a reasonable average across North America, Western Europe, and remote workers).

base_cost = dev_hours × $75
years = (today − github_created_at) in years
cost_to_build = base_cost × (1 + years × 0.15)

The 0.15 factor represents a 15 % annual maintenance overhead — the industry-standard estimate for keeping software alive (bug fixes, dependency updates, documentation, security patches). This accumulates each year the project has existed.

2

Market Value

Market value reflects what the community actually thinks of a project, not just how much it cost to write. A small but universally-loved tool may be worth far more than a sprawling unmaintained codebase.

Formula

popularity_score = log₁₀(stars+1) × 3.0
+ log₁₀(forks+1) × 1.5
+ log₁₀(watchers+1) × 0.5
 
popularity_mult = 1 + popularity_score × 3 // ~1× … 60×
 
market_value = cost_to_build × popularity_mult × activity_mult

Popularity multiplier rationale

We use logarithmic scaling because the difference in value between 100 and 1 000 stars is not linear. The weights reflect that stars are a primary signal, forks indicate active adoption, and watchers indicate passive interest.

Stars Approx. multiplier
0 – 10~1×
100~7×
1 000~10×
10 000~13×
100 000+~16×

Activity multiplier

A project that has not been touched in years carries more risk — a discount is applied. Actively maintained projects receive a premium.

Last push Multiplier
≤ 7 days ago1.3×
≤ 30 days1.2×
≤ 90 days1.1×
≤ 180 days1.0×
≤ 1 year0.9×
≤ 2 years0.75×
> 2 years0.6×

Worked Example

Imagine a TypeScript project with:

  • Repository size: 5 000 KB
  • Stars: 12 000  ·  Forks: 1 500  ·  Watchers: 200
  • Created: 4 years ago
  • Last push: 3 weeks ago
// Step 1 — LOC
code_kb = 5000 × 0.55 = 2 750 KB
loc = 2750 × 28 = 77 000 lines
 
// Step 2 — Hours
hours = (77 000 / 1000) × 105 × 1.12 = 9 058 h
 
// Step 3 — Cost
base = 9 058 × $75 = $679 350
total = $679 350 × (1 + 4 × 0.15) = $1 087 960 ≈ $1.09 M
 
// Market value
pop = log₁₀(12001)×3 + log₁₀(1501)×1.5 + log₁₀(201)×0.5
= 12.27 + 4.72 + 1.15 = 18.14
mult = 1 + 18.14 × 3 = 55.4× → activity 1.2×
market = $1 087 960 × 55.4 × 1.2 ≈ $72.3 M

Limitations & Known Biases

  • Repository size includes all files (images, datasets, compiled artifacts). The code-density factor mitigates this but cannot eliminate it for unusual repos.
  • Stars ≠ users. A viral tweet can generate thousands of stars overnight without reflecting real adoption.
  • Monorepos may have inflated size because they contain multiple independent projects.
  • Hourly rate is a single global average. Enterprise projects or niche language specialists may cost 2–5× more.
  • Volunteer work in open source is often not priced by market rates. The model estimates commercial replacement cost, not actual spending.
  • Network effects and ecosystem lock-in (e.g. linux, react) create value that no formula can capture.

Methodology v1.0 · Published by SrcLog.com