Engineering Effort Report
This page converts the measured size of the Solara28 codebase into a human-equivalent workload, then into a salary-based cost estimate. Every number below is derived from fixed conversion rules applied to things that were actually counted in the repository — lines of code, translation words, documentation words, and file counts. Nothing here is a recorded timesheet, an invoice, or a project quote. It is a reproducible calculation, and the calculation is described in full below so it can be checked or challenged.
The headline numbers
This is the loaded, realistic figure — it accounts for the fact that most artifacts get revised, and that a paid day is never 100% heads-down production time: it includes meetings, planning, code review, support, and normal breaks. The underlying calculation starts from a smaller, purely hypothetical artifact baseline (18,207 days / 82.8 person-years — the theoretical minimum if every line were written once, correctly, with zero revision or overhead) and then loads it up to the realistic figure above; that baseline number appears later on this page only as a documented step in the calculation, not as a standalone answer, because on its own it does not represent a realistic staffing or cost scenario. How the loading was calculated, including how much of the revision assumption is now measured from this repository's own history rather than assumed outright, is explained in full below.
How the working-day count was built
The starting point was a full, excluded-and-labelled inventory of the repository: every
TypeScript/TSX source file, every Supabase edge function, every SQL schema and migration
file, every translation JSON file across five languages, every configuration file for
Vercel/Supabase/CI, every script, and every Markdown document. Generated code (a 31,836-line
auto-generated database type file), dependency lockfiles, test-result output, and
node_modules were explicitly excluded — they were not authored by a
person and including them would inflate the count without representing real effort.
Each category of measured content was converted to working days using one fixed rate, applied uniformly rather than tuned per role:
The exact conversion rules, applied uniformly across every role:
| Item | Rule |
|---|---|
| Working day | 8 hours |
| Technical artifacts | 80 authored physical LOC per working day |
| Technical documentation | 1,500 Markdown words per working day |
| Base-language and neutral content | 1,000 value words per working day |
| Target-language translation | 2,000 value words per working day |
| Role rounding | Round each role upward to the next whole working day |
| Legacy overlap | Exact SHA-256 duplicate files removed before conversion |
| Other exclusions from working days | Git metadata, worktrees, backups, generated locks, build/dist/coverage/cache output, test results, binary media, credentials, and secret values |
These rates are stated assumptions, not figures pulled from an external productivity study — no universally agreed "lines of code per day" industry benchmark exists, and this report does not claim one does. They are applied consistently across the entire codebase so the resulting comparison between roles is at least internally fair, even though the absolute rate itself is a judgment call. PLOC means physical lines of text. Translation word counts use recursive JSON string values; JSON keys are excluded.
The measured input, and exactly how each role's day total was derived:
| Role | Non-overlapping measured input | Calculation | Working days |
|---|---|---|---|
| Frontend and application engineering | 842,691 source TS/TSX − 48,813 named-test LOC − 31,836 generated-type LOC + 1,439 non-TS source support + 2,399 public support + 552 root HTML | 766,432 / 80 | 9,581 |
| Backend, API, and edge integrations | 125,811 edge-function TS − 7,454 named-test LOC | 118,357 / 80 | 1,480 |
| Database and data engineering | 60,018 canonical schema + 12,944 migrations + 83,682 sample-data SQL | 156,644 / 80 | 1,959 |
| QA and security verification | 48,813 frontend tests + 7,454 edge tests + 47,771 top-level test assets | 104,038 / 80 | 1,301 |
| Cloud, DevOps, and tooling | 4,262 config − 378 localized HTML + 948 Vercel API + 15,861 non-Markdown scripts + 487 non-overlapping tool code | 21,180 / 80 | 265 |
| Localization | 243,245 base/neutral words and 871,581 target-language words | 243,245/1,000 + 871,581/2,000 | 680 |
| Technical documentation and architecture | 621 active current Markdown files / 1,959,249 words | 1,959,249 / 1,500 | 1,307 |
| Current repository subtotal | Sum of rounded role rows | 16,573 | |
| Legacy full-stack lineage | 810 exact-file-unique authored files / 130,645 PLOC | 130,645 / 80 | 1,634 |
| Combined workload represented | Current repository plus exact-file-deduplicated legacy archive | Sum of rounded role rows | 18,207 |
The legacy row exists because an earlier, single-tenant version of this application was built and later superseded. Its surviving source was deduplicated by exact file hash before conversion, so files that are byte-identical across versions are only counted once. Cloud-provider runtime remains in its owning application or edge-function row; dedicated deployment configuration, Vercel API code, scripts, CI/CD, and operational tooling are assigned to Cloud/DevOps.
From artifact days to a loaded, paid-time estimate
The 18,207-day baseline only counts the act of producing the final artifact. It does not account for two things that are true of almost all real software work: artifacts get revised, and a paid working day is never spent entirely on production.
Revision. A first pass at this estimate assumed every artifact received one flat, uniform revision equal to 30% of its value — a stated assumption, not a measurement. That flat number has since been replaced, role by role, with a revision factor measured directly from this repository's own Git history, wherever the role's source files are tracked in Git. For each role, every commit touching that role's files was walked and every deleted line counted — a deleted line is a line that existed and was later removed or rewritten, the direct signature of rework. Three one-time bulk events (the original repository import and a duplicated documentation/backup detracking commit, together 84.8% of all raw historical churn) were excluded first, since they are not iterative revision. The result is a per-role ratio ranging from 12.1% to 51.4% — tests are revised least, localization and edge functions are revised most — a 4.2× spread that a single flat percentage cannot represent. Four roles (database, architecture, technical writing, and the legacy archive) keep the original 30% assumption, disclosed as still unmeasured, because their source material lives in a part of the repository that is not tracked in Git at all and therefore has no history to measure. Applying the measured ratios where they exist, and the disclosed 30% assumption where they do not, to the 18,207-day baseline (plus a smaller, separately measured backup-only content floor for material that exists in historical backups but not in the current tree) produces a focused-effort figure of 27,206 days.
Paid-time utilization. A focused-effort day is not the same as a paid day. A peer-reviewed study of 5,971 professional software developers at Microsoft, published in IEEE Transactions on Software Engineering (Meyer, Barr, Bird & Zimmermann, 2019), measured how developers actually spend a full workday. Summing that study's own reported activity categories: 45% of a typical day is development-heavy work (coding, debugging, testing, specification, review, documentation), 36% is collaboration (meetings, email, interruptions, helping others), and the remaining 16% is other necessary work and ordinary breaks. In other words, on an average day a developer spends well under half their paid time on the activity that actually produces the artifact.
Dividing the 27,206-day focused-effort figure by that 45% development-heavy share converts it into a loaded, paid-day figure: 60,462 working days, equal to 274.8 person-years at 220 paid working days per year. This is the number that is comparable to what it would actually cost to staff and pay a team to produce this body of work under normal, real-world working conditions — not just the time spent literally writing the artifact.
Turning working days into a labor cost estimate
Each role's working-day total was converted to a salary-equivalent cost using published, externally sourced 2026 salary ranges for Switzerland and Germany — national salary guides (Robert Half, jobs.ch) and, where available, official government wage data (Germany's Bundesagentur für Arbeit Entgeltatlas). The formula is simple and identical for every role:
role cost = working days × annual gross salary ÷ 220
220 is used as the number of paid working days in a year. Every figure below is a national gross base salary range — it excludes bonuses, benefits, employer social contributions, recruiting cost, equipment, and facilities, because no specific employee profiles or invoices exist to price those. Two of the German government salary-data pages cited in the underlying calculation render their figures dynamically and could not be independently re-confirmed at time of writing; every other salary source was directly and successfully re-checked against the live page.
SDLC roles, salary ranges, and per-role cost (unloaded baseline days — intermediate calculation step)
The role costs below use the unloaded 18,207-day artifact baseline, before the revision
and paid-time-utilization loading described further down this page is applied — they
are shown to make the per-role salary math auditable, not as a realistic cost estimate on
their own. The realistic, loaded per-role cost is in the "Realistic loaded TCO" section
below. Each role cost below is working days × annual gross salary / 220,
using published 2026 salary-market ranges (Robert Half, jobs.ch, and where available
Germany's official Bundesagentur für Arbeit Entgeltatlas). The 1,307-day technical
documentation/architecture row from the table above is split here without changing its
total: 342 days for architecture/API/database/production-staging/testing/governance
Markdown (511,903 words), and 965 days for the remaining technical-writing Markdown
(1,447,346 words).
Frontend/application engineer 9,581 days
Product implementation and maintenance
- Switzerland salary/yr
- CHF 87,750–115,500
- Switzerland role cost
- CHF 3.82M–5.03M
- Germany salary/yr
- EUR 57,000–91,500
- Germany role cost
- EUR 2.48M–3.98M
Backend/API/edge engineer 1,480 days
APIs, edge functions, and integrations
- Switzerland salary/yr
- CHF 101,500–142,500
- Switzerland role cost
- CHF 0.68M–0.96M
- Germany salary/yr
- EUR 60,250–95,500
- Germany role cost
- EUR 0.41M–0.64M
Database/data engineer 1,959 days
Schema, migrations, RLS, and data lifecycle
- Switzerland salary/yr
- CHF 112,500–148,500 (BI proxy)
- Switzerland role cost
- CHF 1.00M–1.32M
- Germany salary/yr
- EUR 63,500–86,250
- Germany role cost
- EUR 0.57M–0.77M
QA/security verification engineer 1,301 days
Test automation, quality gates, security verification
- Switzerland salary/yr
- CHF 77,986–104,000
- Switzerland role cost
- CHF 0.46M–0.62M
- Germany salary/yr
- EUR 55,788–87,000 (unverified)
- Germany role cost
- EUR 0.33M–0.51M
Cloud/DevOps/tooling engineer 265 days
CI/CD, deployment, provider configuration, operations
- Switzerland salary/yr
- CHF 91,250–142,500
- Switzerland role cost
- CHF 0.11M–0.17M
- Germany salary/yr
- EUR 69,250–99,500
- Germany role cost
- EUR 0.08M–0.12M
Localization specialist 680 days
Base copy and four target-language corpora
- Switzerland salary/yr
- CHF 80,000–95,200
- Switzerland role cost
- CHF 0.25M–0.29M
- Germany salary/yr
- EUR 37,764–71,436 (unverified)
- Germany role cost
- EUR 0.12M–0.22M
Solution architect / SDLC governance 342 days
Architecture, lifecycle standards, technical governance
- Switzerland salary/yr
- CHF 130,000–158,500
- Switzerland role cost
- CHF 0.20M–0.25M
- Germany salary/yr
- EUR 75,500–109,500
- Germany role cost
- EUR 0.12M–0.17M
Technical writer 965 days
Product, operational, and reference documentation
- Switzerland salary/yr
- CHF 85,500–107,780
- Switzerland role cost
- CHF 0.38M–0.47M
- Germany salary/yr
- EUR 39,500–54,800
- Germany role cost
- EUR 0.17M–0.24M
Legacy full-stack engineer 1,634 days
Restored-version maintenance and migration surface
- Switzerland salary/yr
- CHF 101,500–142,500 (Software Developer proxy)
- Switzerland role cost
- CHF 0.75M–1.06M
- Germany salary/yr
- EUR 48,000–70,000
- Germany role cost
- EUR 0.36M–0.52M
Robert Half ranges are national 2026 25th–75th-percentile starting base salaries, excluding bonuses and benefits. Swiss jobs.ch ranges use 0–2-year and 21+-year experience averages and include bonuses/13th-month salary. German government ranges are 2025 full-time monthly quartiles, annualized. Two Entgeltatlas pages (QA/security, localization) render their figures dynamically and could not be independently re-confirmed at the time of writing — marked unverified above; every other salary source was directly re-checked against its live page and matched exactly.
Cost of the hypothetical artifact baseline (intermediate calculation step, not a realistic figure)
Before loading, the same salary ranges applied to the unloaded 18,207-day baseline produce the table below. This is not presented as a cost estimate in its own right — it is the input the realistic, loaded TCO in the next section is built from, shown here only so the full calculation is auditable end to end.
| Scope | Days | CH low | CH mid | CH high | DE low | DE mid | DE high |
|---|---|---|---|---|---|---|---|
| Current repository | 16,573 | CHF 6.90M | CHF 8.01M | CHF 9.11M | EUR 4.27M | EUR 5.47M | EUR 6.66M |
| Legacy archive | 1,634 | CHF 0.75M | CHF 0.91M | CHF 1.06M | EUR 0.36M | EUR 0.44M | EUR 0.52M |
| Combined unloaded baseline (not realistic on its own) | 18,207 | CHF 7.66M | CHF 8.91M | CHF 10.17M | EUR 4.63M | EUR 5.91M | EUR 7.18M |
Realistic loaded TCO — 60,462-day, measured-ratio scenario
Applying the same per-role salary ranges to the loaded 60,462-day figure (rather than the 18,207-day artifact baseline) produces the labor-cost sensitivity that includes the per-role measured (or, for four roles, disclosed-assumed) revision factor and the study-derived 45% paid-time utilization factor:
| Role | Loaded working days | Switzerland (CHF) | Germany (EUR) |
|---|---|---|---|
| Frontend / application engineer (33.9% measured) | 28,509 | 11.37M–14.97M | 7.39M–11.86M |
| Backend / API / edge engineer (44.3% measured) | 4,747 | 2.19M–3.07M | 1.30M–2.06M |
| Database / data engineer (30% assumed) | 10,423 | 5.33M–7.04M | 3.01M–4.09M |
| QA / security verification engineer (12.1% measured) | 3,243 | 1.15M–1.53M | 0.82M–1.28M |
| Cloud / DevOps / tooling engineer (13.4% measured) | 669 | 0.28M–0.43M | 0.21M–0.30M |
| Localization specialist (51.4% measured) | 2,289 | 0.83M–0.99M | 0.39M–0.74M |
| Solution architect / SDLC governance (30% assumed) | 1,585 | 0.94M–1.14M | 0.54M–0.79M |
| Technical writer (30% assumed) | 4,274 | 1.66M–2.09M | 0.77M–1.06M |
| Legacy full-stack engineer (30% assumed) | 4,723 | 2.18M–3.06M | 1.03M–1.50M |
Measured-ratio TCO — full breakdown
| Scope | Days | CH low | CH mid | CH high | DE low | DE mid | DE high |
|---|---|---|---|---|---|---|---|
| Existing artifact baseline | 18,207 | CHF 7.66M | CHF 8.91M | CHF 10.17M | EUR 4.63M | EUR 5.91M | EUR 7.18M |
| Measured-ratio revision + 45% utilization loaded TCO | 60,462 | CHF 25.93M | CHF 30.13M | CHF 34.33M | EUR 15.46M | EUR 19.58M | EUR 23.69M |
| Increase over the artifact baseline | 42,255 | CHF 18.27M | CHF 21.22M | CHF 24.16M | EUR 10.83M | EUR 13.67M | EUR 16.51M |
This is the most defensible loaded estimate in this document, because five of its nine revision factors are measured from the repository's own history rather than assumed. The remaining four roles (database, architecture, technical writing, legacy) still rest on the disclosed 30% assumption, for the structural reason given above — their source lives in a part of the repository this project deliberately does not track in Git.
Equivalent human headcount
A person-year is one person working for one year. Converting the realistic, loaded total (274.8 person-years — the figure that accounts for revision effort and normal paid-workday overhead) into a headcount is division, not a new estimate — and it requires a delivery-window input this page has no way to measure or verify, so no single number is presented as "the" answer. Only the realistic total is used here; the smaller, unloaded 82.8-person-year artifact-baseline figure is not, because it does not represent a realistic staffing scenario on its own (see "The headline numbers" above).
| Delivery window | Realistic headcount (274.8 person-years ÷ window) |
|---|---|
| 1 year | 275 |
| 2 years | 137 |
| 3 years | 92 |
| 5 years | 55 |
This is exact division, nothing more. This page does not contain a measurement of how large a team this specific project could actually sustain, how coordination overhead would scale for this specific codebase, or what delivery timeline is achievable — those would require a separate, explicitly scoped staffing study, not a derivation from the artifact and salary data collected here. No delivery window or headcount in the table above is asserted to be more realistic than another; the table exists only to show what the realistic total implies at a few common window lengths.
What this number is, and is not
This is a reproducible calculation from measured artifacts, not a record of actual elapsed time, an audited invoice, or a certified cost estimate. Every input line count, word count, and file count in the underlying calculation was independently measured against the repository, and the revision factor for five of nine roles is now measured from the repository's own Git history rather than assumed. The conversion rates (lines per day, words per day) remain disclosed assumptions rather than externally validated constants, as does the 30% revision factor still used for the four roles whose source material is not tracked in Git at all (database, architecture, technical writing, legacy archive). The salary figures are real, current, published national data, independently re-verified against their source pages at the time of writing, with one exception (two dynamically rendered government salary pages) noted openly above rather than silently presented as confirmed.