05 — study Conversion: Portfolio → Offer¶
You have the artifacts. You have the resume. You have the blog. None of that matters if you sit and wait for someone to notice. This file is the operational playbook for turning a shipped portfolio into studies, and studies into offers. It is deliberately unromantic — most of this is spreadsheet work, not code.
The mistake most Indian engineers make at this stage: they finish the portfolio, then quietly hope that recruiters find them. That funnel converts at maybe 2%. The funnel that works is: target list → warm intros first, cold outbound second, direct-apply third, run in parallel, tracked in a sheet, reviewed weekly. You are running a small campaign, not “job hunting”.
1. The 20-name target list¶
Do this in W53 (M13 kickoff), not later. Three tiers, six to eight companies per tier. The mix matters more than the names — you want stretch shots and safe conversions running simultaneously so that a rejection from one tier does not stall the whole month.
Tier A — Aspirational (companies where your portfolio is the exact wedge)¶
These hire specifically for C++/ML hybrid skills. You will not get most of these, but the ones you do will be transformative.
Company |
India presence |
Team hint |
Why your portfolio fits |
|---|---|---|---|
NVIDIA |
Bangalore, Pune, Hyderabad |
TensorRT, Triton, cuDNN |
MiniServe is a mini-Triton |
Databricks |
Bangalore |
MLflow, Photon, MosaicML |
PyFast-style native extensions everywhere |
Cerebras |
Bangalore (small) |
Compiler, runtime |
Applied C++ for accelerators |
Adobe (Research/Firefly) |
Bangalore, Noida |
ML infra, imaging |
C++/ML hybrid roles openly listed |
Qualcomm AI |
Bangalore, Hyderabad |
Edge inference |
On-device ONNX/QNN work |
Intel (OneAPI, OpenVINO) |
Bangalore |
Inference runtime |
Direct MiniServe overlap |
Meta (Reality Labs India, if open) |
Hyderabad |
Perf, ML infra |
Portfolio speaks their language |
Google DeepMind India |
Bangalore |
Rare listings |
Long shot, apply anyway |
Tier B — Realistic (companies where you clear the bar cleanly)¶
Company |
India presence |
Team hint |
Why you fit |
|---|---|---|---|
Zoho (internal move) |
Chennai |
Catalyst, ML platform |
You already work here — use it |
Freshworks |
Chennai, Bangalore |
ML platform, Freddy |
Native infra, growing |
Postman |
Bangalore |
Perf, gRPC tooling |
gRPC C++ depth transfers directly |
Razorpay |
Bangalore |
Payments infra |
Latency-critical C++ services |
Swiggy / Zomato Labs |
Bangalore |
Ranking, forecasting |
ML infra generalist |
Flipkart (Ads, Search) |
Bangalore |
Ranking, retrieval |
ANN indices are their bread and butter |
Uber India (Michelangelo team) |
Bangalore |
ML platform |
Direct fit |
Wayfair / Walmart Labs |
Bangalore |
Search, forecasting |
C++ pockets exist |
Tier C — Safety (companies that will study competent engineers with a portfolio)¶
Larger service companies, smaller product startups, and international remote listings. You will get callbacks here — the point is not to accept, it is to keep your study reps warm and have negotiation leverage.
Company |
Notes |
|---|---|
ThoughtWorks |
Product mindset, above-market pay |
Zscaler India |
C++ networking |
Arista Networks India |
C++ heavy, good pay |
Nutanix India |
C++ systems |
Sprinklr |
Bangalore, MLops |
Hasura |
Remote-friendly, Bangalore HQ |
Two Sigma / D. E. Shaw India |
Quant infra, C++ heavy — high bar but hires |
Any YC-backed AI infra startup hiring India-remote |
Check ycombinator.com/jobs weekly |
Do not confuse volume with progress. Twenty targets, tracked and worked, beats fifty companies you spray-applied to and forgot.
2. The sourcing funnel — what actually converts¶
Reply rates from Indian engineers reaching out to global/senior engineers in 2025-2026 field data:
Channel |
Realistic reply rate |
Time-to-first-response |
|---|---|---|
Referral from LinkedIn 1st-degree |
60-80% |
1-3 days |
Referral from 2nd-degree (warm intro) |
30-50% |
3-7 days |
Cold DM to hiring manager with portfolio link |
8-15% |
5-14 days |
Recruiter outbound to your LinkedIn (inbound) |
40-60% |
1-3 days if you engage |
Direct-apply through company careers page |
3-8% |
2-6 weeks, often silent |
LinkedIn “Easy Apply” |
<2% |
Frequently silent |
Translation: spend 60% of your outreach energy on referrals, 30% on cold DMs with portfolio, 10% on direct-apply. LinkedIn Easy Apply is a lottery ticket, not a strategy.
3. Message templates¶
Templates are starting points, not scripts. Personalize the first sentence for every send — mentioning a specific talk, blog post, or repo from the recipient converts 3-5× better than a generic opener. All templates below assume you have MiniServe and PyFast public URLs to link.
Template A — Cold DM to engineer at target company (referral seek)¶
Hi {name}, I’m an applied ML engineer at Zoho in {city}. I recently shipped a C++ ML inference server (gRPC + REST, dynamic batching, OTel tracing) and open-sourced a nanobind-based ANN library — links in profile. I’m exploring roles at {company} on the {team} side. Would you be open to a 15-min chat about what the team is looking for and whether a referral makes sense? Happy to send the two-line portfolio summary before the call.
Length: under 90 words. Longer messages get skipped.
Template B — Cold DM to hiring manager (direct apply signal)¶
Hi {name}, I saw the {role} listing on your team. I built a production-shaped C++ ML inference server this year — {benchmark number vs Python baseline} — and a native Python extension for ANN search on PyPI. Portfolio: {url}. I’d love to be considered. Applied through the careers page; flagging here since these listings can be noisy. Happy to walk through either project on a call.
Template C — Recruiter reply (they messaged you first)¶
Thanks for reaching out. Yes, {role} is interesting. Two questions before we schedule: what compensation range is on the table for this level (India base + variable, or global if remote), and is the team primarily C++/systems or Python/ML? My portfolio ({url}) is the fastest way to see the bar I work at. Available for a 30-min call {slot options}.
You are qualifying them as much as they qualify you. Do this from message one. Recruiters respect it.
Template D — Post-application follow-up (7 days after apply, if silent)¶
Hi {name}, following up on my application for {role} sent {date}. Since applying I shipped a follow-on post on {topic} ({link}) that maps directly to what the JD asks for. Happy to answer any questions or send a tighter portfolio walkthrough. I’ll assume the role is filled if I don’t hear back by {date+7} — no hard feelings, just tracking.
The polite deadline is the point. It forces movement.
4. What the C++ / ML technical screen actually looks like¶
The screen for applied-C++-ML roles in 2026 is not LeetCode-only. Expect a two-part loop: a coding screen (45-60 min) and a systems / architecture screen (45-60 min). Sometimes a take-home instead of one of these.
Coding screen — what shows up:
Data structure implementation with a twist (LRU cache, thread-safe ring buffer, priority queue with decrease-key). Test their expectation of your C++ competence — RAII, move semantics, exception safety.
One “systems” problem: implement a rate limiter, connection pool, or bounded MPMC queue. This is where your Phase 3-4 concurrency work pays off.
Occasional classic algorithm (graph traversal, DP) — do 100-150 Leetcode mediums during W53-W55 to keep this sharp. Not more.
Systems / architecture screen — what shows up:
“Design an ML inference server for {scenario}.” You have literally built this. Walk through MiniServe’s architecture, discuss the tradeoffs you made (dynamic batching vs latency, sync vs async gRPC, bounded queue vs unbounded), and where you would go next (multi-node, GPU).
“How would you profile a slow gRPC service in production?” Your P6.3 profiling case study is the answer.
“Explain how you’d add observability to a service without one.” Your Phase 6 knowledge stack is exactly this.
The portfolio does not skip the study — it changes what the study is about. Instead of proving you can code C++, you are discussing tradeoffs in a system you have already built. That is a different conversation, and it is one you win.
5. Behavioral — the STAR that lands¶
Every behavioral answer follows Situation-Task-Action-Result. Practitioners at the senior/staff level compress it further: one sentence of context, one sentence of stakes, three sentences of what you did, one sentence of measurable outcome. Six sentences, ~90 seconds.
Prepare five stories. All five should be true, and all five should have measurable outcomes. Suggested slots:
“Tell me about a time you made a system faster.” → P6.3 profiling case study. Concrete: “identified {hotspot}, changed {approach}, measured {2.3× speedup}”.
“Tell me about a time you disagreed with a technical decision.” → find one from Zoho.
“Tell me about a project you shipped end-to-end.” → MiniServe.
“Tell me about a time you learned something hard fast.” → this 13-month program itself, framed as “moved from applied-ML-Python to C++/ML infra”.
“Tell me about a time you handled ambiguous requirements.” → PyFast candidate selection during M11 is a genuine one.
What most people get wrong on behavioral: they narrate. study partners do not need the setup — they need the decision. Cut the first two sentences of every draft answer. Then cut two more.
6. Salary negotiation — India → global positioning¶
This is the section most Indian engineers underuse. The delta between the offer you receive and the offer you could have received, for identical work, is usually 15-40%. That delta compounds for a decade. Read the two references before you take a single call.
Required reading before your first offer conversation:
Haseeb Qureshi, Ten Rules for Negotiating a Job Offer — freeCodeCamp / haseebq.com, two parts. The single best resource on the topic in existence. Non-negotiable prerequisite.
patio11 (Patrick McKenzie), Don’t Call Yourself a Programmer, And Other Career Advice — kalzumeus.com. Frames compensation as a business conversation, not a moral one. Read it twice.
Rules that specifically apply to your situation:
Never state a number first. When asked “what are your expectations?”, answer: “I’m looking for a fair offer for the level. My last cycle numbers are stale — I’d rather see what the role warrants.” This is Haseeb’s rule 4, restated.
Compare against global bands, not Indian bands, if the role is global-remote or MNC. Levels.fyi and Glassdoor India both underprice C++/ML hybrid roles because the sample size is small. The 2025 range for a mid-senior applied-C++/ML engineer in India was ~40-80 LPA base + variable, with staff-level reaching 80-180 LPA at top MNCs. Numbers move fast; verify at offer time.
Always ask for a written offer with base, bonus target, equity (RSU value at grant + vest schedule), sign-on, and relocation broken out. Verbal “package” numbers are meaningless.
Negotiate every offer, even the one you plan to accept. Recruiters expect one round. Not negotiating signals inexperience and leaves 5-15% on the table.
Silence is a tool. After stating your ask, stop talking. The next person to speak loses ground.
Have at least two active offers, or a credible in-progress process, before signing anything. Optionality is leverage; leverage is money.
7. Weekly cadence during M13¶
You cannot spray outreach and then wait. Run a weekly loop:
Monday: 30 min. Review target sheet. Move stale ones (silent >21 days) to archived. Add 2-3 new names.
Tuesday: 60 min. Three cold DMs, personalized. One recruiter reply if inbox has one.
Wednesday: 60 min. One study practice — coding or system design, timed, alone or with a peer.
Thursday: 30 min. Follow-ups on 7-day-old silent threads. Direct-apply to any new listings on target companies.
Friday: 30 min. Write the weekly “what shipped, what didn’t” note in a private journal. Not for posting — for you.
Saturday: 60 min. One blog draft or LinkedIn post if the pipeline needs signal top-up.
That is ~4.5 hours/week of pure conversion work. It runs alongside capstone polish and study prep, not instead of them.
8. Tracking sheet — the columns¶
Google Sheet or Notion table, one row per company. Columns:
Company |
Role |
Tier |
Source |
First-contact date |
Stage |
Next action |
Next action date |
Notes |
|---|
Stages: researched → reached-out → replied → phone-screen → technical → onsite/loop → offer → declined/accepted/silent-archive.
Review every Monday. If a row hasn’t moved in 21 days and there is no scheduled next step, archive it. Do not let dead threads clutter your view.
9. What “done” looks like for Phase 7 conversion¶
By the end of M13:
20-name list built and worked.
Minimum 5 recruiter/engineer conversations initiated (any tier).
Minimum 3 technical screens completed.
Minimum 1 offer in hand — even if you decline it, the practice of receiving, negotiating, and signing/declining an offer is the point.
If you have 0 offers by W56, that is signal, not failure. It means the funnel needs adjustment — usually the top of the funnel (more outreach) rather than the bottom (study skill). Diagnose from the tracking sheet.
Nav: ← 04 LinkedIn and Resume · → 06 The M13 Pitch · Phase 7 README · Roadmap root
Related: 12_portfolio · 10_communities · 13_discipline