Two new hires start Monday. Paid AI seats are still stuck in procurement. The wiki already links a free coding lane.
Do you default them onto it?
I would not. Not without a fit-or-exit card. Free access looks like a gift to a joiner. It often shows up later as mentor overtime and a habit the squad never voted on.
The scene I keep replaying
Composite scene, not a named-client story. Six-person squad. Two joiners. One staff engineer who already reviews too much.
The joiners are not slow. They are fast in the wrong unit. Pull requests appear before they can name the invariant they touched. Mentors go quiet because the tests are green. Have you watched that happen in week one?
That is not onboarding. That is a cost transfer.
Here is the reversing constraint. If mentor hours are the scarce resource, a free lane that multiplies unverified diffs is more expensive than a paid seat that sits idle for two weeks.
Three placements, not two slogans
I score three placements. I do not score "AI versus no AI."
- Free hosted lane. Fastest thing you can put in a new hire's hands. Cash near zero. Your data-boundary and uptime story now belong to someone else's product.
- Self-hosted lane. Weights and logs stay inside a boundary you own. You also own the pager, the queue, and the "who restarts this" question.
- Paid seat. Procurement, vendor terms, usually clearer retention. You pay even while the joiner is still reading the runbook.
An open-source coding assistant with free model access and a free server option sits in bucket one. Sometimes it is a bridge into bucket two if you later self-host.
Disclosure: This article was prepared as part of MonkeyCode's product outreach.
MonkeyCode fits that first bucket: free model access, plus a free server option, which is useful when you need a bounded measurement lane before procurement moves. Useful is not the same as "make it the default." Strip the name out. The card still has to work.
Variable dictionary
Write these on a whiteboard before anyone debates vendors.
-
B — data-boundary allow.
0or1. Security or platform owns it. - M — extra mentor hours spent unsticking AI output, per joiner, per week.
-
N — share of the joiner's PRs they can narrate without the model.
0to1. - T — calendar days to the first change they own without AI as the author of record.
- H — loaded hourly cost of a mentor.
- P — paid-seat monthly cost. Finance replaces the placeholder.
- S — self-host monthly cost, box plus toil.
- E — expiry of the exception. A date, not a vibe.
If B is 0, stop. The rest of the math is entertainment.
A scorecard is a conversation tool, not objective truth. If your security lead disagrees on B, you do not average the disagreement. You halt the default.
The fit-or-exit card
Four questions. Each one can kill a placement on its own.
1. Boundary: can this joiner's work leave the trust zone?
Private source, customer records, unreleased schema: free hosted is ineligible. Public docs and secret-free internal tools: a pilot is allowed. Mixed work? Split the work. Do not split the policy.
I want this in the first-week checklist. Ugly. Readable.
# Labeled checklist. Not a security audit.
rg -n "AKIA|BEGIN PRIVATE KEY|api_key|SECRET" --glob '!.git' || true
echo "If this joiner's repo can trip the above, B=0 for any free hosted lane."
Policy PDFs do not catch a .env in a generated commit. This does, if someone runs it.
2. Narration: by day 10, can they walk a diff they shipped?
If N stays under 0.5, the free lane is teaching speed, not the system. Paid will not fix that. Self-host will not fix that. Freeze expansion. Pair.
PR template I want in the repo:
## Narration (required if an AI lane touched this PR)
- Invariant I changed:
- Failure I would have caused without this change:
- Test that would fail if I reverted the wrong hunk:
- What I did *not* let the model write:
If they cannot fill it, the PR is not late. The onboarding is.
3. Mentor-hour break-even: who actually pays?
Monthly transferred cost of a "free" joiner:
M * H * 4.3
Compare that to P per paid seat, and to S divided by people who actually hit the box.
Worked example. Labeled assumptions. Replace every number before you quote it.
- Two joiners.
- M = 3 extra mentor hours per joiner per week.
- H = $90 loaded.
- P = $40 per seat per month (placeholder; use your contract).
- S = $400 box + 2 hours of platform toil at $90.
Free hosted cash: about $0.
Transferred cost: 3 * 90 * 4.3 * 2 ≈ $2,322 / month.
Paid seats: 2 * 40 = $80 cash. I do not assume M falls. Measure M either way.
Self-host: 400 + 180 = $580 total. Per-user only if six people truly share the box.
See the inversion? Free can win the cash column and still tax your best reviewers. Paid can look spendy and still be cheaper than three hours of a staff engineer explaining a generated layout.
Sensitivity is the whole point. If M drops to 0.5, free hosted can be rational on money. If M stays at 3, free hosted is a stealth cost center. Which one is your squad this month?
I run it as a script so nobody hand-waves the 4.3.
# Worked example only. Not a benchmark. Not vendor ROI.
M = 3.0 # extra mentor hours / joiner / week
H = 90.0 # loaded $ / hour
joiners = 2
P = 40.0 # $ / seat / month — replace with your contract
S_box = 400.0 # $ / month
S_toil_hours = 2.0
users_on_box = 6
free_transfer = M * H * 4.3 * joiners
paid_cash = P * joiners
self_host = S_box + S_toil_hours * H
self_per_user = self_host / users_on_box
print(f"free transferred $/mo: {free_transfer:.0f}")
print(f"paid cash $/mo: {paid_cash:.0f}")
print(f"self-host total $/mo: {self_host:.0f}")
print(f"self-host per user: {self_per_user:.0f}")
m_star = paid_cash / (H * 4.3 * joiners)
print(f"break-even M* vs paid (hours/week/joiner): {m_star:.2f}")
If real M sits above M, "free" is a slogan. In the placeholder above, **M** is tiny. That is the point. Staff-engineer time is the expensive input, not the token sticker.
4. Owner, expiry, exit: no owner, no lane
I do not care how open source the stack is.
- Owner: a named EM or platform lead. Not "the squad."
- Expiry: 30 days for a new-hire default. Not "until it feels fine."
- Exit: if N < 0.5, or M > M*, or a secret hits the lane, the unsupervised default dies. Joiners keep their editors.
Decision log, in the repo, not in a slide deck:
# decision-log/ai-onboarding-2026-09-23.yaml
decision: default_new_hires_free_hosted
owner: "platform-lead-name"
opened: 2026-09-23
expires: 2026-10-23
B: 1
M_hours_per_week: 3.0
N_day10_target: 0.5
exit:
- "B drops to 0"
- "N < 0.5 at day 10"
- "M > break-even M*"
review_after: 2026-10-23
Thirty days. Renew with new numbers or stop. Expiring exceptions beat evergreen "we are still piloting."
Day-one workflow
I do not survey feelings. I pick one joiner, one service, one week.
- Set B with security in the room. Fifteen minutes.
- Put N in the PR template. Zero extra tools.
- Ask the staff engineer for M. If they say "not much" and their calendar is review, believe the calendar.
- Run the script with finance's H and P. Refuse invented ROI.
- Commit the YAML. Drop the expiry on the EM's calendar.
Boring on purpose. Adoption theater is expensive. Measurement is not.
Who should not use this approach
Do not default new hires onto a free hosted lane when any of these are true.
- The repo can see production secrets, health data, or uncleared customer dumps.
- You have no spare mentor hours. A free lane without review slack is how green tests become production archaeology.
- You need a vendor DPA more than you need a cheap token path.
- You were about to treat a free server as an SRE team. It is a pilot instrument. It is not a capacity plan.
Self-host is the wrong first move when nobody can name who patches the box. Paid is the wrong first move when procurement will strand joiners for a month with no measurement plan either. Sometimes the honest answer is delayed AI. Not a free default.
Limitations
I have not run a multi-company trial of this card. The worked numbers are placeholders. Your H and P will move the break-even more than any model slide.
Free model access and a free server option change cash timing. They do not change B. They do not narrate the diff. They do not create an owner.
Open source matters for exit: you can leave. That is real. It is not a license to skip day-10 narration.
If any vendor quotes adoption percentages without your M and N, ignore the quote.
What would reverse you?
Forget whether the tool is likable.
Which variable flips your default?
If M is really 0.4, I would let joiners start on a bounded free lane and revisit at day 30. If B is 0, I would not. If N is stuck at 0.2, I would spend the week pairing, not shopping seats.
So. What is your M this week, and who owns the expiry?
Top comments (0)