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:

  1. “Tell me about a time you made a system faster.” → P6.3 profiling case study. Concrete: “identified {hotspot}, changed {approach}, measured {2.3× speedup}”.

  2. “Tell me about a time you disagreed with a technical decision.” → find one from Zoho.

  3. “Tell me about a project you shipped end-to-end.” → MiniServe.

  4. “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”.

  5. “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 Advicekalzumeus.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