<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Kunal Vohra</title>
    <description>The latest articles on DEV Community by Kunal Vohra (@kunalvohra).</description>
    <link>https://dev.to/kunalvohra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F191502%2Fc6851beb-8a02-458a-84da-59794b9d9d8a.JPG</url>
      <title>DEV Community: Kunal Vohra</title>
      <link>https://dev.to/kunalvohra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kunalvohra"/>
    <language>en</language>
    <item>
      <title>Self-Hosting an LLM vs Using an API in 2026: When Open-Weight Models Actually Save a Startup Money (Break-Even Math)</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Mon, 19 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/self-hosting-an-llm-vs-using-an-api-in-2026-when-open-weight-models-actually-save-a-startup-money-1ddd</link>
      <guid>https://dev.to/kunalvohra/self-hosting-an-llm-vs-using-an-api-in-2026-when-open-weight-models-actually-save-a-startup-money-1ddd</guid>
      <description>&lt;p&gt;Self-hosting an LLM is cheaper than using an API only when your traffic is high and steady. For most startups in 2026, it isn't. Two rented H100 GPUs cost about $5,560 a month whether anyone uses them or not. On my arithmetic, that only beats a mid-tier closed API above roughly 214,000 requests a month, and only beats the same open model bought per token from a host above roughly 594,000. Below those numbers, you are paying for idle GPUs.&lt;/p&gt;

&lt;p&gt;I'm Kunal Vohra. I've been the technical co-founder six times, and I run ColadAI, a multi-LLM platform, so the question of which model runs where, and who pays for it, is one I deal with every month. My recent posts on running &lt;a href="https://kunalvohra.com/blog/airllm-on-a-16gb-mac-mini" rel="noopener noreferrer"&gt;AirLLM on a 16GB Mac mini&lt;/a&gt; were about what open models can do on hardware you already own. This one is about what they cost when real users show up.&lt;/p&gt;

&lt;h2&gt;
  
  
  Self-hosting an LLM vs an API: the short answer
&lt;/h2&gt;

&lt;p&gt;Use an API until you can prove three things: your volume is high, it is steady around the clock, and you have someone to run the GPUs. If you can't prove all three, the API is cheaper, faster to ship, and easier to change.&lt;/p&gt;

&lt;p&gt;The comparison most founders make is wrong. They put "our own GPU" next to OpenAI or Claude prices and see a saving. The real competitor to self-hosting is not a closed model at all. It is the same open-weight model, sold per token by a hosting company, with no GPUs for you to run. Once that option is on the table, the case for running your own hardware gets much narrower.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgt9u7mv0cm2wmyu64470.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fgt9u7mv0cm2wmyu64470.png" alt="Break-even chart: two self-hosted H100s at about $5,563 a month cross a mid-tier closed API at about 214,000 requests a month and a hosted Llama 3.3 70B at about 594,000; a small closed API stays cheaper across the whole range" width="800" height="440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What an API costs per request in 2026
&lt;/h2&gt;

&lt;p&gt;API prices span about a hundredfold, from $0.10 to $10 per million input tokens, and hosted open models sit at the cheap end of that range. All prices below are per million tokens, input then output, as of October 2026. The closed-model prices come from my &lt;a href="https://kunalvohra.com/blog/gemini-vs-claude-vs-grok-vs-chatgpt-api-for-business" rel="noopener noreferrer"&gt;comparison of the major AI APIs&lt;/a&gt;; the hosted open-model prices are Together AI's serverless rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Closed models:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontier tier:&lt;/strong&gt; GPT-6 Astra at $10 / $50, Claude Opus 5.5 at $4 / $20.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mid tier:&lt;/strong&gt; GPT-6.1 Sol and Claude Sonnet 5.5, both $2 / $10.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast tier:&lt;/strong&gt; Gemini 3.8 Flash at $0.75 / $3.75 (rising to $1.50 / $7.50 on January 1, 2027).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Small tier:&lt;/strong&gt; GPT-6 Luna and Claude Haiku 5.5, both $0.10 / $0.50.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Open-weight models, hosted per token:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek V4 Pro:&lt;/strong&gt; $1.32 / $3.96.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama 3.3 70B:&lt;/strong&gt; $1.04 / $1.04.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Gemma 4 31B:&lt;/strong&gt; $0.39 / $0.97.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;gpt-oss-120B:&lt;/strong&gt; $0.15 / $0.60.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek V4 Flash:&lt;/strong&gt; $0.14 / $0.28.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To compare these with a GPU, you need a cost per request. Take a retrieval-heavy chat turn: 8,000 tokens in (instructions, retrieved documents, the user's message) and 1,000 tokens out. That request costs about $0.026 on a mid-tier closed model, about $0.0094 on hosted Llama 3.3 70B, and about $0.0013 on a small closed model. Batch processing and prompt caching cut the closed prices further, often by half or more, if you design for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  What a GPU really costs
&lt;/h2&gt;

&lt;p&gt;A rented H100 costs a median of $3.81 an hour in October 2026, which is about $2,780 a month if it runs all the time. GPU prices have gone up, not down: the median H100 rose about 28 percent over the past year. Where you rent matters a lot. On-demand prices I found ran from about $4 an hour at a GPU cloud like Lambda to about $11 an hour on Google Cloud, with spot capacity as low as about $2.50.&lt;/p&gt;

&lt;p&gt;One GPU is rarely enough. A 70B model in 8-bit precision takes about 70GB of an H100's 80GB, which leaves little room for the memory each conversation needs, and a single GPU is a single point of failure. So the realistic minimum for serving a 70B-class model to paying users is two GPUs: about $5,560 a month at the median, before anything else.&lt;/p&gt;

&lt;p&gt;What does that buy? Published benchmarks put Llama 3.3 70B at roughly 900 to 1,850 output tokens a second per H100 on this kind of workload, depending on how fast each user's answer has to stream. I use 1,000 tokens a second per GPU in the math. At that rate, two GPUs could serve about 5.3 million of the requests above every month. Capacity isn't the problem. Utilisation is.&lt;/p&gt;

&lt;h2&gt;
  
  
  The break-even math, step by step
&lt;/h2&gt;

&lt;p&gt;The break-even point is your fixed monthly GPU cost divided by what one request would cost on the API. Here it is with the numbers above:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Fixed cost:&lt;/strong&gt; 2 GPUs × $3.81 an hour × 730 hours = about $5,563 a month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Against a mid-tier closed API:&lt;/strong&gt; $5,563 ÷ $0.026 per request = about 214,000 requests a month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Against hosted Llama 3.3 70B:&lt;/strong&gt; $5,563 ÷ $0.0094 per request = about 594,000 requests a month.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Against a small closed API:&lt;/strong&gt; $5,563 ÷ $0.0013 per request = about 4.3 million requests a month, close to what two GPUs can serve at all.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The line I'd want every founder to remember: &lt;strong&gt;two rented GPUs cost the same $5,560 a month at zero users as at half a million requests, so self-hosting only wins once you are busy enough to keep them working.&lt;/strong&gt; 214,000 requests a month is about 7,000 a day, every day. Plenty of AI startups get there. Very few get there in their first year, and fewer still get there with traffic that is steady at 3 a.m.&lt;/p&gt;

&lt;p&gt;You can redo this with your own numbers in five minutes: your tokens per request, your provider's price, your GPU quote. Change the request size and the break-even moves; a short request with little context pushes it much further out, because the API bill per request drops while the GPU bill doesn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What the break-even math leaves out
&lt;/h2&gt;

&lt;p&gt;The GPU bill is the smallest part of self-hosting at startup scale. The arithmetic above flatters it in four ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The engineer.&lt;/strong&gt; Someone has to set up and tune the serving stack (vLLM or similar), handle model updates, watch memory and latency, and get paged when it falls over. That is a meaningful slice of a senior engineer's time, and at startup salaries it can exceed the GPU bill on its own.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Idle hours.&lt;/strong&gt; Traffic has a daily shape. If your users are in one region, your GPUs sit mostly idle for a third of the day, and you pay for them anyway. APIs only charge for what you use.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Quality.&lt;/strong&gt; A self-hosted 70B open model is not a mid-tier closed model. For some tasks it is close enough; for others it isn't, and the cheaper option only counts if it does the job. Measure cost per successful task, not cost per token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Speed of change.&lt;/strong&gt; New models arrive every few months. On an API, switching is a config change. On your own hardware, it is a deployment, a benchmark, and sometimes a different GPU.&lt;/p&gt;

&lt;p&gt;The benchmark figure I used is also an optimistic ceiling: the page it came from was unclear on precision, and real workloads rarely hit benchmark throughput. If the true number is lower, the GPU line stays where it is and capacity drops, which makes the picture for self-hosting worse, not better.&lt;/p&gt;

&lt;h2&gt;
  
  
  When self-hosting an open-weight model is right anyway
&lt;/h2&gt;

&lt;p&gt;The strongest reasons to self-host are about control, not cost. Each is real, and each has a price worth naming.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Data that can't leave your infrastructure.&lt;/strong&gt; Healthcare, defence, some fintech and some government buyers need the model inside their walls or yours. The closed providers' zero-retention and data-residency options close part of this gap, so check them first; my &lt;a href="https://kunalvohra.com/blog/startup-security-checklist" rel="noopener noreferrer"&gt;startup security checklist&lt;/a&gt; and the &lt;a href="https://kunalvohra.com/blog/dpdp-act-explained" rel="noopener noreferrer"&gt;DPDP Act explainer&lt;/a&gt; cover where the obligations actually sit.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A customer contract that requires it.&lt;/strong&gt; Some enterprise buyers ask for a private deployment in their own cloud account. That is a strong reason, and usually a separate deployment per customer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fine-tuned weights you own.&lt;/strong&gt; Fine-tune an open model and the artefact is yours; no vendor can retire it. That only matters once fine-tuning is the right call, which is later than most founders think. I covered the order of operations in &lt;a href="https://kunalvohra.com/blog/rag-vs-fine-tuning" rel="noopener noreferrer"&gt;RAG vs fine-tuning for startups&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using DeepSeek's models safely.&lt;/strong&gt; DeepSeek's own API stores data in China. Its MIT-licensed weights, run on your servers or a US host, avoid that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offline and on-device products.&lt;/strong&gt; If the product has to work without a network, there is no API option. My &lt;a href="https://kunalvohra.com/blog/how-to-run-airllm-on-mac" rel="noopener noreferrer"&gt;AirLLM setup guide&lt;/a&gt; shows how far a 16GB Mac can be pushed, and why that is a development and demo setup rather than production serving.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Real scale.&lt;/strong&gt; Once you are well past the break-even with steady traffic, the savings are real and compound every month. That is a good problem, and a reason to plan the move, not to make it on day one.&lt;/p&gt;

&lt;h2&gt;
  
  
  The middle path most startups miss: hosted open models
&lt;/h2&gt;

&lt;p&gt;A hosted open-model API gives you most of the benefits of open weights without running a GPU. You pick an open model, pay per token like any API, and keep the option to move it onto your own hardware later without changing the model your product depends on.&lt;/p&gt;

&lt;p&gt;That path solves the lock-in worry (Gemini Flash doubling its price on January 1, 2027 is the live example of why people have it), lets you test whether an open model is good enough for your task before committing to hardware, and keeps your costs at zero when nobody is using the product. Most hosts also sell dedicated endpoints, a reserved GPU billed by the hour, which is the natural next step once volume is steady.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Check the licence before you build on it.&lt;/strong&gt; Qwen, gpt-oss, Gemma 4 and Mistral ship under Apache 2.0, and DeepSeek's recent models under MIT: you can use them commercially without strings. Llama's community licence restricts very large products (above 700 million monthly users), and some others, such as Kimi and MiniMax, restrict commercial hosting or require a separate agreement. The models that fit on a single rented GPU (Qwen at around 27B parameters, Gemma 4 31B, gpt-oss-120B) are where self-hosting is realistic for a startup. The 500B+ models need a multi-GPU node and a team to run it.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I'd make the call for an AI startup
&lt;/h2&gt;

&lt;p&gt;Here is the sequence I'd follow:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Ship on an API.&lt;/strong&gt; A closed model or a hosted open model, behind a thin layer in your code that makes the provider swappable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log cost per request from day one.&lt;/strong&gt; Tokens in, tokens out, model, outcome. My &lt;a href="https://kunalvohra.com/blog/ai-mvp-cost" rel="noopener noreferrer"&gt;AI MVP cost guide&lt;/a&gt; explains the per-user arithmetic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test an open model on your own eval set&lt;/strong&gt; through a hosted API. If it isn't good enough, the self-hosting question is closed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Run the break-even&lt;/strong&gt; with your real request size, your real traffic shape, and a GPU quote. Add the engineer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Move to a dedicated endpoint or your own GPUs&lt;/strong&gt; only when you are clearly past the break-even, or when data or a contract requires it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The decision is less about GPUs than about who owns it. A non-technical founder can't easily judge a self-hosting proposal from an engineer who wants to build one, and that is the kind of call a senior technical lead should make with numbers in hand. That rarely needs a full-time CTO at $180,000 to $260,000 a year. A &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; retainer ($750 a month for 15+ hours, held through December 2026) can check the model and infrastructure plan; a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; ($2,500 a month for 50+ hours on the same terms) can own the AI roadmap, the vendors and the build. The &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;fractional CTO cost guide&lt;/a&gt; shows market rates beside mine. If you are still at the build stage, my team and I &lt;a href="https://kunalvohra.com/mvp-development/ai-startups" rel="noopener noreferrer"&gt;build MVPs for AI startups&lt;/a&gt;, and the &lt;a href="https://kunalvohra.com/mvp-cost-calculator" rel="noopener noreferrer"&gt;MVP cost calculator&lt;/a&gt; gives you a first range.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is it cheaper to self-host an LLM than to use an API?&lt;/strong&gt; Only at high, steady volume. With two rented H100s at the October 2026 median of $3.81 an hour, self-hosting a 70B model breaks even with a mid-tier closed API at roughly 214,000 requests a month (8,000 tokens in, 1,000 out each), and with the same open model hosted per token at roughly 594,000. Below that, the API is cheaper, before you count the engineer's time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost to run an LLM on your own GPU?&lt;/strong&gt; A rented H100 costs a median of $3.81 an hour, about $2,780 a month running continuously, with on-demand prices from about $4 to $11 an hour depending on the provider. A 70B-class model realistically needs two GPUs, so about $5,560 a month, plus the engineering time to run it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the cheapest way to use an open-source LLM?&lt;/strong&gt; A hosted open-model API, paid per token. gpt-oss-120B runs about $0.15 / $0.60 per million tokens and DeepSeek V4 Flash about $0.14 / $0.28 on Together AI as of October 2026, with no GPUs to rent and no cost when idle.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should a startup self-host an open-weight model?&lt;/strong&gt; When traffic is clearly past the break-even and steady around the clock, when data or a customer contract requires the model inside your infrastructure, or when you have fine-tuned weights to serve. Even then, a dedicated endpoint from a host is often the step before your own hardware.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run a production LLM on a Mac?&lt;/strong&gt; For development, demos and personal use, yes; small models run well on Apple Silicon. For serving paying users, no. My AirLLM tests on a 16GB Mac mini measured an 8B model at 19.6 seconds per token, which is fine for an experiment and nowhere near production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are open-weight models free to use commercially?&lt;/strong&gt; Many are: Qwen, gpt-oss, Gemma 4 and Mistral use Apache 2.0, and DeepSeek's recent models use MIT. Llama's licence restricts very large products, and some others require a separate agreement for commercial hosting. Read the licence for the exact version you deploy.&lt;/p&gt;

&lt;p&gt;If you're weighing this for your own product, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt;. Bring your request size and rough traffic, and I'll run the break-even with you and tell you whether self-hosting is worth a conversation yet. Or &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt; if you'd rather write first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
      <category>startup</category>
    </item>
    <item>
      <title>RAG vs Fine-Tuning for Startups in 2026: Which One Your AI Product Actually Needs (and Why It's Usually Neither, Yet)</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Mon, 19 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/rag-vs-fine-tuning-for-startups-in-2026-which-one-your-ai-product-actually-needs-and-why-its-547i</link>
      <guid>https://dev.to/kunalvohra/rag-vs-fine-tuning-for-startups-in-2026-which-one-your-ai-product-actually-needs-and-why-its-547i</guid>
      <description>&lt;p&gt;RAG vs fine-tuning is the wrong first question for most AI startups. Retrieval-augmented generation (RAG) gives a model the right facts at the moment it answers; fine-tuning changes how the model behaves by training it on your examples. They solve different problems, and before either one, a well-written prompt with the right context pasted in solves more than founders expect. Use RAG when the model needs knowledge it doesn't have. Fine-tune when it has the knowledge but keeps answering in the wrong shape, and only once you have the data to prove it.&lt;/p&gt;

&lt;p&gt;I'm Kunal Vohra. I've been the technical co-founder six times, and I run ColadAI, a multi-LLM platform, so I make model and architecture calls like this every week and pay the bill for the ones I get wrong. This is how I walk founders through the decision on a first call, in the order I'd make it.&lt;/p&gt;

&lt;h2&gt;
  
  
  RAG vs fine-tuning: the short answer
&lt;/h2&gt;

&lt;p&gt;RAG changes what the model knows when it answers; fine-tuning changes how it answers. If your problem is "the model doesn't know our documents, our product catalogue, or last week's data", that is a knowledge problem and retrieval is the tool. If your problem is "the model knows enough but won't follow our format, tone, or classification rules no matter how we prompt it", that is a behaviour problem and fine-tuning is a candidate.&lt;/p&gt;

&lt;p&gt;The line I'd put on a sticky note: &lt;strong&gt;a fine-tune teaches a model how to answer; retrieval tells it what to answer with.&lt;/strong&gt; Most of the expensive mistakes I see come from using one to do the other's job. Founders fine-tune a model on their help-centre articles hoping it will "learn" them, then find it confidently invents details, because fine-tuning is poor at storing facts reliably and impossible to update without training again. Or they build an elaborate retrieval pipeline to fix what is really a formatting problem a few good examples in the prompt would have solved.&lt;/p&gt;

&lt;p&gt;There is also a third option that sits in front of both, and it wins more often than either.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with prompting: prompt engineering vs RAG vs fine-tuning
&lt;/h2&gt;

&lt;p&gt;Prompting comes first because it is the cheapest to try, the fastest to change, and the only one of the three that doesn't add new infrastructure. A clear system prompt, a handful of worked examples, and the relevant context placed directly in the request will get most AI MVPs to a working first version. If it doesn't, the way it fails tells you which of the other two you need.&lt;/p&gt;

&lt;p&gt;Two things have made the prompting option much stronger over the last couple of years. Context windows are large enough that a small knowledge base (a pricing sheet, a policy document, a few dozen FAQs) can often go straight into the prompt with no retrieval at all. And most major providers now discount repeated prompt prefixes through prompt caching, so sending the same long instructions on every call costs far less than the list price suggests, as long as someone designs for it.&lt;/p&gt;

&lt;p&gt;So the honest order is:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Prompt plus pasted context.&lt;/strong&gt; Try it with your real data and twenty to fifty real test cases. Measure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add retrieval&lt;/strong&gt; when the knowledge no longer fits, changes too often to hand-paste, or differs per customer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Consider fine-tuning&lt;/strong&gt; when the eval numbers show a behaviour gap that better prompts and better context can't close, and you have hundreds of good examples to train on.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Skipping straight to step three is how an MVP ends up with a training pipeline and no users. I made the same point in my &lt;a href="https://kunalvohra.com/blog/ai-mvp-cost" rel="noopener noreferrer"&gt;AI MVP cost breakdown&lt;/a&gt;: prompting plus retrieval gets most v1 products where they need to be.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to use RAG
&lt;/h2&gt;

&lt;p&gt;Use retrieval when the model needs facts it was never trained on, facts that change, or facts that differ by customer. That covers most of what B2B AI products actually do: answering questions over a company's documents, support assistants grounded in a help centre, search over contracts or tickets, and anything that has to cite its source.&lt;/p&gt;

&lt;p&gt;RAG earns its place for four reasons:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freshness.&lt;/strong&gt; Update a document and the next answer uses it. No retraining, no redeploy.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Citations.&lt;/strong&gt; Because the model answers from retrieved passages, you can show the user where the answer came from. Enterprise buyers ask for this, and it is the easiest way to make hallucinations visible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-customer data.&lt;/strong&gt; Each tenant's documents stay in their own slice of the index, and the model only ever sees what the current user is allowed to see. With fine-tuning, there is no clean way to keep one customer's knowledge out of another customer's model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Swappable models.&lt;/strong&gt; Your knowledge lives in your index, not inside a vendor's weights. When a better or cheaper model arrives (and in this market one arrives every few months), you can switch without rebuilding your knowledge layer. I covered why that matters in my &lt;a href="https://kunalvohra.com/blog/gemini-vs-claude-vs-grok-vs-chatgpt-api-for-business" rel="noopener noreferrer"&gt;comparison of the major AI APIs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Do you need RAG on day one? Often not. If your whole knowledge base fits comfortably in a prompt, start there and add retrieval when it stops fitting. A full pipeline with chunking strategies, rerankers and a tuned vector store is work you can defer until usage tells you where answers are going wrong.&lt;/p&gt;

&lt;h2&gt;
  
  
  When to fine-tune an LLM
&lt;/h2&gt;

&lt;p&gt;Fine-tune when you need consistent behaviour at scale and the prompt has stopped being able to deliver it. The cases where I'd seriously consider it:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A strict output format or style the model keeps drifting from.&lt;/strong&gt; A specific report structure, a house tone, a domain-specific way of writing that a few prompt examples don't hold across thousands of calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Narrow, high-volume classification or extraction.&lt;/strong&gt; Routing tickets, tagging documents, pulling fields out of forms. If you have thousands of labelled examples and a stable label set, a small fine-tuned model can beat a large prompted one on cost and latency. My piece on &lt;a href="https://kunalvohra.com/blog/typesafe-jev-system-one-models-explained" rel="noopener noreferrer"&gt;decision models and fine-tuned encoders&lt;/a&gt; goes into that trade-off in more depth.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Moving a task to a smaller, cheaper model.&lt;/strong&gt; Once a large model is doing a task well, its outputs (checked by humans) can become training data that teaches a smaller model to do the same narrow job for a fraction of the inference cost. This is one of the better reasons to fine-tune, and it only works once you already have a working product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shorter prompts at very high volume.&lt;/strong&gt; If every request carries a long block of instructions and examples, baking that behaviour into the model can cut input tokens. Prompt caching has narrowed this advantage, so do the arithmetic before assuming it applies to you.&lt;/p&gt;

&lt;p&gt;What fine-tuning is not for: teaching the model your documents, keeping it current, or fixing a product whose real problem is that nobody has defined what a good answer looks like. If you can't write down twenty examples of a correct answer, you don't have a training set; you have a spec problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  RAG cost vs fine-tuning cost
&lt;/h2&gt;

&lt;p&gt;RAG cost is mostly ongoing and grows with usage; fine-tuning cost is front-loaded and grows with every change. Neither is free, and the bill that surprises founders is usually the one they didn't model.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What RAG costs.&lt;/strong&gt; An embedding step for your documents (small, and repeated only when documents change), a vector store or a vector extension on your existing database, the engineering to chunk, index and filter properly, and the extra input tokens on every request. That last line is the one that grows. Here is the napkin version with the mid-tier price from my AI API guide: &lt;strong&gt;3,000 tokens of retrieved context on every request, at $2 per million input tokens, adds $0.006 a request, or about $0.12 per user per month at twenty sessions.&lt;/strong&gt; Small per user, but it scales with every user and every session, and agents that retrieve several times per action multiply it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What fine-tuning costs.&lt;/strong&gt; Preparing and cleaning a training set (the real cost, and almost always underestimated), the training run itself, evaluation against the base model, and then the ongoing tax: on some providers a fine-tuned model is priced differently from its base model, it is tied to that base model's version, and when the provider retires that version you train again. Every time your product's behaviour needs to change, so does the training data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The hidden cost on both sides is change.&lt;/strong&gt; Products change shape fast before product-market fit. Changing a prompt takes minutes. Re-indexing documents takes hours. Rebuilding a training set and re-running a fine-tune takes days to weeks, and the old one goes stale the moment your product moves. That is the main reason I tell founders not to fine-tune before they have real usage data: you'd be paying to freeze a product that hasn't finished deciding what it is.&lt;/p&gt;

&lt;p&gt;If you want a first number for the build itself, the &lt;a href="https://kunalvohra.com/mvp-cost-calculator" rel="noopener noreferrer"&gt;MVP cost calculator&lt;/a&gt; has an AI-first product type and an LLM integration option, and shows a range rather than a false-precision figure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can you combine RAG and fine-tuning?
&lt;/h2&gt;

&lt;p&gt;Yes, and mature AI products often do: a fine-tuned model for behaviour, retrieval for knowledge. A support assistant might use a model tuned to your house tone and escalation rules, fed with retrieved help-centre passages for the facts. The two don't compete; they sit at different layers.&lt;/p&gt;

&lt;p&gt;The point is sequence, not purity. You earn the combination by shipping prompting first, adding retrieval when knowledge becomes the bottleneck, and adding fine-tuning when evals show a behaviour gap that's worth the maintenance. Teams that start with both usually spend their first quarter maintaining infrastructure instead of learning from users.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes that make AI products expensive to change
&lt;/h2&gt;

&lt;p&gt;The costliest RAG and fine-tuning mistakes aren't technical; they are decisions made too early with no way to measure them. These are the ones I check for first:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No eval set.&lt;/strong&gt; Without twenty to fifty golden cases and a script that scores them, you can't tell whether retrieval helped, whether a fine-tune beat the base model, or whether last week's prompt change broke something. Build the eval set before choosing between RAG and fine-tuning; it is the thing that makes the choice.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retrieval with no tenant isolation.&lt;/strong&gt; If one customer's documents can ever be retrieved into another customer's answer, you have a data breach waiting for a query. Filter on the server, not in the prompt. My &lt;a href="https://kunalvohra.com/blog/startup-security-checklist" rel="noopener noreferrer"&gt;startup security checklist&lt;/a&gt; has the AI section I start from, including treating retrieved documents as untrusted input, since a poisoned document is a prompt-injection route.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Sending sensitive data into training without checking terms.&lt;/strong&gt; Training data leaves your hands in a way that retrieval data doesn't. Check retention and usage terms, and whether customer contracts allow it, before any customer data goes near a fine-tune.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Locking knowledge into weights.&lt;/strong&gt; A fine-tune that "contains" your product knowledge has to be retrained every time that knowledge changes, and it ties you to one vendor's model version. Keep facts in an index you control.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building the pipeline before the product.&lt;/strong&gt; Rerankers, hybrid search and custom embeddings are real improvements. They are month-six improvements. In month one, they are a way to avoid talking to users.&lt;/p&gt;

&lt;p&gt;Investors notice these. In technical due diligence, "how do you know quality didn't drop last month?" and "what happens if your provider retires that model?" are standard questions; my &lt;a href="https://kunalvohra.com/blog/ai-startup-technical-due-diligence" rel="noopener noreferrer"&gt;guide to AI startup technical due diligence&lt;/a&gt; lists what they look for.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should make the RAG vs fine-tuning call?
&lt;/h2&gt;

&lt;p&gt;Someone senior who owns the model and architecture decisions, has shipped AI products before, and will still be around when the decision has consequences. For a non-technical founder, that rarely needs to be a full-time CTO at $180,000 to $260,000 a year plus equity. The call itself is made in the first weeks of a build; what matters is that someone experienced makes it with an eval set in hand.&lt;/p&gt;

&lt;p&gt;If you have a team or a builder and want the architecture checked, a &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; retainer ($750 a month for 15+ hours, held through December 2026) covers reviewing the approach, the eval plan and the model choice. If you need someone to own the AI roadmap, the vendor relationships and the build, that is a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; engagement ($2,500 a month for 50+ hours on the same terms); the &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;fractional CTO cost guide&lt;/a&gt; shows market rates beside mine. If you're still at the build stage, my team and I &lt;a href="https://kunalvohra.com/mvp-development/ai-startups" rel="noopener noreferrer"&gt;build MVPs for AI startups&lt;/a&gt; with the eval harness and cost logging in from the first week. And if you're weighing a dedicated AI leadership role instead, I've written about when a &lt;a href="https://kunalvohra.com/blog/fractional-ai-officer" rel="noopener noreferrer"&gt;fractional AI officer&lt;/a&gt; makes sense.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between RAG and fine-tuning?&lt;/strong&gt; RAG retrieves relevant documents at the moment of the request and gives them to the model as context, so it changes what the model knows when it answers. Fine-tuning trains the model on your examples, so it changes how the model behaves. RAG is the tool for knowledge; fine-tuning is the tool for format, style and narrow repeatable tasks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is RAG better than fine-tuning?&lt;/strong&gt; For most startups, RAG is the better first step whenever the model needs your data: it stays current, supports citations, keeps each customer's data separate and lets you switch models. Fine-tuning is better for consistent behaviour at high volume once you have real examples to train on. Many mature products use both, at different layers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should a startup fine-tune an LLM?&lt;/strong&gt; When your eval set shows a behaviour gap that better prompts and better context can't close, you have hundreds of good examples, and the task is stable enough that the training set won't be stale next month. Moving a proven task from a large model to a smaller, cheaper one is one of the strongest reasons.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can fine-tuning teach a model my company's documents?&lt;/strong&gt; Not reliably. Fine-tuning is poor at storing facts precisely, can't be updated without retraining, and gives you no citation trail. Put your documents in a retrieval index and let the model read them when it answers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does RAG add to inference cost?&lt;/strong&gt; Mostly the extra input tokens on each request. At $2 per million input tokens, 3,000 tokens of retrieved context adds $0.006 a request, or about $0.12 per user per month at twenty sessions. Agents that retrieve several times per action multiply that; prompt caching and tighter retrieval pull it down.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do I need RAG for my MVP?&lt;/strong&gt; Only if your knowledge base doesn't fit comfortably in the prompt, changes often, or differs per customer. Many AI MVPs start with context pasted straight into the prompt and add retrieval once real usage shows where it is needed.&lt;/p&gt;

&lt;p&gt;If you're making this call for your own product, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt;. Bring your use case and a few examples of a good answer, and I'll tell you whether you need prompting, retrieval, fine-tuning, or some order of the three. Or &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt; if you'd rather write first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
      <category>startup</category>
    </item>
    <item>
      <title>Gemini vs Claude vs Grok vs ChatGPT (and DeepSeek) APIs for Business: A Step-by-Step Setup Guide for 2026</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Fri, 09 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/gemini-vs-claude-vs-grok-vs-chatgpt-and-deepseek-apis-for-business-a-step-by-step-setup-guide-17e3</link>
      <guid>https://dev.to/kunalvohra/gemini-vs-claude-vs-grok-vs-chatgpt-and-deepseek-apis-for-business-a-step-by-step-setup-guide-17e3</guid>
      <description>&lt;p&gt;Gemini vs Claude vs Grok vs ChatGPT for business comes down to three questions, not one benchmark: what each model costs per task at your volume, what happens to your data after the request, and how easily you can switch when the leaderboard changes next quarter. For most businesses the right setup is direct API access from each provider's developer console (Google AI Studio, the Claude Console, the xAI console, the OpenAI Platform, and optionally DeepSeek), a paid organisation account with spend limits, scoped keys in a secrets manager, data retention confirmed in writing, and a thin layer in your own code that lets you route each task to whichever model does it best.&lt;/p&gt;

&lt;p&gt;I run ColadAI, a multi-LLM platform, and as a fractional CTO for AI-first startups I set this up for founders who are about to wire AI into a real product. This guide is the version I would walk you through on a call: the honest comparison first, then the step-by-step setup for each provider, with working code. Prices and model names below are from each provider's own documentation as of October 2026; they change often, so check the linked pages before you commit a budget.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why use the API directly instead of ChatGPT, Gemini or Claude apps?
&lt;/h2&gt;

&lt;p&gt;Use the API directly when AI is going into your product, your workflows, or your customers' data. The consumer and team chat apps are built for people typing; the APIs are built for software. The difference matters for a business in four ways.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You pay per use, not per seat.&lt;/strong&gt; API billing is per token (roughly, per word processed). A workflow that runs ten thousand times a month costs what it costs, with no per-user licences.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your data terms are different.&lt;/strong&gt; All four US providers state that paid API traffic is not used to train their models by default, and each offers shorter or zero retention for eligible customers. The free tiers are a different story, which I cover below.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You choose the model per task.&lt;/strong&gt; The apps pick for you. The API lets you send a simple classification to a model that costs $0.10 per million input tokens and a hard contract review to one that costs fifty times more.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can switch providers.&lt;/strong&gt; If your code talks to an API through your own layer, moving from one provider to another is a configuration change, not a rewrite.&lt;/p&gt;

&lt;p&gt;One naming note: "ChatGPT" is OpenAI's chat app. The business API behind it is the OpenAI API, managed from the OpenAI Platform. When founders say "ChatGPT API", that is what they mean.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gemini vs Claude vs Grok vs ChatGPT vs DeepSeek: the comparison that matters for business
&lt;/h2&gt;

&lt;p&gt;Here is how the five compare on the things a business actually decides on: price tiers, data handling, and where each fits. All prices are USD per million tokens, input then output, at standard rates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI (the ChatGPT API).&lt;/strong&gt; Three current flagship models: GPT-6 Astra ($10 / $50) for the hardest work, GPT-6.1 Sol ($2 / $10) as the balanced default, and GPT-6 Luna ($0.10 / $0.50) for high-volume tasks. All three list a 1.05M-token context window and built-in tools (web search, file search, computer use). The Batch API runs at half price. API data is not used for training unless you opt in; abuse-monitoring logs are kept for up to 30 days, with zero or modified retention for approved customers. OpenAI has the broadest published data-residency list of the five (US, Europe and the UAE for storage and processing; several more regions, including India and the UK, for storage only), mostly subject to approval.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Anthropic (Claude).&lt;/strong&gt; Claude Opus 5.5 ($4 / $20) for complex reasoning and agents, Claude Sonnet 5.5 ($2 / $10) as the workhorse, and Claude Haiku 5.5 ($0.10 / $0.50 for prompts up to 100k tokens) for speed and volume. There is also a premium tier (Claude Fable 5.1, $10 / $50). Batch is half price, and cached prompt reads on Opus 5.5 and Sonnet 5.5 cost 5 percent of the normal input price, which matters if you send the same long instructions or documents repeatedly. Anthropic states that retained data is never used for training without your permission, and that conversation content is not retained by default (some premium models require 30-day retention). Zero data retention is available through sales, and a data-residency option exists on the Messages API. Claude is also sold through AWS Bedrock and Google Vertex AI, which helps if your cloud contract already lives there.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google (Gemini).&lt;/strong&gt; Gemini 3.1 Pro (in preview, $2 / $12 up to 200k tokens) for the hardest work, Gemini 3.8 Flash as the main fast model ($0.75 / $3.75 through December 31, 2026, rising to $1.50 / $7.50 from January 1, 2027), and the Flash-Lite models ($0.25 to $0.30 input) for the cheapest volume work. Batch is half price. Gemini has the most generous free tier, which is excellent for prototyping, but Google's pricing page is explicit: free-tier data is used to improve Google's products, paid-tier data is not. Treat the free tier as a sandbox for non-sensitive data only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;xAI (Grok).&lt;/strong&gt; Grok 4.7 ($2 / $6, cached input $0.50) with a 500k-token context window and configurable reasoning; older Grok 4.3 and 4.20 models run $1.25 / $2.50 with a 20 percent batch discount. Requests over 200k tokens bill at double. xAI states it never trains on API inputs or outputs without explicit permission, keeps requests for 30 days for abuse auditing, and offers self-serve zero data retention for team admins (which switches off Batch, Files and the stateful Responses features). A US-only regional endpoint is available for Grok 4.7 and 4.6 at 10 percent more per token. The API is OpenAI-compatible, so the OpenAI SDK works with a changed base URL.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DeepSeek.&lt;/strong&gt; The cheapest by a wide margin: deepseek-flash at $0.30 / $1.20 and deepseek-v4-pro at $1.32 / $3.96 during peak hours, both half that off-peak, with a 1M-token context and near-free cache hits. It speaks both the OpenAI and Anthropic API formats. The catch is data: DeepSeek's privacy policy says it collects, processes and stores personal data in the People's Republic of China and lists model training among its uses (API data processed for your end users is addressed separately, with you as the controller). For most businesses that means: fine for public or synthetic data and cost experiments, not for customer data, unless you run the open-weight versions DeepSeek has published on your own infrastructure.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Worth knowing beyond these five.&lt;/strong&gt; If EU data residency is a hard requirement, look at Mistral, a European provider with its own API platform, and check its data processing terms directly. If your company is already committed to AWS, Google Cloud or Azure, you can reach several of these models through those clouds (Claude on Bedrock and Vertex, Gemini on Vertex, OpenAI models on Azure) under the contract and compliance setup you already have.&lt;/p&gt;

&lt;p&gt;The line I want every founder to remember: &lt;strong&gt;at list prices, a million output tokens costs $0.50 on Claude Haiku 5.5 or GPT-6 Luna and $50 on GPT-6 Astra or Claude Fable 5.1, a hundredfold spread inside the same two vendors.&lt;/strong&gt; Model choice per task is the biggest cost lever you have, far bigger than the choice of vendor.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which AI API should your business use?
&lt;/h2&gt;

&lt;p&gt;Pick the provider per job, not per company. In practice, most of the AI-first products I see end up on two providers: one main model for quality-sensitive work and a cheap fast model for volume, with a third wired in as a fallback.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Customer-facing chat, support and agents over your own documents:&lt;/strong&gt; a mid-tier model (Claude Sonnet 5.5, GPT-6.1 Sol, Gemini 3.8 Flash or Grok 4.7) with prompt caching switched on. Run your own evaluation; differences between these on your actual data matter more than any public leaderboard.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Classification, extraction, tagging, routing:&lt;/strong&gt; the small models (Claude Haiku 5.5, GPT-6 Luna, Gemini Flash-Lite, deepseek-flash for non-sensitive data). This is where most of the volume, and most of the savings, live.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hard reasoning, code generation, long contract or due-diligence review:&lt;/strong&gt; the top tier (Claude Opus 5.5, GPT-6 Astra, Gemini 3.1 Pro), used sparingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Very long documents in one request:&lt;/strong&gt; OpenAI's 1.05M-token window, Grok 4.7's 500k, DeepSeek's 1M, or Claude and Gemini with long-context pricing. Check long-context surcharges before you design around them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulated data (health, finance, children's data, DPDP or GDPR obligations):&lt;/strong&gt; whichever provider will sign the agreement you need (a DPA, a BAA for HIPAA, zero retention, a residency commitment). That decision is legal and contractual first and technical second. My &lt;a href="https://kunalvohra.com/blog/startup-security-checklist" rel="noopener noreferrer"&gt;startup security checklist&lt;/a&gt; covers the rest of the stack, and for India specifically, the &lt;a href="https://kunalvohra.com/blog/dpdp-act-explained" rel="noopener noreferrer"&gt;DPDP Act explainer&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Decide what data will go into the model
&lt;/h2&gt;

&lt;p&gt;Before you create a single account, write down which data will go into prompts. This one page decides which providers you are allowed to use, which tier, and which contract terms you need.&lt;/p&gt;

&lt;p&gt;Sort it into three buckets: &lt;strong&gt;public or synthetic&lt;/strong&gt; (marketing copy, public docs), &lt;strong&gt;internal&lt;/strong&gt; (your own business data, code, plans), and &lt;strong&gt;regulated or customer personal data&lt;/strong&gt; (health records, payment details, children's data, anything under GDPR, HIPAA or India's DPDP Act). Public data can go anywhere, including free tiers. Internal data needs a paid API tier with no training. Regulated data needs a signed agreement and, usually, zero or minimal retention and a residency commitment. If you skip this step, the decision gets made by whichever engineer creates the first key.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Create a business organisation in each console
&lt;/h2&gt;

&lt;p&gt;Create each account as an organisation owned by the company, not as a personal login that leaves when the engineer does. Use a shared admin email or SSO where the provider supports it, add at least two admins, and invite engineers as members rather than sharing a login.&lt;/p&gt;

&lt;p&gt;The consoles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI:&lt;/strong&gt; platform.openai.com (API keys at platform.openai.com/api-keys).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anthropic:&lt;/strong&gt; the Claude Console at platform.claude.com.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini:&lt;/strong&gt; Google AI Studio at aistudio.google.com/apikey, which creates a Google Cloud project behind the scenes. Use a company Google Cloud project, not a personal one.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;xAI:&lt;/strong&gt; console.x.ai.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;DeepSeek:&lt;/strong&gt; platform.deepseek.com.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Set up billing, credit limits and usage tiers
&lt;/h2&gt;

&lt;p&gt;Fund each account with prepaid credits or a capped card, and set a monthly spend limit and alerts on day one. A bug that loops an API call overnight is the most common way a startup gets a surprise AI bill, and spend caps are the cheapest insurance you will ever buy.&lt;/p&gt;

&lt;p&gt;xAI requires credits before the first call. Gemini only stops using your data for product improvement once billing is enabled on the project, so turn billing on before any real data goes in. Every provider also has rate limits that rise with your spend history; if you are launching to a large audience, check your tier a week before, not on launch day.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Create scoped API keys and store them properly
&lt;/h2&gt;

&lt;p&gt;Create one key per environment and per application (for example, "support-bot-production" and "support-bot-staging"), never one shared key for everything. Store keys in a secrets manager (AWS Secrets Manager, Google Secret Manager, Doppler, or your platform's encrypted environment variables), and never put a key in frontend code, a mobile app bundle, or a Git repository. Every request from a browser or app should go through your own backend, which holds the key.&lt;/p&gt;

&lt;p&gt;Name each key so you can tell from the console what breaks if you revoke it, and rotate keys when anyone with access leaves. Each SDK reads its key from a standard environment variable: OPENAI_API_KEY, ANTHROPIC_API_KEY, GEMINI_API_KEY, XAI_API_KEY, and for DeepSeek, whatever name you choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Make your first API call to each provider
&lt;/h2&gt;

&lt;p&gt;Here is the smallest working call for each, in Python. Install the SDKs first:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;pip &lt;span class="nb"&gt;install &lt;/span&gt;openai anthropic google-genai

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;OpenAI (Responses API):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# reads OPENAI_API_KEY
&lt;/span&gt;
&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gpt-6.1-sol&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarise this support ticket in one sentence: ...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Anthropic (Claude Messages API):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;anthropic&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Anthropic&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# reads ANTHROPIC_API_KEY
&lt;/span&gt;
&lt;span class="n"&gt;message&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;claude-opus-5-5&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;max_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarise this support ticket in one sentence: ...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nb"&gt;type&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;text&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;block&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Swap in the Sonnet 5.5 or Haiku 5.5 model ID from Anthropic's models page for cheaper, faster calls.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Google Gemini:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;google&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;genai&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nc"&gt;Client&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="c1"&gt;# reads GEMINI_API_KEY
&lt;/span&gt;
&lt;span class="n"&gt;interaction&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;interactions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;gemini-3.8-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarise this support ticket in one sentence: ...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;interaction&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;xAI Grok (using the OpenAI SDK):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;XAI_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.x.ai/v1&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;responses&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;grok-4.7&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nb"&gt;input&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarise this support ticket in one sentence: ...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;output_text&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;DeepSeek (OpenAI-compatible):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;os&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;openai&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;OpenAI&lt;/span&gt;

&lt;span class="n"&gt;client&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;OpenAI&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;api_key&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;os&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getenv&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;DEEPSEEK_API_KEY&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
    &lt;span class="n"&gt;base_url&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;https://api.deepseek.com&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;client&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;chat&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;completions&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;create&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;
    &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;deepseek-flash&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;Summarise this public FAQ in one sentence: ...&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;}],&lt;/span&gt;
&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;choices&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="n"&gt;message&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;content&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notice that three of the five accept the OpenAI SDK with a different base URL, and DeepSeek also accepts the Anthropic format. That compatibility is what makes the architecture in Step 7 cheap to build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Lock down data retention, residency and compliance
&lt;/h2&gt;

&lt;p&gt;Confirm in writing what each provider does with your data, then switch on the controls you are entitled to. The defaults are reasonable for internal data; regulated data needs more.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Training:&lt;/strong&gt; confirm "no training on API data" applies to your account (it is the stated default for OpenAI, Anthropic, xAI and paid Gemini; it is not the default for Gemini's free tier).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Retention:&lt;/strong&gt; OpenAI and xAI keep logs up to 30 days for abuse monitoring by default; Anthropic does not retain conversation content by default except for certain premium models. Ask for zero data retention if you are eligible, and note what it switches off (xAI's ZDR disables Batch and Files, for example).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Residency:&lt;/strong&gt; if your customers or regulators require data to stay in a region, use the provider's residency option (OpenAI's regional storage and processing, Anthropic's residency setting on the Messages API, xAI's US endpoint) or route through your existing cloud region on Bedrock, Vertex or Azure.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contracts:&lt;/strong&gt; sign the provider's DPA, and a BAA if you handle US health data. Keep copies; investors' &lt;a href="https://kunalvohra.com/blog/ai-startup-technical-due-diligence" rel="noopener noreferrer"&gt;technical due diligence&lt;/a&gt; will ask.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Prompt injection and tool access:&lt;/strong&gt; if the model can call tools or read customer content, treat every model output as untrusted input. I wrote up the attacks in &lt;a href="https://medium.kunalvohra.com/prompt-injection-attacks-explained-the-security-vulnerability-every-ai-builder-needs-to-understand-d3d17b8c1c0c" rel="noopener noreferrer"&gt;prompt injection explained&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 7: Build a provider-agnostic layer so you can switch
&lt;/h2&gt;

&lt;p&gt;Never call a provider's SDK from all over your codebase. Put one small module in between: your code asks it to "summarise this ticket" or "classify this email", and the module decides which provider and model handles it, from configuration. That one decision lets you change models when prices move, fail over when a provider has an outage, and route each task to the cheapest model that passes your tests.&lt;/p&gt;

&lt;p&gt;Keep the layer thin: a function per task type, a config file mapping each task to a provider and model, a fallback provider for each, timeouts and retries, and logging of tokens and cost per call. Open-source gateways and routers exist if you would rather not write it, but the principle is the same: your product should never know which vendor answered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 8: Test on your own data and measure cost per task
&lt;/h2&gt;

&lt;p&gt;Public benchmarks tell you which model is good in general; only your own test set tells you which is good for your job. Collect 30 to 50 real examples of the task (with personal data removed or replaced), write down what a good answer looks like, and run every candidate model over the set.&lt;/p&gt;

&lt;p&gt;Score quality, then compute &lt;strong&gt;cost per successful task&lt;/strong&gt; , not cost per token. A model that is three times cheaper per token but fails one task in five, forcing a retry or a human review, is often the expensive option. Re-run the set every time a provider ships a new model; with five vendors releasing on their own schedules, that is roughly monthly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 9: Run it in production without surprises
&lt;/h2&gt;

&lt;p&gt;The production checklist I hand to teams:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Switch on prompt caching&lt;/strong&gt; for repeated system prompts and documents. Cached reads are a fraction of the normal input price on every provider here.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use batch APIs for anything not real-time&lt;/strong&gt; (nightly classification, report generation): half price on OpenAI, Anthropic and Gemini.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set timeouts, retries with backoff, and a fallback model&lt;/strong&gt; for every call path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log usage per feature and per customer&lt;/strong&gt; , so you can see which feature is burning the budget.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Alert on spend anomalies daily&lt;/strong&gt; , not when the monthly invoice arrives.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin model versions in production&lt;/strong&gt; and upgrade deliberately after your test set passes; aliases quietly move to new versions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rotate keys&lt;/strong&gt; on a schedule and when people leave.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If your team has not done this before, this is precisely the work a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; or a &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; covers in the first weeks of an AI build, and it is far cheaper to set up correctly than to unwind later. If you are earlier than that and still scoping the product, the &lt;a href="https://kunalvohra.com/mvp-cost-calculator" rel="noopener noreferrer"&gt;MVP cost calculator&lt;/a&gt; includes LLM integration as a line item.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Is the ChatGPT API the same as the OpenAI API?&lt;/strong&gt; Yes. ChatGPT is OpenAI's chat app; the API that businesses build on is the OpenAI API, managed from the OpenAI Platform at platform.openai.com. It is billed per token, separately from any ChatGPT subscription.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which AI API is cheapest for business use?&lt;/strong&gt; At list prices, DeepSeek's deepseek-flash is the cheapest of the five, especially off-peak, but its data is stored in China. Among the US providers, the small models (GPT-6 Luna and Claude Haiku 5.5 at $0.10 input and $0.50 output, Gemini Flash-Lite at $0.25 to $0.30 input) are the cheapest. Measure cost per successful task, not per token.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do OpenAI, Anthropic, Google and xAI train on my API data?&lt;/strong&gt; By their own documentation, not by default on paid API traffic. The exception to watch is Google's Gemini free tier, where Google states data is used to improve its products. Always confirm the terms for your account and sign a DPA.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is DeepSeek safe for business?&lt;/strong&gt; For public or synthetic data and cost experiments, it can be useful. For customer or regulated data, its privacy policy states that data is stored and processed in China, which most businesses (and many regulators) will not accept. Self-hosting an open-weight DeepSeek model on your own infrastructure avoids that, at the cost of running the infrastructure yourself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use more than one AI provider?&lt;/strong&gt; Yes, and most serious AI products should. Use a thin provider-agnostic layer in your code, route each task to the model that wins on your test set, and keep a second provider as a fallback for outages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I use the API directly or through AWS Bedrock, Google Vertex AI or Azure?&lt;/strong&gt; If your company already runs on one of those clouds and needs its compliance, billing and regional controls, going through the cloud is often simpler. If you are a startup choosing fresh, the direct APIs get new models first and are simpler to start with.&lt;/p&gt;

&lt;p&gt;If you are about to wire AI into your product and want a second pair of eyes on the provider choice, data terms, and architecture before you commit, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt;. I will tell you which models to start with for your use case, what it should cost per month at your volume, and what to lock down before any customer data goes in. You can also reach me through the &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;contact page&lt;/a&gt;, or read how a &lt;a href="https://kunalvohra.com/cto-as-a-service" rel="noopener noreferrer"&gt;CTO as a service&lt;/a&gt; engagement covers this end to end.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
      <category>startup</category>
    </item>
    <item>
      <title>What Does a CTO Do in a Startup? The Role at Every Stage, From Someone Who Has Done It Six Times</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Fri, 09 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/what-does-a-cto-do-in-a-startup-the-role-at-every-stage-from-someone-who-has-done-it-six-times-2n5j</link>
      <guid>https://dev.to/kunalvohra/what-does-a-cto-do-in-a-startup-the-role-at-every-stage-from-someone-who-has-done-it-six-times-2n5j</guid>
      <description>&lt;p&gt;What does a CTO do in a startup? A startup CTO owns every technical decision the company cannot afford to get wrong: what gets built and what does not, how it is built so it survives growth, who builds it, and how it stays secure. At pre-seed that mostly means writing the code yourself. At Series A it mostly means building the team that writes it. The title stays the same; the job underneath it changes almost completely with every stage.&lt;/p&gt;

&lt;p&gt;I have been the CTO or technical co-founder in six ventures across the USA, the UAE and India over more than ten years, and I now do the job as a fractional and interim CTO for AI-first startups. Founders ask me this question in two forms. Technical founders ask "what am I supposed to be doing now that I have the title?" Non-technical founders ask "what would a CTO actually do here, and do I need one yet?" This guide answers both.&lt;/p&gt;

&lt;h2&gt;
  
  
  What does a CTO do in a startup, in one sentence?
&lt;/h2&gt;

&lt;p&gt;A startup CTO turns the business plan into a technical plan, and then makes sure the technical plan actually ships. Everything else on the list (architecture, hiring, security, vendors, investor questions) is a part of that one job.&lt;/p&gt;

&lt;p&gt;The useful way to think about it: the CEO decides where the company is going, and the CTO decides what the company has to build, buy, and become technically to get there, at a cost the runway can survive. A big-company CTO is often an external-facing technology strategist. A startup CTO is an owner. If the product is slow, insecure, late, or built on a decision nobody can reverse, it is the CTO's problem, whatever the org chart says.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core startup CTO responsibilities
&lt;/h2&gt;

&lt;p&gt;The startup CTO responsibilities fall into six buckets. Which one dominates depends on stage, but a CTO who ignores any of them for long will pay for it later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Technical strategy and architecture.&lt;/strong&gt; Choosing what to build versus buy, picking the stack, and designing systems that will not need a rewrite at ten times the load. Just as important is what not to build: killing overengineering before it eats the runway is a large part of the job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Shipping the product.&lt;/strong&gt; Owning delivery: the roadmap from the technical side, release discipline, deployment, and the honest answer when the founder asks "can we have this by March?" Early on, this is literally writing the code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Building the engineering team.&lt;/strong&gt; Writing the role, interviewing for real signal, onboarding, code review culture, and eventually hiring the managers who hire everyone else. The first five engineers set the standard for the next fifty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Security, data, and compliance.&lt;/strong&gt; Access control, secrets, backups that have actually been restored, and whatever your market requires (HIPAA, SOC 2, GDPR, India's DPDP Act). My M.Tech is in cybersecurity, so I am biased here, but security is the one bucket that cannot be cheaply retrofitted once users and attackers have a reason to probe you. My &lt;a href="https://kunalvohra.com/blog/startup-security-checklist" rel="noopener noreferrer"&gt;startup security checklist&lt;/a&gt; is the order I fix things in.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Vendors, cost, and AI choices.&lt;/strong&gt; Cloud bills, model providers, third-party APIs, agencies. In 2026, an AI-first startup's CTO spends real time on which model calls are worth their cost and which AI-generated code can be trusted in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. The technical face of the company.&lt;/strong&gt; Investor due diligence, enterprise customer security questionnaires, partner integrations, and occasionally a sales call where someone needs to hear "yes, it scales" from the person accountable if it does not. I wrote up &lt;a href="https://kunalvohra.com/blog/ai-startup-technical-due-diligence" rel="noopener noreferrer"&gt;what investors actually check in technical due diligence&lt;/a&gt; separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  The startup CTO role by stage
&lt;/h2&gt;

&lt;p&gt;The startup CTO role is not one job; it is three or four jobs that share a title. The most common failure I see is a CTO doing the job from the previous stage, or the next one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pre-seed (zero to two engineers): the builder.&lt;/strong&gt; The CTO writes most of the code, chooses the stack, sets up the cloud accounts, and makes fast decisions that are good enough rather than perfect. The danger is gold-plating: building for a million users when you have twelve. A pre-seed CTO's best skill is knowing which shortcuts are safe.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seed (two to eight engineers): the player-coach.&lt;/strong&gt; Still writing code, but now hiring, reviewing, and setting the habits (code review, testing where it matters, a deploy process that does not depend on one person's laptop). This is where architecture decisions start to compound, and where the first security and data decisions get made, usually by default rather than on purpose.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Series A (eight to twenty engineers): the leader.&lt;/strong&gt; Coding drops to a fraction of the week, often to nothing. The job becomes structure: team leads, a hiring pipeline, a technical roadmap the board can read, platform decisions that let several teams ship without stepping on each other. Many technical founders struggle here, because the work that made them valuable is no longer the work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Series B and beyond: the executive.&lt;/strong&gt; Organisation design, budgets, long-range technical strategy, and usually a VP of Engineering running day-to-day delivery underneath. At this point the startup CTO starts to look like the textbook CTO.&lt;/p&gt;

&lt;p&gt;The line I give founders, and the one worth quoting: &lt;strong&gt;below three engineers a CTO is mostly a builder; past eight, mostly a leader; and the expensive mistakes happen when someone does the wrong one of those jobs for too long.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a startup CTO does in a typical week
&lt;/h2&gt;

&lt;p&gt;To make this concrete, here is roughly how a seed-stage CTO's week breaks down when the role is working. The proportions shift by company, but the categories hold.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Building and reviewing (often half the week or more).&lt;/strong&gt; Writing the hard parts, reviewing every meaningful pull request, unblocking engineers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Planning with the CEO.&lt;/strong&gt; Translating next quarter's business goals into what gets built, and pushing back when the plan does not fit the team or the runway.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hiring.&lt;/strong&gt; Sourcing, interviews, take-home reviews, reference calls. At seed this is a standing slot, not an occasional task.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operations and incidents.&lt;/strong&gt; The deploy that broke, the cloud bill that doubled, the customer who found a bug in production.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security and data hygiene.&lt;/strong&gt; Small, unglamorous, and the bucket that most often gets skipped until someone asks for a SOC 2 report.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The unofficial part of the job is being the person who picks up the phone when something breaks the night before a demo. In the edtech venture where we ended up building our own Linux OS from zero, our first full run (500,000 assessments in one hour) nearly came undone because of one wrong line in an AWS load balancer configuration, caught at the last moment. No job description lists that. It is still the job. I wrote the full story in the &lt;a href="https://kunalvohra.com/blog/the-edtech-problem-nobody-would-touch" rel="noopener noreferrer"&gt;edtech case study&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  CTO vs VP of Engineering: who does what
&lt;/h2&gt;

&lt;p&gt;A CTO owns what gets built and why, technically; a VP of Engineering owns how the team delivers it, week to week. In a seed-stage startup they are the same person. They split when the team grows large enough that technical direction and delivery management each become a full-time job, typically somewhere past Series A.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The CTO is responsible for:&lt;/strong&gt; architecture and technical strategy, build-versus-buy, security posture, technical risk, the long-range platform, and the technical story for investors and enterprise customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The VP of Engineering is responsible for:&lt;/strong&gt; delivery, process, team health, management structure, hiring throughput, and performance.&lt;/p&gt;

&lt;p&gt;If your technical co-founder is a brilliant architect who hates managing people, the usual answer at Series A is not to replace them; it is to hire a VP of Engineering underneath them and let each do the job they are good at. If they are a natural manager who has drifted away from technical depth, the split runs the other way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical co-founder vs CTO
&lt;/h2&gt;

&lt;p&gt;A technical co-founder is a CTO who joined before there was a company to join. The responsibilities are the same at pre-seed; the difference is risk, timing, and compensation. A co-founder shares the founding risk and holds a large equity stake (the &lt;a href="https://kunalvohra.com/blog/technical-cofounder-equity-split" rel="noopener noreferrer"&gt;equity split guide&lt;/a&gt; covers what is fair). A hired CTO joins after funding, is paid mostly in salary (roughly $180,000 to $260,000 at seed to Series A in the US) and gets a smaller stake, usually 1 to 4 percent on a four-year vest. The full breakdown is in &lt;a href="https://kunalvohra.com/blog/startup-cto-salary-and-equity" rel="noopener noreferrer"&gt;startup CTO salary and equity&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One more distinction founders miss: the co-founder title does not guarantee the person can do the Series A version of the job. Plenty of excellent technical co-founders are happiest as builders. Talk about that early, before the company forces the conversation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Does a startup need a CTO at all?
&lt;/h2&gt;

&lt;p&gt;Not always, and not yet. If you have no product, no engineers, and no code, you do not need a CTO; you need the product to exist, which is a build problem. If an agency or a freelancer is building your MVP, you need someone senior to check their work, which is an advisory problem. A CTO becomes necessary when there is a team to lead, an architecture to own, and a roadmap someone has to be accountable for.&lt;/p&gt;

&lt;p&gt;Here is how I map stage to the shape of technical leadership:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No product yet:&lt;/strong&gt; get it built well. A scoped build (&lt;a href="https://kunalvohra.com/mvp-development" rel="noopener noreferrer"&gt;MVP development&lt;/a&gt;; the &lt;a href="https://kunalvohra.com/mvp-cost-calculator" rel="noopener noreferrer"&gt;MVP cost calculator&lt;/a&gt; gives you a range for your own scope) plus a few hours a month of senior review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Agency or freelancer building, no internal engineers:&lt;/strong&gt; a &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; for decision review. My Technical Advisor tier is $750 a month (15+ hours) at the rate I am holding through December 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Two to eight engineers, funded:&lt;/strong&gt; a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; two or three days a week who owns the decisions above. My Fractional CTO tier is $2,500 a month (50+ hours) in the same window; the &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;fractional CTO cost guide&lt;/a&gt; puts it next to market rates.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CTO just left, raise is weeks away, or the product is stuck:&lt;/strong&gt; an &lt;a href="https://kunalvohra.com/interim-cto" rel="noopener noreferrer"&gt;interim CTO&lt;/a&gt; who steps in near full-time for three to nine months and often hires the permanent replacement.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eight or more engineers and a funded roadmap:&lt;/strong&gt; a full-time CTO. A full-time startup CTO in the US costs about $260,000 a year fully loaded, before equity, and is worth it once leadership is a full-time job. The &lt;a href="https://kunalvohra.com/blog/how-to-hire-a-cto-for-your-startup" rel="noopener noreferrer"&gt;hiring guide&lt;/a&gt; walks through the search.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are not sure which line you are on, the &lt;a href="https://kunalvohra.com/blog/fractional-cto-vs-full-time-cto" rel="noopener noreferrer"&gt;fractional versus full-time comparison&lt;/a&gt; goes deeper on the trade-off, and &lt;a href="https://kunalvohra.com/blog/what-is-a-fractional-cto" rel="noopener noreferrer"&gt;what a fractional CTO is&lt;/a&gt; explains how the part-time version of this role works.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to tell if your CTO is doing the job well
&lt;/h2&gt;

&lt;p&gt;Judge a startup CTO on outcomes, not activity. Non-technical founders often cannot evaluate the code, but they can evaluate whether the technical side of the company is getting easier or harder to run. Five signals I look at when a founder asks me to assess their technical leadership:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Predictability.&lt;/strong&gt; Engineering estimates are roughly right, and when they slip, you hear about it early, not on the deadline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No surprises in production.&lt;/strong&gt; Outages happen, but they are rare, explained, and followed by a fix to the cause.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hiring works.&lt;/strong&gt; Good engineers join and stay, and the CTO can explain why.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decisions are written down.&lt;/strong&gt; Major architecture and vendor choices have a short written rationale someone else can read.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You understand the trade-offs.&lt;/strong&gt; A good CTO can explain any technical decision to a non-technical founder in plain language, including what it costs and what it rules out.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If most of those are failing, the problem is rarely talent. It is usually a CTO doing the wrong stage's job, or a CTO with no one senior to push back on them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What does a CTO do in a startup day to day?&lt;/strong&gt; At pre-seed and seed, mostly building: writing and reviewing code, deploying, fixing what breaks, plus hiring and planning with the CEO. From Series A onward, mostly leading: hiring, structuring teams, owning the technical roadmap, security, vendors, and investor and customer technical questions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What are the main responsibilities of a startup CTO?&lt;/strong&gt; Technical strategy and architecture, shipping the product, building the engineering team, security and compliance, vendor and cost decisions (including AI models), and representing the technology to investors and enterprise customers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does a startup CTO write code?&lt;/strong&gt; At pre-seed and seed, yes, and a lot of it. With fewer than six engineers, a CTO who does not write code is a manager without enough people to manage. By Series B, a CTO who still writes most of the critical code has usually become the bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between a CTO and a VP of Engineering?&lt;/strong&gt; The CTO owns technical direction (what gets built and why, architecture, security, technical risk). The VP of Engineering owns delivery (process, team health, management, hiring throughput). In an early startup one person does both; they split once the team is large enough that each is a full-time job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should a startup hire a CTO?&lt;/strong&gt; Hire a full-time CTO when you have a funded roadmap and roughly eight or more engineers. Before that, a technical co-founder, a fractional CTO, or a technical advisor usually covers the role at a fraction of the cost.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a fractional CTO do the job of a startup CTO?&lt;/strong&gt; For most companies with fewer than eight engineers, yes: a fractional CTO owns the same decisions, just on two or three days a week instead of five. The limit is when the team is large enough that the CTO's availability becomes the bottleneck, which is the point to hire full-time.&lt;/p&gt;

&lt;p&gt;If you are trying to work out what your startup needs from technical leadership right now, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt;. Tell me your stage, your team, and what feels stuck, and I will tell you straight whether you need a CTO, a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt;, an advisor, or simply a well-scoped build first. You can also reach me through the &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;contact page&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>career</category>
      <category>leadership</category>
      <category>entrepreneurship</category>
    </item>
    <item>
      <title>How to Build an MVP Without a Technical Co-Founder (From Someone Who Has Been One Six Times)</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Wed, 07 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/how-to-build-an-mvp-without-a-technical-co-founder-from-someone-who-has-been-one-six-times-233i</link>
      <guid>https://dev.to/kunalvohra/how-to-build-an-mvp-without-a-technical-co-founder-from-someone-who-has-been-one-six-times-233i</guid>
      <description>&lt;p&gt;You can build an MVP without a technical co-founder, and for most non-technical founders it is the better path. If your product is a well-understood build (a marketplace, a booking flow, a dashboard, a mobile app over an API), you need it built well, not invented. The way to do it: validate demand first, write a scope a builder can price, hire a builder whose price you can check, rent senior technical judgment by the month instead of paying for it in equity, and make sure you own every line of code and every account from day one.&lt;/p&gt;

&lt;p&gt;I say that as someone who has been the technical co-founder six times. I am not against co-founders; I have been one, and I still take on a partnership very selectively. But the most common mismatch I see is a founder offering 30 to 50 percent of the company to someone when what they actually needed was an app built. This guide is the path I would walk you through on a call if you came to me without a technical partner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Can you build an MVP without a technical co-founder?
&lt;/h2&gt;

&lt;p&gt;Yes, when three things are true: the product is a known pattern rather than a technical invention, you can fund development even modestly, and your advantage is distribution or domain knowledge rather than the technology itself. In that situation a co-founder search is the slow, expensive route to the same MVP.&lt;/p&gt;

&lt;p&gt;A co-founder search done properly takes three to nine months. The equity you give away is the most expensive money you will ever spend. And the failure mode, a mediocre partnership entered because you were tired of searching, is worse than finding nobody, because the wrong person now owns a large slice of the company and votes on its future.&lt;/p&gt;

&lt;p&gt;Here is the arithmetic I ask founders to do coldly. &lt;strong&gt;Thirty percent of a company that later raises at a $10 million valuation is a $3 million claim on paper; a typical MVP, even from an expensive agency, costs a small fraction of that.&lt;/strong&gt; Equity is the most expensive way to pay for a build.&lt;/p&gt;

&lt;h2&gt;
  
  
  When you really do need a technical co-founder
&lt;/h2&gt;

&lt;p&gt;You need a technical co-founder when the technology is the moat: novel AI systems, hard infrastructure, security-critical products, anything where the person who solves the technical problem is the reason the company can exist. You also need one if you cannot fund development any other way, or if investors in your space effectively require a technical founder on the cap table.&lt;/p&gt;

&lt;p&gt;If that is you, skip the rest of this and read &lt;a href="https://kunalvohra.com/blog/how-to-find-a-technical-cofounder" rel="noopener noreferrer"&gt;how to find a technical co-founder&lt;/a&gt;, then the &lt;a href="https://kunalvohra.com/blog/technical-cofounder-equity-split" rel="noopener noreferrer"&gt;technical co-founder equity split guide&lt;/a&gt; before you make anyone an offer. If you want to talk to me about a partnership, the bar I apply is on the &lt;a href="https://kunalvohra.com/technical-cofounder" rel="noopener noreferrer"&gt;technical co-founder page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For everyone else, here is the build path.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Validate before you build anything
&lt;/h2&gt;

&lt;p&gt;The cheapest MVP is the one you never had to build because twenty conversations told you nobody would pay. Building is not validating. Before you spend anything on development, get evidence: a landing page with a waitlist, a concierge version you run by hand, pre-orders, or a letter of intent from a customer who has the problem today.&lt;/p&gt;

&lt;p&gt;"Built too much too early" is a recurring cause of death in the startups I have watched fail, including some of my own, which I wrote up in &lt;a href="https://kunalvohra.com/blog/six-startups-three-continents-what-killed-them" rel="noopener noreferrer"&gt;what killed the startups I co-founded&lt;/a&gt;. A non-technical founder has one advantage here: you are not tempted to build because building is fun. Use it.&lt;/p&gt;

&lt;p&gt;What you want at the end of this step is not certainty. It is one sentence you can defend: "These specific people have this specific problem, and this is the smallest thing that would prove they will pay to solve it."&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Write an MVP scope a builder can actually price
&lt;/h2&gt;

&lt;p&gt;A good MVP scope for a non-technical founder is written in screens, roles, and flows, not in features. "Users can book appointments" can be a three-screen job or a forty-screen job; nobody can price it, and nobody can be held to the price.&lt;/p&gt;

&lt;p&gt;Write it like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Roles.&lt;/strong&gt; Who uses the product? A customer, a provider, an admin? Every extra role adds its own screens and permissions, and it is the single biggest multiplier founders miss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The core flow, screen by screen.&lt;/strong&gt; Sign up, the one action that proves the value, the one moment money changes hands. Sketch each screen on paper; a photo of a napkin is fine.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations.&lt;/strong&gt; Payments, email or SMS, maps, an AI model, a calendar. Each one is real work behind a screen that looks simple.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platforms.&lt;/strong&gt; Web only, mobile, or both. Mobile adds store submission and review.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is explicitly out.&lt;/strong&gt; The most useful line in any scope document is the list of things you are not building yet.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you want to see how these choices move the price before you talk to anyone, the &lt;a href="https://kunalvohra.com/mvp-cost-calculator" rel="noopener noreferrer"&gt;MVP cost calculator&lt;/a&gt; walks you through exactly this scoping pass (roles, platforms, complexity, integrations, design, deployment) and gives you a range on the page, no email required.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Choose who builds your MVP
&lt;/h2&gt;

&lt;p&gt;There are five realistic ways for a non-technical founder to get an MVP built in 2026, and the price differences are mostly about overhead and incentives, not quality. The question that matters is not "who is cheapest" but "whose price and whose work can I check without being technical myself?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Freelancers ($5,000 to $30,000).&lt;/strong&gt; The cheapest lane and the highest variance. A great freelancer is the best deal in software; an average one leaves you with a codebase nobody else will touch. The trouble is that a non-technical founder usually cannot tell which one they hired until it is late.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Offshore agencies ($15,000 to $50,000).&lt;/strong&gt; Fixed-scope quotes that look complete. The change requests are where the real bill lives, so a tight Step 2 scope protects you more here than anywhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;US and Western European agencies ($50,000 to $150,000+).&lt;/strong&gt; Same software, different payroll. Sometimes worth it for a funded team that needs a warranty-grade vendor; rarely the right call at pre-seed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No-code and AI-assisted builds ($500 to $10,000).&lt;/strong&gt; A real option in 2026, and I build with AI tools daily. Good for validating demand. The costs arrive later: platform lock-in, per-user pricing that scales against you, and a rebuild the moment you need something the platform did not anticipate. If you go this way, treat it as an experiment you expect to replace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Per-screen pricing with senior ownership.&lt;/strong&gt; This is how I build MVPs, with my team at Panicle Tech doing the design and engineering: every screen is counted in a scoping week and the total is the screen count times the rate, currently held at $30 a screen (standard $80) across mobile, web, desktop, and Linux. A typical build runs 8 to 12 weeks, and a screen added mid-build costs the same rate as the first one. Details are on the &lt;a href="https://kunalvohra.com/mvp-development" rel="noopener noreferrer"&gt;MVP development page&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Whichever you pick, the market numbers above are the same ones in my &lt;a href="https://kunalvohra.com/blog/mvp-development-cost" rel="noopener noreferrer"&gt;MVP development cost breakdown&lt;/a&gt;, which goes deeper on the hidden costs nobody puts in the quote.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Rent technical judgment instead of giving it away in equity
&lt;/h2&gt;

&lt;p&gt;The hardest part of building without a technical co-founder is not the code. It is the decisions: which stack, what to build properly now and what to fake until later, whether the estimate you were given is honest, and whether the person building is cutting a corner you will pay for in six months. A builder writes code; somebody senior has to own the architecture.&lt;/p&gt;

&lt;p&gt;You can rent that judgment at a fraction of a co-founder's equity:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt;&lt;/strong&gt; for a few hours a month: reviewing the scope, sanity-checking quotes, sitting in on the weekly demo, and telling you when something smells wrong. My Technical Advisor tier is $750 a month at the rate I am holding through December 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt;&lt;/strong&gt; when the build is bigger, there is more than one vendor, or you are about to hire your first engineers. My Fractional CTO retainer is $2,500 a month for 50+ hours. The full market picture, including what others charge, is on the &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;fractional CTO cost page&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason this matters: architecture mistakes made in week three become five-figure bills by month six. An MVP built without senior technical ownership is cheap only until the first rewrite.&lt;/p&gt;

&lt;p&gt;There is a side benefit nobody mentions. Working with a senior technical person for a few months is the best possible way to find out whether you want them as a co-founder. You choose after you have worked together, not before.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: Own the code, the accounts, and the IP from day one
&lt;/h2&gt;

&lt;p&gt;This is the step non-technical founders skip, and it is the one that hurts most when a build goes wrong. Before any work starts, make sure of all of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The code lives in a repository in your company's account,&lt;/strong&gt; with the builder invited as a collaborator. Not their account, shared with you later.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud, domain, app store, email, and payment accounts are in your company's name,&lt;/strong&gt; paid with your company's card. The builder gets access; you hold the keys.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP is assigned to your company in the contract,&lt;/strong&gt; from the first commit, not on final payment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handover is part of the scope:&lt;/strong&gt; a readme, how to deploy, where the secrets are kept, and what the next engineer needs to know.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Post-launch support is written down.&lt;/strong&gt; The first two weeks after launch always surface issues; mine include two weeks of support for exactly that reason. If it is not in your contract, you will pay hourly at the worst possible moment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ask every builder one question before you sign: "Who maintains this code after handover, and what will they need from you?" Watch how they answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: Run the build like a founder, not a client
&lt;/h2&gt;

&lt;p&gt;You do not need to read code to manage a build well. You need a rhythm that makes problems visible early:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A working demo every week,&lt;/strong&gt; on a staging link you can click yourself. Slides and status reports do not count.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real data early.&lt;/strong&gt; A screen that only works with "Test User 1" is not done.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;One decision log.&lt;/strong&gt; Every time scope changes, write down what changed and what it costs. This is the document that saves the relationship.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Your first five users on the staging build&lt;/strong&gt; before launch, not after.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If week four arrives and you still cannot click anything, that is the moment to bring in a second opinion, not week ten.&lt;/p&gt;

&lt;h2&gt;
  
  
  What to do after the MVP ships
&lt;/h2&gt;

&lt;p&gt;Once the MVP is live and real users are on it, you have three sensible next moves, and the right one depends on traction rather than ambition.&lt;/p&gt;

&lt;p&gt;If users are not sticking, go back to Step 1; more engineering will not fix a demand problem. If users are sticking and the roadmap is growing, a fractional CTO or an &lt;a href="https://kunalvohra.com/interim-cto" rel="noopener noreferrer"&gt;interim CTO&lt;/a&gt; gives you senior leadership while you hire your first engineers. And if the company is funded with a real roadmap and a team past six to eight engineers, that is when a full-time CTO hire starts to make sense, which I cover in &lt;a href="https://kunalvohra.com/blog/how-to-hire-a-cto-for-your-startup" rel="noopener noreferrer"&gt;how to hire a CTO for your startup&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Notice that "find a technical co-founder" can still appear on that list. It just appears after there is a product, users, and evidence, which is exactly when good technical people are most willing to say yes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Mistakes non-technical founders make building an MVP
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Paying in equity for a build.&lt;/strong&gt; Equity buys a partner. If you need a product built, pay for the product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hiring the cheapest quote with no one senior checking it.&lt;/strong&gt; The cheap build and the expensive rewrite are often the same invoice, spread over a year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Letting the builder own the accounts.&lt;/strong&gt; It is not malicious most of the time. It is still how founders end up unable to deploy their own product.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scoping in features instead of screens.&lt;/strong&gt; If the scope cannot be counted, the price cannot be held.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Building the version-two product as the MVP.&lt;/strong&gt; The admin panel, the analytics dashboard, and the referral system can almost always wait.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can a non-technical founder build an MVP?&lt;/strong&gt; Yes. Most well-understood products (marketplaces, booking tools, dashboards, mobile apps over an API) do not need a technical co-founder to reach an MVP. They need a clear scope, a builder whose price you can check, senior technical oversight, and clean ownership of the code and accounts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost to build an MVP without a technical co-founder?&lt;/strong&gt; In 2026 the market range runs from about $500 to $10,000 for no-code and AI-assisted builds, $5,000 to $30,000 for freelancers, $15,000 to $50,000 for offshore agencies, and $50,000 to $150,000 or more for US and Western European agencies. Per-screen pricing lets you compute the total from your screen count before anything is built; the &lt;a href="https://kunalvohra.com/mvp-cost-calculator" rel="noopener noreferrer"&gt;MVP cost calculator&lt;/a&gt; gives a range for your own scope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I give a developer equity to build my MVP?&lt;/strong&gt; Usually not. Equity is the most expensive way to pay for a build, and it turns a vendor relationship into a partnership you may not want. Offer equity to someone who will own the technology long term, and only after you have worked together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do investors care if I do not have a technical co-founder?&lt;/strong&gt; Some do, especially for deep-tech and AI-native companies where the technology is the moat. For most products, investors care more about traction and whether someone credible owns the technical decisions, which a fractional CTO or technical advisor can cover until you hire.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I build an MVP with no-code or AI tools instead?&lt;/strong&gt; For validating demand, often yes. Plan for the limits: platform lock-in, pricing that grows with your users, and a likely rebuild once you need something the platform does not support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to build an MVP?&lt;/strong&gt; A real MVP with senior ownership typically takes 8 to 12 weeks. Halving that usually means doubling the team, which more than doubles the cost, so be wary of anyone promising a full product in three weeks.&lt;/p&gt;

&lt;p&gt;If you are a non-technical founder with an idea and no technical partner, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt;. Tell me what you are building and I will give you a straight read on whether you need a co-founder at all, what the MVP should cost, and whether the right next step is a build, a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt;, or twenty more customer conversations first. You can also reach me through the &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;contact page&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>career</category>
      <category>leadership</category>
      <category>entrepreneurship</category>
    </item>
    <item>
      <title>Startup CTO Salary and Equity in 2026: What a CTO Actually Gets Paid, by Stage</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Mon, 05 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/startup-cto-salary-and-equity-in-2026-what-a-cto-actually-gets-paid-by-stage-2cbf</link>
      <guid>https://dev.to/kunalvohra/startup-cto-salary-and-equity-in-2026-what-a-cto-actually-gets-paid-by-stage-2cbf</guid>
      <description>&lt;p&gt;A startup CTO salary in 2026, for a full-time CTO hired at seed to Series A in the US, typically lands between $180,000 and $260,000, plus 1 to 4 percent equity vesting over four years with a one-year cliff. Earlier stage and a lower salary push the equity up; later stage and a market salary push it down. A technical co-founder is paid almost entirely in equity, and a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; is paid in cash with no equity by default.&lt;/p&gt;

&lt;p&gt;That is the short answer. The rest of this piece is about where inside those ranges a specific person should land, because the range is wide for a reason and most of the bad offers I have seen come from founders picking a number without knowing which inputs move it.&lt;/p&gt;

&lt;p&gt;I have sat on both sides of this table. I have been the technical co-founder six times, I have been hired as a fractional and interim CTO, and I have helped founders write offers for the CTO who would eventually replace me. This is the compensation conversation as I would have it with you on a call.&lt;/p&gt;

&lt;h2&gt;
  
  
  Startup CTO compensation at a glance
&lt;/h2&gt;

&lt;p&gt;Startup CTO compensation is a trade between cash and ownership, and the exchange rate is set by risk. The earlier someone joins and the less salary they take, the more equity they are owed for carrying the difference. Here is the shape across the four roles people call "CTO", US market, mid-2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Technical co-founder, pre-product and pre-funding.&lt;/strong&gt; Little or no salary; equity measured in tens of percent of the founder pool. This is a partnership, not a hire, and the &lt;a href="https://kunalvohra.com/blog/technical-cofounder-equity-split" rel="noopener noreferrer"&gt;technical co-founder equity split guide&lt;/a&gt; covers it in full.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-time CTO hired at seed to Series A.&lt;/strong&gt; Salary typically $180,000 to $260,000 depending on city and how far below market the person is taking, plus 1 to 4 percent equity, four-year vest, one-year cliff.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-time CTO hired at Series B or later.&lt;/strong&gt; Market salary, equity usually under 1 percent, negotiated against the last round's valuation rather than as a headline percentage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fractional CTO.&lt;/strong&gt; A monthly retainer, typically $4,000 to $15,000 across the market for two to three days a week, with hourly rates between $150 and $350. No equity by default.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The quotable version: a 2 percent grant at a $20 million valuation is a $400,000 claim on paper, more than a year and a half of a fully loaded $260,000 CTO. Equity is never the free part of the offer.&lt;/p&gt;

&lt;h2&gt;
  
  
  What moves a startup CTO salary inside the range
&lt;/h2&gt;

&lt;p&gt;The salary number is decided by four inputs, and founders usually only look at the first one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Location and market.&lt;/strong&gt; A CTO in a high-cost US hub sits at the top of the range; a remote hire, or one outside the big hubs, sits lower. This is the input everyone already knows, and it explains less of the spread than people assume.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. How much below market the person is choosing to take.&lt;/strong&gt; This is the real lever. A strong candidate who wants more upside will accept $180,000 against a market value well above it, and they will expect the gap to come back as equity. A candidate who needs the full number is telling you they are pricing the role as a job, which is fine, but the equity should then sit at the low end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Runway.&lt;/strong&gt; A $260,000 fully loaded CTO out of a $1.5 million seed round is a large share of the money you raised to reach your next milestone. I have watched founders hire the right person at the wrong salary and spend the next year shortening their own runway. If your runway cannot carry the salary, that is a signal about timing, not about how hard to negotiate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Hands on the keyboard or not.&lt;/strong&gt; With fewer than six engineers, a CTO who writes code is doing two jobs. A CTO who manages and does not build, at that team size, is a manager without enough people to manage, and the salary is buying less than it looks like.&lt;/p&gt;

&lt;p&gt;One practical note: compare fully loaded cost, not base. A $200,000 base is roughly $260,000 once payroll taxes, benefits, equipment, and software are in, and that is the number your runway actually feels.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much equity should a CTO get?
&lt;/h2&gt;

&lt;p&gt;How much equity a CTO should get depends almost entirely on when they join relative to the money. Before funding, they are a founder and the numbers are in the tens of percent. After funding, they are an executive hire and the numbers are in low single digits. The mistake is mixing the two: asking a post-funding hire to accept co-founder risk, or offering a post-funding hire co-founder equity.&lt;/p&gt;

&lt;p&gt;Rough bands I use as a sanity check:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Joins before any funding, builds the product from nothing.&lt;/strong&gt; Co-founder territory. At the idea stage, 40 to 50 percent of the founder pool is defensible; with a prototype or revenue already on the table, lower. The full reasoning is in the &lt;a href="https://kunalvohra.com/blog/technical-cofounder-equity-split" rel="noopener noreferrer"&gt;equity split post&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Joins at or just after a pre-seed or seed round, below-market salary.&lt;/strong&gt; The top of the hired-CTO band, around 3 to 4 percent, sometimes more if the salary discount is steep and the role is genuinely founding-team in practice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Joins at seed to Series A, near-market salary.&lt;/strong&gt; 1 to 2 percent is common.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Joins at Series B or later.&lt;/strong&gt; Usually under 1 percent, and the conversation shifts from percentages to the dollar value of the grant at the last valuation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Three adjustments sit on top of those bands. Equity should go up if the technology is the moat (novel AI systems, security-critical infrastructure, anything where the person solving it is the reason the company can exist). It should go up if the person is taking a real salary cut. And it should go down if the role is closer to "lead the team that builds a well-understood product" than to "invent the product".&lt;/p&gt;

&lt;p&gt;For comparison, so you can see where the CTO sits in the cap table: a first engineer typically gets 0.5 to 2 percent with a salary, and an advisor typically gets 0.25 to 1 percent vesting over two years.&lt;/p&gt;

&lt;h2&gt;
  
  
  Startup CTO equity vs salary: how to trade one for the other
&lt;/h2&gt;

&lt;p&gt;The startup CTO equity vs salary trade works best when you make it explicit. Instead of one offer, give the candidate two or three: a higher salary with less equity, and a lower salary with more. Their choice tells you how they are thinking about the company, which is information you want before they join.&lt;/p&gt;

&lt;p&gt;The mechanics I recommend:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Anchor the cash at what your runway can carry,&lt;/strong&gt; not at the candidate's market value. If those two numbers are far apart, the equity has to bridge the gap, or the hire is premature.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price the gap honestly.&lt;/strong&gt; If someone is taking $60,000 a year below market, four years of that is a quarter of a million dollars of their money invested in your company. The equity should reflect that they are, in effect, an investor as well as an executive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Do not let equity substitute for a salary the person cannot live on.&lt;/strong&gt; A CTO who is financially stressed makes short-term decisions. Below-market is fine; below-livable is a retention problem with a delay on it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Revisit at the next round.&lt;/strong&gt; A CTO who took a steep discount at seed should see their cash move toward market once the company can afford it. Agree that in writing at the start so it is a plan rather than a renegotiation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Vesting, cliffs, and the terms that matter more than the number
&lt;/h2&gt;

&lt;p&gt;Vesting matters more than the percentage, and founders discover this late. The standard is four years with a one-year cliff: nothing vests for twelve months, then monthly after that. It applies to every CTO, including a co-founder, including someone you have known for a decade.&lt;/p&gt;

&lt;p&gt;The terms I would always look at alongside the headline grant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The cliff.&lt;/strong&gt; It is what makes a generous grant safe to offer. If the hire does not work out in month five, nobody walks away with a slice of the company.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acceleration on a change of control.&lt;/strong&gt; Common for senior hires, especially double-trigger (an acquisition plus losing the role). It is a reasonable ask from a CTO and a reasonable thing to grant.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The exercise window.&lt;/strong&gt; If the person leaves, how long do they have to buy their vested options? A short window can make vested equity worthless to someone who cannot afford the exercise cost on short notice. Get a lawyer to explain your plan's terms before you make the offer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Refresh grants.&lt;/strong&gt; A CTO who joined at seed with 2 percent will be diluted by every round. Plan for refreshes as the company grows, or expect the conversation to come to you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this replaces proper legal advice, and I am not a lawyer. But a founder who understands these terms will write a better offer than one who only negotiates the percentage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fractional CTO equity: when it makes sense
&lt;/h2&gt;

&lt;p&gt;Fractional CTO equity is the exception rather than the rule. A fractional CTO is paid a monthly retainer for a defined amount of time, and the default is cash with no dilution, which is a large part of why the model works for funded companies with three to eight engineers.&lt;/p&gt;

&lt;p&gt;Equity enters when a founder is cash-constrained but wants senior technical leadership committed for longer than a month-to-month invoice implies. In my own engagements I offer this as a cash and equity mix on any retainer, from a small equity component up to roughly half and half, negotiated on stage, runway, and how long we expect to work together, with standard vesting and a cliff, documented before we start.&lt;/p&gt;

&lt;p&gt;The rule I give founders: never trade equity for a discount on a fractional retainer unless you expect the person to still be around in four years. Equity is the most expensive currency you have, and a retainer is the cheapest. If the relationship is a six-month bridge, pay cash.&lt;/p&gt;

&lt;p&gt;For reference, my own retainers are &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;published&lt;/a&gt;: $750 a month for a &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt;, $2,500 for a fractional CTO, and $4,000 for an embedded CTO, sized from a held rate of $50 an hour (my standard is $100) through December 2026. The full side-by-side against a full-time hire is on the &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;cost and rates guide&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three compensation mistakes I see most
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Co-founder terms for a hired CTO.&lt;/strong&gt; The company has raised, there is a team, and the founder offers a below-market salary while calling the role "co-founding" to justify it. Experienced engineers recognise this immediately, and the ones who accept it are often the ones who cannot tell the difference.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hiring the full-time salary too early.&lt;/strong&gt; A $260,000 CTO for a product that does not exist yet, or a team of two, burns runway on leadership the company cannot use. The person usually starts a rewrite or a platform project to justify the seniority. Below three engineers, a &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; or fractional CTO covers it; past eight engineers and a funded roadmap, a full-time hire becomes the right call. The &lt;a href="https://kunalvohra.com/blog/fractional-cto-vs-full-time-cto" rel="noopener noreferrer"&gt;fractional versus full-time comparison&lt;/a&gt; walks through that line.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No vesting, or vesting only for the CTO.&lt;/strong&gt; Every founder vests, including the majority holder. A fair grant without a cliff is worse than an aggressive grant with one.&lt;/p&gt;

&lt;h2&gt;
  
  
  When the right answer is not a CTO salary at all
&lt;/h2&gt;

&lt;p&gt;Sometimes the honest answer to "what should I pay my CTO" is that you should not be hiring one yet. If there is no product, you need the product built, which is a build problem with a known cost rather than a leadership hire. I build MVPs through &lt;a href="https://kunalvohra.com/mvp-development" rel="noopener noreferrer"&gt;MVP development&lt;/a&gt; priced per screen, and the &lt;a href="https://kunalvohra.com/mvp-cost-calculator" rel="noopener noreferrer"&gt;MVP cost calculator&lt;/a&gt; gives you a range before you talk to anyone.&lt;/p&gt;

&lt;p&gt;If there is a product and a small team but leadership is not yet a full-time job, a fractional or &lt;a href="https://kunalvohra.com/interim-cto" rel="noopener noreferrer"&gt;interim CTO&lt;/a&gt; gives you the seniority without the salary or the equity. Many founders use that period to define the full-time role properly and hire for it, which is covered step by step in &lt;a href="https://kunalvohra.com/blog/how-to-hire-a-cto-for-your-startup" rel="noopener noreferrer"&gt;how to hire a CTO for your startup&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is the average startup CTO salary in 2026?&lt;/strong&gt; For a full-time CTO hired at seed to Series A in the US, salaries typically fall between $180,000 and $260,000, depending on location and how far below market the person is taking in exchange for equity. Fully loaded with taxes and benefits, a $200,000 base costs the company roughly $260,000 a year.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much equity should a CTO get at a startup?&lt;/strong&gt; A full-time CTO joining after funding typically gets 1 to 4 percent, vesting over four years with a one-year cliff, with the higher end for earlier stages and below-market salaries. At Series B and later it is usually under 1 percent. A technical co-founder who joins before any funding is in a different band entirely, measured in tens of percent of the founder pool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should a startup CTO take more equity or more salary?&lt;/strong&gt; It depends on how much risk they can carry and how much they believe in the company. The cleanest way to decide is for the founder to offer two packages, one cash-heavy and one equity-heavy, and let the candidate choose. Nobody should take a salary they cannot live on in exchange for equity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does a fractional CTO get equity?&lt;/strong&gt; Not by default; a fractional CTO is paid a monthly retainer in cash. A cash and equity mix is possible when a founder is cash-constrained and expects a long relationship, and it should carry the same vesting and cliff as any other grant.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What vesting schedule is standard for a CTO?&lt;/strong&gt; Four years with a one-year cliff, then monthly vesting. Senior hires often negotiate double-trigger acceleration on an acquisition. It applies to co-founders as well as hires.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is technical co-founder equity different from CTO equity?&lt;/strong&gt; Yes. A technical co-founder joins before the money and shares the founding risk, so they hold a large share of the founder pool. A hired CTO joins after there is a company and is paid mostly in cash, with a small grant to align incentives. The &lt;a href="https://kunalvohra.com/blog/technical-cofounder-equity-split" rel="noopener noreferrer"&gt;equity split guide&lt;/a&gt; covers the co-founder side.&lt;/p&gt;

&lt;p&gt;If you are writing a CTO offer right now, or wondering whether you should be, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt; and tell me where the company is. I will give you a straight read on the salary, the equity, and whether the right shape is a full-time hire, a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt;, or neither yet. You can also reach me through the &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;contact page&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>career</category>
      <category>leadership</category>
      <category>entrepreneurship</category>
    </item>
    <item>
      <title>How to Run AirLLM on a Mac (Apple Silicon): A Step-by-Step Setup Guide From an AI CTO</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Mon, 05 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/how-to-run-airllm-on-a-mac-apple-silicon-a-step-by-step-setup-guide-from-an-ai-cto-5ame</link>
      <guid>https://dev.to/kunalvohra/how-to-run-airllm-on-a-mac-apple-silicon-a-step-by-step-setup-guide-from-an-ai-cto-5ame</guid>
      <description>&lt;p&gt;To run AirLLM on a Mac, install AirLLM 2.11.0 with Apple's MLX in a Python virtual environment, download a Llama model to a drive with plenty of free space, and run it through a short wrapper script that fixes four Apple Silicon bugs. It works on any M-series Mac, including a base 16GB Mac mini. It is also slow, so read the speed section before you download 141GB of weights.&lt;/p&gt;

&lt;p&gt;I am a fractional CTO for AI-first startups, and "can we just run the model ourselves?" comes up in almost every engagement. Last week I &lt;a href="https://kunalvohra.com/blog/airllm-on-a-16gb-mac-mini" rel="noopener noreferrer"&gt;tested AirLLM on a 16GB M4 Mac mini&lt;/a&gt; and published the timings. This post is the setup behind those numbers, so you can reproduce it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The short version:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install exact versions: airllm 2.11.0, mlx 0.29.3, transformers 4.46.3, torch 2.8.0, sentencepiece.&lt;/li&gt;
&lt;li&gt;Download an ungated Llama 3.1 copy to your fastest drive with the most free space.&lt;/li&gt;
&lt;li&gt;Run it through the wrapper script below. It fixes two crashes, one garbled-output bug and one display bug.&lt;/li&gt;
&lt;li&gt;Expect about 20 seconds per token for an 8B model and 2.5 to 3 minutes per token for 70B.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26auto%3Dformat%26fit%3Dcrop" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1517694712202-14dd9538aa97%3Fw%3D1200%26auto%3Dformat%26fit%3Dcrop" alt="A MacBook on a desk with code on the screen"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What you need before you start
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;An Apple Silicon Mac on macOS 14 or newer, Python 3.9 or newer, and free disk space of about twice the model's size.&lt;/strong&gt; Memory matters far less than you would expect. Disk space and disk speed matter far more.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A Mac with an M-series chip.&lt;/strong&gt; AirLLM's Mac code runs on Apple's MLX framework, which only supports Apple Silicon. My machine was a base M4 Mac mini with 16GB of memory.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;macOS 14 (Sonoma) or newer.&lt;/strong&gt; The MLX version below only ships for macOS 14 and up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Python 3.9 or newer.&lt;/strong&gt; I used the Python 3.9 that comes with Apple's Command Line Tools. If &lt;code&gt;python3 --version&lt;/code&gt; fails, run &lt;code&gt;xcode-select --install&lt;/code&gt; first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disk space of about 2x the model.&lt;/strong&gt; AirLLM keeps the download plus a second copy split into one file per layer. Llama 3.1 8B needs about 16GB twice, so 32GB. Llama 3.1 70B needs about 141GB twice, so plan for 300GB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ideally, a fast external SSD.&lt;/strong&gt; My internal disk had only about 35GB free, so the models lived on a 2TB Crucial X9 over USB, rated at about 1GB/s. That drive's speed sets the model's speed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 1: Install AirLLM and the pinned versions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Create a virtual environment and install these exact versions; they are the ones from my working run.&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python3 &lt;span class="nt"&gt;-m&lt;/span&gt; venv ~/airllm-env
&lt;span class="nb"&gt;source&lt;/span&gt; ~/airllm-env/bin/activate
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--upgrade&lt;/span&gt; pip
pip &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="s2"&gt;"airllm==2.11.0"&lt;/span&gt; &lt;span class="s2"&gt;"mlx==0.29.3"&lt;/span&gt; &lt;span class="s2"&gt;"transformers==4.46.3"&lt;/span&gt; &lt;span class="s2"&gt;"torch==2.8.0"&lt;/span&gt; sentencepiece

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Why these packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mlx and sentencepiece are not declared dependencies of AirLLM 2.11.0,&lt;/strong&gt; but its Mac code imports both. Without them, it fails at import.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pin airllm to 2.11.0.&lt;/strong&gt; AirLLM 3.x and 4.0 came out between June and September 2026 and need Transformers 4.49 or newer. I have not tested them on a Mac. I checked the 4.0.0 Mac code, and the rope_theta bug from fix 3 below is still there, so the fixes likely still apply. Get one working run on 2.11.0 first, then experiment.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 2: Download a model to your external SSD
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Download only the safetensors weights and the config and tokenizer files, into a folder on the drive with the most free space.&lt;/strong&gt; Start with TinyLlama so you can test the whole pipeline in minutes.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Smoke test: about 2GB, single-file model&lt;/span&gt;
hf download TinyLlama/TinyLlama-1.1B-Chat-v1.0 &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--include&lt;/span&gt; &lt;span class="s2"&gt;"*.safetensors"&lt;/span&gt; &lt;span class="s2"&gt;"*.json"&lt;/span&gt; &lt;span class="s2"&gt;"*.model"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--local-dir&lt;/span&gt; /Volumes/YourSSD/models/tinyllama-1.1b-chat

&lt;span class="c"&gt;# The real test: about 16GB&lt;/span&gt;
hf download unsloth/Meta-Llama-3.1-8B-Instruct &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--include&lt;/span&gt; &lt;span class="s2"&gt;"*.safetensors"&lt;/span&gt; &lt;span class="s2"&gt;"*.json"&lt;/span&gt; &lt;span class="s2"&gt;"*.model"&lt;/span&gt; &lt;span class="se"&gt;\&lt;/span&gt;
  &lt;span class="nt"&gt;--local-dir&lt;/span&gt; /Volumes/YourSSD/models/llama-3.1-8b-instruct

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A few notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Replace /Volumes/YourSSD&lt;/strong&gt; with your own drive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I used Unsloth's copy of Llama 3.1, not Meta's.&lt;/strong&gt; It holds the same weights and does not need an approval, so no Hugging Face login. Meta's licence still applies. To use Meta's gated repo (&lt;code&gt;meta-llama/Llama-3.1-8B-Instruct&lt;/code&gt;) instead, accept the licence on its Hugging Face page, wait for approval, and run &lt;code&gt;hf auth login&lt;/code&gt; first.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;&lt;code&gt;hf&lt;/code&gt; comes with the install above.&lt;/strong&gt; On older setups the same command is &lt;code&gt;huggingface-cli download&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The include filter matters.&lt;/strong&gt; It skips extra files, such as Meta's original checkpoint, that would double the download.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget time.&lt;/strong&gt; I saw about 26MB/s from Hugging Face. A 70B download takes over an hour on its own.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Step 3: Understand the four Apple Silicon fixes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AirLLM 2.11.0 runs on a Mac, but out of the box it has two crashes, one silent bug that garbles Llama 3 output, and one display problem.&lt;/strong&gt; The wrapper script in step 4 fixes all four at runtime, so a reinstall never undoes them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix 1: Create the missing index file
&lt;/h3&gt;

&lt;p&gt;AirLLM only loads models that come with a &lt;code&gt;model.safetensors.index.json&lt;/code&gt; file. Single-file models like TinyLlama do not have one, so AirLLM fails. The script builds the index from the tensor names in the file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix 2: Create the layer folder first
&lt;/h3&gt;

&lt;p&gt;AirLLM checks free disk space on the layer folder before it creates that folder. If the folder is new, it crashes with "No such file or directory". The script creates the folder first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix 3: Use Llama 3's real rope_theta
&lt;/h3&gt;

&lt;p&gt;This is the important one. AirLLM's Mac code never reads rope_theta (the base for position encoding) from the model config, so it falls back to 10,000. Llama 3.x uses 500,000. Nothing crashes; the model just writes confident nonsense. The script copies the right value from the config.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fix 4: Stop at the end of the answer
&lt;/h3&gt;

&lt;p&gt;Generation never stops on its own. It always runs to the token limit, so the answer is followed by junk. The script cuts the output at the end-of-answer marker.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Save and run the wrapper script
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Save this as airllm_mac.py. It applies the four fixes, runs one prompt, and prints the timing.&lt;/strong&gt; It leaves the installed library untouched.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# airllm_mac.py: run AirLLM 2.11.0 on Apple Silicon with four fixes
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;pathlib&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;Path&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;mlx.core&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;mx&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;safetensors&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;safe_open&lt;/span&gt;

&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;airllm.airllm_llama_mlx&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;airllm_mlx&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;airllm&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;AutoModel&lt;/span&gt;

&lt;span class="n"&gt;MODEL_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;# folder you downloaded the model into
&lt;/span&gt;&lt;span class="n"&gt;LAYER_DIR&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nc"&gt;Path&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="c1"&gt;# folder for AirLLM's per-layer files
&lt;/span&gt;&lt;span class="n"&gt;PROMPT&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="nf"&gt;len&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sys&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;argv&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="k"&gt;else&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;What is the capital of France? Answer in one sentence.&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;MAX_NEW_TOKENS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="mi"&gt;20&lt;/span&gt;

&lt;span class="c1"&gt;# Fix 1: single-file models need a generated index file
&lt;/span&gt;&lt;span class="n"&gt;index_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MODEL_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model.safetensors.index.json&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="n"&gt;single_file&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;MODEL_DIR&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model.safetensors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="ow"&gt;not&lt;/span&gt; &lt;span class="n"&gt;index_file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="ow"&gt;and&lt;/span&gt; &lt;span class="n"&gt;single_file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;exists&lt;/span&gt;&lt;span class="p"&gt;():&lt;/span&gt;
    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;safe_open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;single_file&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;framework&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;pt&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;weight_map&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="n"&gt;name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;model.safetensors&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;name&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;keys&lt;/span&gt;&lt;span class="p"&gt;()}&lt;/span&gt;
    &lt;span class="n"&gt;index_file&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;write_text&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dumps&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;metadata&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{},&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;weight_map&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;weight_map&lt;/span&gt;&lt;span class="p"&gt;}))&lt;/span&gt;

&lt;span class="c1"&gt;# Fix 2: the layer folder must exist before the free-space check
&lt;/span&gt;&lt;span class="n"&gt;LAYER_DIR&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;parents&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;exist_ok&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Fix 3: use the model's own rope_theta (500000 for Llama 3.x)
&lt;/span&gt;&lt;span class="n"&gt;_original_args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;airllm_mlx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_model_args_from_config&lt;/span&gt;

&lt;span class="k"&gt;def&lt;/span&gt; &lt;span class="nf"&gt;args_with_rope_theta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;_original_args&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="n"&gt;args&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;rope_theta&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;float&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;getattr&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;config&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;rope_theta&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="bp"&gt;None&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="ow"&gt;or&lt;/span&gt; &lt;span class="mi"&gt;10000&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;args&lt;/span&gt;

&lt;span class="n"&gt;airllm_mlx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;get_model_args_from_config&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;args_with_rope_theta&lt;/span&gt;

&lt;span class="n"&gt;model&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;AutoModel&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;from_pretrained&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;MODEL_DIR&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;layer_shards_saving_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nf"&gt;str&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;LAYER_DIR&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;span class="n"&gt;tokenizer&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;tokenizer&lt;/span&gt;

&lt;span class="n"&gt;messages&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;role&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;user&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;content&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;PROMPT&lt;/span&gt;&lt;span class="p"&gt;}]&lt;/span&gt;
&lt;span class="n"&gt;text&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;apply_chat_template&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;messages&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;tokenize&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;add_generation_prompt&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;True&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;input_ids&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;text&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;return_tensors&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;np&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;add_special_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="bp"&gt;False&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;input_ids&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="n"&gt;start&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
&lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;model&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;generate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;mx&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;array&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;input_ids&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="n"&gt;max_new_tokens&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;MAX_NEW_TOKENS&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;time&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;time&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="n"&gt;start&lt;/span&gt;

&lt;span class="c1"&gt;# Fix 4: cut the output at the end-of-answer marker
&lt;/span&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;tokenizer&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;eos_token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;|eot_id|&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="s"&gt;&amp;lt;|end_of_text|&amp;gt;&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
    &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;output&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;split&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;stop&lt;/span&gt;&lt;span class="p"&gt;)[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;output&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;strip&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt;
&lt;span class="nf"&gt;print&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;MAX_NEW_TOKENS&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; tokens in &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="mi"&gt;60&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; min, &lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;elapsed&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="n"&gt;MAX_NEW_TOKENS&lt;/span&gt;&lt;span class="si"&gt;:&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt; s per token&lt;/span&gt;&lt;span class="sh"&gt;"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the smoke test first, then the real model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;python airllm_mac.py /Volumes/YourSSD/models/tinyllama-1.1b-chat /Volumes/YourSSD/airllm-layers/tinyllama
python airllm_mac.py /Volumes/YourSSD/models/llama-3.1-8b-instruct /Volumes/YourSSD/airllm-layers/llama-8b

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The first run of each model splits it into per-layer files before it generates anything. For the 8B model that took 43 seconds for 35 pieces. Later runs reuse those files and start generating straight away.&lt;/p&gt;

&lt;p&gt;If it works, both models answer "The capital of France is Paris."&lt;/p&gt;

&lt;h2&gt;
  
  
  What speed to expect
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;About 1 second per token for a 1B model, about 20 seconds per token for 8B, and 2.5 to 3 minutes per token for 70B, on a drive that reads at about 1GB/s.&lt;/strong&gt; AirLLM reads every layer from disk for every token, so the disk sets the pace, not the chip.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Seconds per token is roughly the model's size divided by your disk's read speed. On my Mac mini, Llama 3.1 8B read about 16GB per token at an effective 0.8GB/s: 19.6 seconds per token.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;My measured numbers, with the prompt "What is the capital of France? Answer in one sentence." and 20 new tokens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;TinyLlama 1.1B: about 1 second per token.&lt;/strong&gt; The model is small enough that macOS kept it in its file cache.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama 3.1 8B: 19.6 seconds per token.&lt;/strong&gt; 6.5 minutes for 20 tokens, with the correct answer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Llama 3.1 70B: projected at 140 to 180 seconds per token.&lt;/strong&gt; That is around 30 minutes for one sentence. I did not run it; the 8B numbers make the math clear.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The only lever that moves these numbers much is disk speed. A Thunderbolt or USB4 NVMe drive at about 3GB/s should roughly triple the speed of the USB drive I used. The full breakdown is in my &lt;a href="https://kunalvohra.com/blog/airllm-on-a-16gb-mac-mini" rel="noopener noreferrer"&gt;AirLLM test results&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Troubleshooting: common AirLLM errors on a Mac
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Almost every failure maps to one of the four fixes, a missing package, or disk space.&lt;/strong&gt; Find your error message below.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Found local directory … but didn't find downloaded model", then "HFValidationError: Repo id must be in the form…"&lt;/strong&gt; Your model folder has no index file, so AirLLM treats the folder path as a Hugging Face repo name. Fix 1 creates the index. Also check that the path points at the folder that holds the .safetensors file.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"model.safetensors.index.json should exist."&lt;/strong&gt; Same cause, but you passed a Hugging Face repo name instead of a local folder. Download the model yourself (step 2) and pass the folder.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"No such file or directory" while loading.&lt;/strong&gt; The layer folder does not exist yet. Fix 2 creates it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fluent but wrong or garbled output from a Llama 3 model.&lt;/strong&gt; The rope_theta bug. Make sure fix 3 runs before &lt;code&gt;AutoModel.from_pretrained&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The right answer followed by repeated or unrelated text.&lt;/strong&gt; Generation ran to the token limit. Fix 4 trims it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;NotEnoughSpaceException.&lt;/strong&gt; The layer folder's drive has less free space than the model. Free some space or point the layer folder at a bigger drive.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"No module named sentencepiece" or "No module named mlx".&lt;/strong&gt; Install them into the same virtual environment you run the script from.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;pip pulls in AirLLM 3.x or 4.x.&lt;/strong&gt; You installed without the version pin. Reinstall with &lt;code&gt;"airllm==2.11.0"&lt;/code&gt; and &lt;code&gt;"transformers==4.46.3"&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An assertion about bitsandbytes when you pass compression="4bit".&lt;/strong&gt; AirLLM's 4-bit and 8-bit options need bitsandbytes, which needs an NVIDIA GPU. On a Mac you run full-precision layers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A 401 or 403 error while downloading.&lt;/strong&gt; You are using Meta's gated repo. Accept the licence, wait for approval and log in, or use the Unsloth copy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Errors with Qwen, Mistral or other non-Llama models.&lt;/strong&gt; On a Mac, AirLLM 2.11.0 sends every model through its Llama code, whatever the architecture. Stick to Llama-architecture models.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One gap remains after all four fixes: Llama 3.1's long-context scaling is not implemented in the Mac code. Short prompts are fine; very long ones may degrade.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should you run AirLLM on a Mac at all?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Only when you need a model that does not fit in memory and you can wait minutes per word. For anything that fits, Ollama or LM Studio is hundreds of times faster.&lt;/strong&gt; On the same 16GB Mac mini, an 8B model at 4-bit through Ollama runs at roughly 25 to 30 tokens per second, based on published reviews of similar machines.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Good uses:&lt;/strong&gt; overnight batch jobs with a large model, and checking a large model's quality on your own prompts before you pay for hardware or API capacity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bad uses:&lt;/strong&gt; anything interactive. Chat, coding assistants and agents need tokens per second, not seconds per token.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That decision (local model or API, which model, on what hardware, at what monthly cost) is one I make with founders regularly as a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt;. If your team needs a second opinion on model hosting without a full retainer, a &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; engagement or &lt;a href="https://kunalvohra.com/cto-as-a-service" rel="noopener noreferrer"&gt;CTO as a service&lt;/a&gt; covers it. If your startup is deciding who should own AI decisions at all, read &lt;a href="https://kunalvohra.com/blog/fractional-ai-officer" rel="noopener noreferrer"&gt;what a fractional AI officer does&lt;/a&gt;, and if you are raising, my notes on &lt;a href="https://kunalvohra.com/blog/ai-startup-technical-due-diligence" rel="noopener noreferrer"&gt;AI startup technical due diligence&lt;/a&gt; cover the hosting questions investors ask.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Does AirLLM work on Apple Silicon?&lt;/strong&gt; Yes. On a Mac, AirLLM runs each layer on the GPU through Apple's MLX framework. Version 2.11.0 needs four fixes, including one without which Llama 3 models produce garbled output. All four fit in a small wrapper script.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do I install AirLLM on a Mac?&lt;/strong&gt; Create a Python virtual environment and pip install airllm 2.11.0, mlx, transformers 4.46.3, torch and sentencepiece. MLX and sentencepiece are not declared dependencies of AirLLM 2.11.0 but are required on a Mac.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should I use the newest AirLLM version?&lt;/strong&gt; Not for your first run. AirLLM 3.x and 4.0 were released in 2026 and need newer Transformers. I have not tested them on a Mac, and the 4.0.0 Mac code still has the rope_theta bug. Start with 2.11.0, which is tested here.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I run a 70B model on a 16GB Mac with AirLLM?&lt;/strong&gt; Yes, if you have about 300GB of free disk. Expect around 2.5 to 3 minutes per token on a 1GB/s external SSD, which means roughly half an hour for a one-sentence answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can I use 4-bit compression with AirLLM on a Mac?&lt;/strong&gt; No. AirLLM's compression depends on bitsandbytes, which needs an NVIDIA GPU. On a Mac it runs full-precision layers, which is part of why it is slow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which models work with AirLLM on a Mac?&lt;/strong&gt; Llama-architecture models in safetensors format, such as Llama 3.1 and TinyLlama. On a Mac, AirLLM 2.11.0 routes every model through its Llama code, so other architectures are likely to fail.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is AirLLM faster than Ollama on a Mac?&lt;/strong&gt; No. For any model that fits in memory, Ollama is hundreds of times faster, because it keeps 4-bit weights in memory instead of reading full-precision weights from disk for every token.&lt;/p&gt;

&lt;p&gt;If you are weighing self-hosted models against an API for your product, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt; and walk me through the workload. I will tell you what I would run, where, and what it should cost. You can also &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt; if you prefer to start by email.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
      <category>startup</category>
    </item>
    <item>
      <title>I Tested AirLLM on a 16GB Mac Mini. Here's What "Runs a 70B Model on 4GB" Really Costs</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Fri, 02 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/i-tested-airllm-on-a-16gb-mac-mini-heres-what-runs-a-70b-model-on-4gb-really-costs-427b</link>
      <guid>https://dev.to/kunalvohra/i-tested-airllm-on-a-16gb-mac-mini-heres-what-runs-a-70b-model-on-4gb-really-costs-427b</guid>
      <description>&lt;p&gt;Every few months someone sends me the same link with the same question: "Is it true this runs a 70B model on a 4GB machine?" The link is AirLLM, an open-source Python library that claims to run very large language models on a GPU with as little as 4GB of memory. The question usually comes from a founder trying to decide whether they can stop paying for an LLM API and run a model on their own hardware.&lt;/p&gt;

&lt;p&gt;So I tested it properly. One base Mac mini, one external SSD, three model sizes, and a stopwatch on every token.&lt;/p&gt;

&lt;p&gt;The short answer: the claim is true, and it is misleading. AirLLM really does run models far bigger than your memory. On my machine, Llama 3.1 8B answered correctly at &lt;strong&gt;19.6 seconds per word&lt;/strong&gt; , and a 70B model would take &lt;strong&gt;two and a half to three minutes per word&lt;/strong&gt;. Here is how it works, what it took to get running, and when it is actually worth using.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1735810501831-40892dcfef1e%3Fw%3D1200%26auto%3Dformat%26fit%3Dcrop" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fimages.unsplash.com%2Fphoto-1735810501831-40892dcfef1e%3Fw%3D1200%26auto%3Dformat%26fit%3Dcrop" alt="An Apple desktop computer on a white desk" width="1200" height="1088"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How AirLLM runs a big model on a small machine
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AirLLM never holds the whole model in memory; it streams the model from disk one layer at a time, for every single token it generates.&lt;/strong&gt; That is the entire trick, and it explains both why the claim is true and why it is slow.&lt;/p&gt;

&lt;p&gt;A language model is a stack of layers. Llama 3.1 8B has 32 of them; the 70B version has 80. Normally the whole stack sits in memory and each token flows through it in milliseconds. AirLLM splits the model into one file per layer on disk. To produce a token, it loads the first layer, runs it, frees it, loads the next one, and so on to the end. Then it does the whole thing again for the next token.&lt;/p&gt;

&lt;p&gt;Peak memory is one layer plus a small cache, so a 70B model really can run in a few gigabytes. The cost is that the full model is read from disk once per token. That gives you the only formula you need to predict AirLLM's speed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Seconds per token is roughly the model's size divided by your disk's read speed.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A 141GB model on a 1GB/s drive is about 141 seconds per token before anything else happens. The GPU work is quick; the waiting is all disk.&lt;/p&gt;

&lt;h2&gt;
  
  
  My test setup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;I ran everything on a base Apple M4 Mac mini with 16GB of unified memory, with the models stored on a 2TB Crucial X9 external SSD over USB, rated at about 1GB/s.&lt;/strong&gt; The internal disk had only about 35GB free, which is too little for anything large, and that turned out to be a constraint worth writing about on its own.&lt;/p&gt;

&lt;p&gt;The details, so you can reproduce it:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Software:&lt;/strong&gt; AirLLM 2.11.0, Apple's MLX 0.29.3 (AirLLM uses MLX to run layers on the Mac's GPU), Transformers 4.46.3, PyTorch 2.8.0, and the Python 3.9 that ships with macOS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precision:&lt;/strong&gt; full fp16 layers. AirLLM's 4-bit and 8-bit compression options depend on a library that needs an NVIDIA GPU, so they are not available on a Mac.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Models:&lt;/strong&gt; TinyLlama 1.1B Chat as a smoke test, Llama 3.1 8B Instruct, and Llama 3.1 70B Instruct for the projection.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The test:&lt;/strong&gt;"What is the capital of France? Answer in one sentence." with 20 new tokens and greedy decoding, timed end to end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Disk budget:&lt;/strong&gt; AirLLM keeps both the downloaded model and its split copy, so every model needs about twice its size in free space. The 8B model used 15GB plus 15GB; the 70B needs roughly 141GB plus 141GB.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Getting it running on Apple Silicon took four fixes
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;AirLLM works on a Mac, but not out of the box: I hit two crashes, one silent bug that would have garbled the output, and one cosmetic problem.&lt;/strong&gt; The project's last release was in 2024, and its Mac code path shows it. I fixed all four in a small wrapper script rather than editing the library, so updates would not undo them.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;It only accepts models split into several shards.&lt;/strong&gt; AirLLM looks for a model.safetensors.index.json file. Models shipped as a single file, like TinyLlama, crash with an assertion error. The fix was to download the model myself and generate that index file when it is missing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The layer folder has to exist before AirLLM checks your free space.&lt;/strong&gt; Point it at a new folder on an external drive and it crashes with "No such file or directory". Creating the folder first fixes it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Mac path hard-codes a setting that Llama 3 changed.&lt;/strong&gt; AirLLM's Apple Silicon code sets the position-encoding base (rope_theta) to 10,000, which was right for older Llama models. Llama 3.x uses 500,000. Nothing crashes; the model just produces confident nonsense. I patched it to read the value from the model's own config, and the 8B output came back correct.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Generation does not stop when the answer ends.&lt;/strong&gt; It keeps going until it hits the token limit, so you get the answer followed by junk. Trimming at the end-of-answer marker fixes the display.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One gap remains: Llama 3.1's long-context scaling is not implemented on the Mac path. Short prompts are fine; very long ones may degrade. If you are evaluating open-source AI tooling for a product, this is the pattern to expect from research-grade libraries: the headline works, the edges are yours to maintain.&lt;/p&gt;

&lt;h2&gt;
  
  
  The results: 1 second per word, then 19.6
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Both models answered "The capital of France is Paris." TinyLlama took 1.0 second per token; Llama 3.1 8B took 19.6 seconds per token, close to what the SSD's speed predicts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;TinyLlama 1.1B: about 1 second per token.&lt;/strong&gt; Twenty tokens took 0.3 minutes. All 22 layers ran in under a second per pass. The model is about 2GB, so after the first pass macOS kept it in its memory cache and the SSD was barely touched. Small models get a free speed boost this way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Llama 3.1 8B: 19.6 seconds per token.&lt;/strong&gt; Twenty tokens took 6.5 minutes. The 32 transformer layers took about 16 seconds per pass, roughly two layers per second. The remaining three and a half seconds went mostly to the two vocabulary layers at the start and end of the model, about 1GB each, which are reloaded for every token. At 15GB per token in 19.6 seconds, the effective read speed was about 0.77GB/s, most of the drive's rated 1GB/s.&lt;/p&gt;

&lt;p&gt;Splitting the 8B model into per-layer files was quick by comparison: 35 pieces in 43 seconds, once the 15GB download had finished. Here is the actual run, straight from my terminal:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Funhlbr2avupoeufo8vmc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Funhlbr2avupoeufo8vmc.png" alt="Terminal output of AirLLM running Llama 3.1 8B on an M4 Mac mini: 32 layers per pass at about 2 layers per second, answering " width="800" height="829"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Llama 3.1 70B, projected: two and a half to three minutes per token.&lt;/strong&gt; I did not run it; the 8B result makes the math clear. Scaling the 8B numbers to a 141GB model at 0.8 to 1GB/s gives 140 to 180 seconds per token, so a one-sentence answer takes around 30 minutes. That excludes the first run's one-off download, which at the 26MB/s I saw from Hugging Face would take more than an hour on its own, plus the time to split the model.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;On a 16GB Mac mini, AirLLM turned Llama 3.1 8B into a 19.6 second per word model. The same model loaded fully into memory answers in real time.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  AirLLM vs just running a smaller model properly
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Any setup that fits the model in memory beats AirLLM by two to three orders of magnitude, so AirLLM only makes sense for models you cannot fit any other way.&lt;/strong&gt; My numbers above are measured; the comparisons below are estimates from memory bandwidth and published reviews of similar machines.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The same Mac mini with Ollama.&lt;/strong&gt; An 8B model at 4-bit uses about 5GB and fits comfortably in 16GB. Reviews of 16GB Macs put models like Qwen 3 8B and Qwen 3.5 9B at roughly 25 to 30 tokens per second. That is about 500 times faster than the 19.6 seconds per token I measured through AirLLM. Most of that gap is AirLLM reading full-precision weights from disk instead of 4-bit weights from memory.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An old many-core server with lots of RAM.&lt;/strong&gt; A 64-core DDR3 server with 128GB of RAM can hold a 4-bit 70B model (about 40GB) entirely in memory and run it with llama.cpp. Old memory and older CPUs make it slow by modern standards, roughly 0.3 to 1 token per second, but that is still a few hundred times faster than AirLLM streaming the same model off a USB drive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Mac with more memory.&lt;/strong&gt; Apple's current line goes to 32GB on the Mac mini M6, 64GB on the Mac mini M5 Pro, and 128GB on the Mac Studio M5 Max. 64GB is the minimum for a 4-bit 70B model to fit in memory, and it is a tight fit once macOS takes its share; 128GB is comfortable. At that point you would not use AirLLM at all.&lt;/p&gt;

&lt;p&gt;If you are a founder weighing local models against an API for your product, this is exactly the kind of decision I help with as a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt;: the answer depends on your latency budget, your data constraints, and what the hardware costs per month next to your API bill, not on what a README says.&lt;/p&gt;

&lt;h2&gt;
  
  
  When AirLLM is actually worth using
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Use AirLLM when you need a model much larger than your memory, can wait minutes per word, and can run the work in batches or overnight; skip it whenever the model already fits.&lt;/strong&gt; Here is how I would decide.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Good fit:&lt;/strong&gt; offline batch jobs, such as classifying or summarizing a few hundred documents overnight with a 70B model on a machine that otherwise could not run one. Also good for evaluating a big model's quality on your own prompts before paying for hardware or API capacity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bad fit:&lt;/strong&gt; anything interactive. Chat, coding assistants, and agents need tokens per second, not minutes per token.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Buy disk speed first.&lt;/strong&gt; Because AirLLM is disk-bound, a Thunderbolt or USB4 NVMe drive at about 3GB/s should roughly triple its speed over the USB drive I used. On a fast internal SSD it would be faster still, if you have the space.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Budget twice the model size in free disk.&lt;/strong&gt; For 70B, that is around 300GB.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Expect to maintain it.&lt;/strong&gt; The library has not had a release since 2024. On a Mac, plan to patch it as I did, and test output quality, not just whether it runs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For everyday local use on a 16GB Mac, I would run an 8B to 12B model at 4-bit through Ollama or LM Studio and keep AirLLM for the occasional giant-model experiment. If your team is building AI features and you want a second opinion on model choice, hosting, or cost, a &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; engagement or &lt;a href="https://kunalvohra.com/cto-as-a-service" rel="noopener noreferrer"&gt;CTO as a service&lt;/a&gt; covers exactly this. My notes on &lt;a href="https://kunalvohra.com/blog/ai-startup-technical-due-diligence" rel="noopener noreferrer"&gt;AI startup technical due diligence&lt;/a&gt; also cover the infrastructure questions investors ask about model hosting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Can AirLLM really run a 70B model on 4GB of memory?&lt;/strong&gt; Yes. It loads one layer at a time from disk, so peak memory stays at a few gigabytes. The trade-off is speed: the whole model is read from disk for every token, so a 70B model runs at minutes per token on a typical consumer SSD.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How fast is AirLLM on a Mac?&lt;/strong&gt; On a base M4 Mac mini with an external USB SSD, I measured 1.0 second per token for TinyLlama 1.1B and 19.6 seconds per token for Llama 3.1 8B. A 70B model projects to two and a half to three minutes per token on the same setup.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does AirLLM work on Apple Silicon?&lt;/strong&gt; Yes, through Apple's MLX library, but it needed four fixes in my test, including a patch without which Llama 3.x models produce garbled output. Its compression options do not work on a Mac because they depend on an NVIDIA-only library.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much disk space does AirLLM need?&lt;/strong&gt; About twice the model's size, because it keeps the original download and a split copy with one file per layer. A 70B model needs roughly 300GB free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Is AirLLM better than Ollama?&lt;/strong&gt; Only for models that do not fit in your memory. For any model that fits, Ollama or llama.cpp is hundreds of times faster, because the weights stay in memory and run at 4-bit precision.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the best local model for a 16GB Mac?&lt;/strong&gt; An 8B to 12B model at 4-bit, such as Qwen 3 8B, Qwen 3.5 9B, or Gemma 4 12B, run through Ollama or LM Studio. Larger models load but leave too little memory for longer conversations.&lt;/p&gt;

&lt;p&gt;If you are deciding between running models yourself and paying for an API, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt; and walk me through your workload. I will tell you what I would run, where, and what it should cost.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>news</category>
      <category>discuss</category>
      <category>startup</category>
    </item>
    <item>
      <title>The DPDP Act, Explained by a Security Researcher: Why India Needed It and What It Means for Your Stack</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Thu, 01 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/the-dpdp-act-explained-by-a-security-researcher-why-india-needed-it-and-what-it-means-for-your-47f</link>
      <guid>https://dev.to/kunalvohra/the-dpdp-act-explained-by-a-security-researcher-why-india-needed-it-and-what-it-means-for-your-47f</guid>
      <description>&lt;p&gt;The Digital Personal Data Protection Act, 2023 (the DPDP Act) is India's first dedicated law for personal data. It gives people rights over their data, makes every company that collects it accountable for how it is used and protected, and sets up a Data Protection Board with the power to impose penalties of up to ₹250 crore. The DPDP Rules, notified in November 2025, phase the obligations in over 18 months, with the core duties (security safeguards, breach reporting, notices, retention) applying by May 2027.&lt;/p&gt;

&lt;p&gt;Most explainers treat the DPDP Act as a consent law. I read it as a security engineer, because that is what I am: I hold an M.Tech in Cybersecurity from NIT Kurukshetra, my research on attribute-based access control has been cited 30+ times, and I have built products on Indian infrastructure as a six-time technical co-founder. From that angle the Act says something founders miss: &lt;strong&gt;India has decided that losing people's data is a bigger failure than collecting it without asking.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I am not a lawyer, and this is not legal advice. It is how the law translates into engineering work. For your specific obligations, talk to a privacy lawyer; for how to build them into your product, that is where I come in.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why India needed a data protection law
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;India needed the DPDP Act because it had become one of the largest digital economies in the world while protecting personal data with rules written in 2011 that covered only a narrow slice of data and had no dedicated regulator.&lt;/strong&gt; The gap between how much data Indian companies held and how little they were accountable for kept widening.&lt;/p&gt;

&lt;p&gt;Before the Act, the legal baseline was Section 43A of the IT Act and the 2011 "SPDI" rules. They applied mainly to a short list of "sensitive" data (passwords, financial and health information, biometrics), asked for "reasonable security practices" without saying much about what that meant, and left individuals to pursue compensation through a slow adjudication process. There was no duty to tell people their data had been breached, no general right to have your data deleted, and no regulator whose job was personal data.&lt;/p&gt;

&lt;p&gt;Three things made that untenable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy became a fundamental right.&lt;/strong&gt; In 2017 a nine-judge bench of the Supreme Court held in &lt;em&gt;Justice K.S. Puttaswamy v. Union of India&lt;/em&gt; that privacy is a fundamental right under the Constitution, and noted that the state should put a data protection framework in place. What followed was six years of drafting: the Justice Srikrishna committee report in 2018, the Personal Data Protection Bill of 2019, its withdrawal in 2022, and finally the much shorter DPDP Act, passed in August 2023.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;India's digital public infrastructure put everyone's data online at once.&lt;/strong&gt; Aadhaar, UPI, DigiLocker, and the account aggregator framework moved hundreds of millions of people into digital identity and payments within a few years. That is a remarkable achievement, and it also means that for most Indians, a large share of their life now exists as records in databases they have never seen, run by companies they have never heard of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breaches kept happening, and nobody had to tell you.&lt;/strong&gt; The ransomware attack on AIIMS Delhi in late 2022 took one of the country's largest hospitals back to paper records for days. In 2023, reports surfaced of personal details linked to the CoWIN vaccination platform being served through a Telegram bot. Digital lending apps that took contact-list access and used it to harass borrowers and their families became a problem big enough for the RBI to issue specific guidelines. Under the old regime, in most of these situations, the affected people had no legal right to be told what had happened to their data.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the DPDP Act is a security law, not just a privacy law
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Read the penalty schedule and the priorities are clear: the largest penalty in the Act, up to ₹250 crore, is for failing to take reasonable security safeguards to prevent a personal data breach.&lt;/strong&gt; Failing to notify a breach, and failing to meet the obligations around children's data, can each cost up to ₹200 crore. Most other violations are capped at ₹50 crore.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The biggest fine in India's data protection law is not for collecting data without consent. It is for failing to protect it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That ordering matters for how you prioritise engineering work. A missing consent checkbox is a problem. An unencrypted database behind a shared admin password is a much bigger one, and the Act prices it that way.&lt;/p&gt;

&lt;p&gt;As a security researcher, three ideas in the Act matter more to me than the rest.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Data minimisation shrinks the blast radius.&lt;/strong&gt; The Act ties processing to a specified purpose and expects data to be erased when that purpose is served. Every field you do not collect is a field that cannot leak. This is the cheapest security control there is, and the law now makes it mandatory rather than advisable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Accountability follows the data, including to your vendors.&lt;/strong&gt; The data fiduciary (the company that decides why and how data is processed) is responsible even when a processor (your cloud host, your SMS provider, your analytics tool, your model provider) handles the data. You cannot outsource the liability, only the work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Breaches become visible.&lt;/strong&gt; Mandatory notification to the Board and to affected people changes the incentive. Companies that could previously absorb a breach quietly now have to disclose it, which makes prevention a business decision rather than an engineering nice-to-have.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What the DPDP Rules actually require from engineering
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The DPDP Rules turn the Act's broad duties into concrete technical requirements: specific security safeguards, a breach reporting process with a 72-hour deadline, logs kept for at least a year, erasure with advance notice, and verifiable parental consent for children.&lt;/strong&gt; Here is how the main rules translate into work on your stack.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reasonable security safeguards (Rule 6).&lt;/strong&gt; The rules list the measures expected at minimum: protecting personal data through encryption, obfuscation, masking, or virtual tokens; access controls over the systems that process it; visibility into access through logs and monitoring so that unauthorised access can be detected and investigated; retaining those logs for at least a year; backups and measures for continuity if data is compromised; and contracts that require your processors to take safeguards too. If you have read my &lt;a href="https://kunalvohra.com/blog/startup-security-checklist" rel="noopener noreferrer"&gt;startup security checklist&lt;/a&gt;, most of this will look familiar, because it is the same baseline, now with legal weight behind it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breach intimation (Rule 7).&lt;/strong&gt; When a personal data breach happens, you must inform each affected person without delay, in plain language, explaining what happened, the likely consequences, what you are doing about it, what they can do to protect themselves, and who to contact. You must also inform the Data Protection Board without delay, followed by a detailed report within 72 hours covering the facts, the cause, the mitigation, and the notifications you have sent. This sits alongside the existing CERT-In directions, which already require cyber incidents to be reported to CERT-In within six hours. In practice that means one incident process with three clocks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retention and erasure (Rule 8).&lt;/strong&gt; Personal data must be erased once the purpose is served or consent is withdrawn, unless the law requires you to keep it. Large e-commerce, gaming, and social media platforms get defined retention periods after a user's last activity, and people must be told at least 48 hours before their data is erased so they can log in and keep their account. Separately, logs of processing must be retained for at least a year. Engineering takeaway: you need to know where every copy of a person's data lives, including backups, analytics, and logs, or you cannot erase it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Children's data.&lt;/strong&gt; Anyone under 18 is a child under the Act, and processing their data needs verifiable consent from a parent or guardian, with limited exemptions such as healthcare and education providers acting within their role. Tracking, behavioural monitoring, and targeted advertising directed at children are prohibited. For edtech, gaming, and consumer apps, this is an onboarding and identity problem, not a checkbox.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consent notices and Consent Managers.&lt;/strong&gt; Notices must be clear, standalone, and itemised, telling people what data you collect and for what purpose, and consent must be as easy to withdraw as it was to give. Consent Managers, India-based entities registered with the Board, will let people give, manage, and withdraw consent across services from one place. Their registration regime starts in November 2026, a year after the Rules were notified.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Significant Data Fiduciaries.&lt;/strong&gt; Companies the government notifies as Significant Data Fiduciaries (based on the volume and sensitivity of data, and risk to people and the state) carry more: a Data Protection Officer based in India, an independent data auditor, periodic data protection impact assessments and audits, and due diligence that the algorithms and software they use do not put people's rights at risk. The government can also restrict certain categories of their data from leaving India.&lt;/p&gt;

&lt;h2&gt;
  
  
  The timeline: what applies when
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Rules were notified in November 2025 and phase in over 18 months.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;November 2025:&lt;/strong&gt; the Data Protection Board provisions took effect, so the enforcement machinery could be set up.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;November 2026 (next month, as I write this):&lt;/strong&gt; the Consent Manager registration regime begins.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;May 2027:&lt;/strong&gt; the core obligations apply, including notices, consent, security safeguards, breach intimation, retention and erasure, children's data, and data principal rights.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;MeitY has also consulted on bringing some of these dates forward, particularly for Significant Data Fiduciaries. Treat May 2027 as the latest possible date, not the planning target. Retrofitting encryption, logging, erasure, and a breach process into a live product takes months, and the calendar is shorter than it looks.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the DPDP Act is weaker, and the criticisms worth knowing
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The Act is a big step forward, but it is not the strongest data protection law in the world, and a fair reading has to include its gaps.&lt;/strong&gt; These are the criticisms I hear most often from privacy researchers and practitioners; you do not have to agree with all of them to plan around them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Broad government exemptions.&lt;/strong&gt; Section 17 lets the central government exempt its own agencies from the Act on grounds such as national security and public order. Critics argue this is too wide; the government's position is that it mirrors exemptions found in other data protection laws.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;"Reasonable" is not defined in depth.&lt;/strong&gt; Rule 6 lists categories of safeguards but not standards. That flexibility helps startups, and it also means there is no clear bar until the Board starts deciding cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No compensation for individuals.&lt;/strong&gt; Penalties go to the government, not to the people whose data was breached. Earlier drafts had a compensation route; the final Act does not.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Board independence.&lt;/strong&gt; Members of the Data Protection Board are appointed by the central government, which critics say limits its independence when the government itself is the data fiduciary.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No separate category for sensitive data.&lt;/strong&gt; Unlike GDPR and the earlier Indian drafts, the Act treats health, financial, and biometric data under the same general rules as everything else, apart from children's data and Significant Data Fiduciaries.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The RTI amendment.&lt;/strong&gt; The Act amended the Right to Information Act in a way transparency advocates say makes it easier to refuse information that involves personal data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From a security perspective, the practical upshot is simple. Do not build to the weakest reading of the law. Build to the baseline a competent auditor would expect, because that is what the Board will eventually use to judge "reasonable."&lt;/p&gt;

&lt;h2&gt;
  
  
  What Indian startups should build before May 2027
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If you process personal data of people in India, the DPDP Act applies to you, whatever your size, and it also applies to companies outside India that offer goods or services to people in India.&lt;/strong&gt; The Act lets the government exempt notified startups and classes of companies from some obligations, but no startup should plan its security around an exemption that may never cover it. Here is the order I would work in.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Map your personal data.&lt;/strong&gt; What you collect, why, where it is stored (including backups, logs, analytics, and third-party tools), and who can access it. Every other obligation depends on this document.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cut what you do not need.&lt;/strong&gt; Remove fields, stop logging personal data you never use, and set retention periods. Less data is less risk and less compliance work.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put the Rule 6 baseline in place.&lt;/strong&gt; Encryption at rest and in transit, access control with one identity per person and MFA, logging and monitoring retained for at least a year, tested backups, and security clauses in your processor contracts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Build the rights workflows.&lt;/strong&gt; Access, correction, erasure (with the 48-hour notice where it applies), consent withdrawal, and a grievance contact, all working end to end rather than handled by email.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Write the breach process now.&lt;/strong&gt; One runbook covering CERT-In's six hours, the Board's 72 hours, and plain-language notices to affected users, with named owners.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rewrite your consent notices&lt;/strong&gt; so they are itemised, specific, and available in the languages your users actually use.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Handle children properly&lt;/strong&gt; if there is any chance minors use your product: age signals, verifiable parental consent, and no tracking or targeted ads.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Check your AI stack.&lt;/strong&gt; If you send personal data to an LLM provider, you are using a processor. Know what you send, whether it is retained, and where it is processed, and keep personal data out of prompts and prompt logs unless the feature needs it.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If you are also regulated elsewhere, DPDP stacks on top: RBI rules for payments and lending (covered on my &lt;a href="https://kunalvohra.com/fractional-cto/fintech" rel="noopener noreferrer"&gt;fractional CTO for fintech&lt;/a&gt; page), health data expectations (see &lt;a href="https://kunalvohra.com/fractional-cto/healthcare" rel="noopener noreferrer"&gt;fractional CTO for healthcare&lt;/a&gt;), and GDPR if you serve users in Europe.&lt;/p&gt;

&lt;h2&gt;
  
  
  Who should own DPDP compliance at a startup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;DPDP compliance is split between legal and engineering, and at most startups the engineering half is the larger one.&lt;/strong&gt; A lawyer can write your notices and review your contracts. Someone technical has to build the data map, the encryption, the logging, the erasure path, and the breach process, and keep them working as the product changes.&lt;/p&gt;

&lt;p&gt;That is part of the work I do as a &lt;a href="https://kunalvohra.com/fractional-cto/india" rel="noopener noreferrer"&gt;fractional CTO in India&lt;/a&gt;, for Indian founders and for foreign founders building products for Indian users: designing these obligations into the architecture from the start, or retrofitting them before they turn into a funding diligence problem. If you only need a periodic review of your design decisions, the &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;technical advisor&lt;/a&gt; engagement covers that; if you need someone accountable for the work, that is a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; engagement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Why was the DPDP Act introduced?&lt;/strong&gt; Because India's previous framework, Section 43A of the IT Act and the 2011 SPDI rules, covered only a narrow set of sensitive data, had no dedicated regulator, and did not require companies to tell people about breaches. The Supreme Court's 2017 Puttaswamy judgment recognised privacy as a fundamental right, and the scale of India's digital economy and repeated large breaches made a comprehensive law necessary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When does the DPDP Act come into force for businesses?&lt;/strong&gt; The DPDP Rules were notified in November 2025 with an 18-month phase-in. The Data Protection Board provisions applied immediately, the Consent Manager regime starts in November 2026, and the core obligations, including security safeguards and breach notification, apply by May 2027. The government has consulted on bringing some dates forward, so check the latest notifications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the maximum penalty under the DPDP Act?&lt;/strong&gt; Up to ₹250 crore for failing to take reasonable security safeguards to prevent a personal data breach. Failing to notify a breach and breaching children's data obligations can each cost up to ₹200 crore, and most other violations up to ₹50 crore.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What security measures does the DPDP Act require?&lt;/strong&gt; Rule 6 of the DPDP Rules expects encryption, obfuscation, masking, or tokenisation of personal data; access controls; logging and monitoring to detect unauthorised access; retention of logs for at least a year; backups and continuity measures; and contracts requiring processors to take safeguards. It does not name specific standards, so build to what a competent auditor would expect.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How fast do you have to report a data breach under DPDP?&lt;/strong&gt; You must inform affected individuals and the Data Protection Board without delay, and send the Board a detailed report within 72 hours. Separately, CERT-In's directions require cyber incidents to be reported to CERT-In within six hours.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Does the DPDP Act apply to startups and companies outside India?&lt;/strong&gt; Yes. It applies to any organisation processing digital personal data in India, and to organisations outside India that process personal data in connection with offering goods or services to people in India. The government can exempt notified startups from some obligations, but security safeguards and breach notification are not the place to rely on that.&lt;/p&gt;

&lt;p&gt;If you are building for Indian users and want a straight read on how far your product is from DPDP-ready, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt; and walk me through your stack. I will tell you what I would fix first.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>news</category>
      <category>discuss</category>
      <category>startup</category>
    </item>
    <item>
      <title>Startup Security Checklist: What I Fix First as a Fractional CTO (2026)</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Thu, 01 Oct 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/startup-security-checklist-what-i-fix-first-as-a-fractional-cto-2026-283a</link>
      <guid>https://dev.to/kunalvohra/startup-security-checklist-what-i-fix-first-as-a-fractional-cto-2026-283a</guid>
      <description>&lt;p&gt;A startup security checklist does not need to be long to be useful. It needs to be in the right order. Before seed, the risks that actually hurt you are boring: shared logins, secrets in code, cloud accounts with no guardrails, backups nobody has restored, and (if you are building with AI) a model that can reach things it should not. Fix those first, in that order, and you are ahead of most companies your size. Leave SOC 2, pen tests, and security tooling budgets until a customer or an investor gives you a reason.&lt;/p&gt;

&lt;p&gt;I hold an M.Tech in Cybersecurity from NIT Kurukshetra, I have published research on access control that has been cited 30+ times, and I have been the technical co-founder or CTO of six startups. The pattern I keep seeing is the same one: founders either ignore security until an enterprise deal forces it, or they buy tools before they have fixed the basics. This checklist is the order I actually work in when I take over the &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;security posture of a startup as its fractional CTO&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why startup security is mostly about the boring things
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Early-stage startups rarely get breached by sophisticated attacks; they get breached through access and configuration mistakes that take minutes to exploit and hours to fix.&lt;/strong&gt; Attackers automate the search for exposed keys, open storage buckets, and default credentials. They are not targeting you specifically. They are scanning everyone, and small companies with no process are the easiest wins.&lt;/p&gt;

&lt;p&gt;The hard part of startup security is not knowing what to do. It is doing it before you feel you need to, while the team is small enough that a fix takes an afternoon instead of a quarter.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The line that nearly took down a launch processing 500,000 assessments in an hour was not in the AI, the custom protocols, or the operating system we built from zero. It was one line of AWS load balancer configuration.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I wrote about that near-miss in &lt;a href="https://kunalvohra.com/blog/the-edtech-problem-nobody-would-touch" rel="noopener noreferrer"&gt;the edtech case study&lt;/a&gt;. It is the most useful security lesson I can give a founder: the risk is usually in the layer everyone thinks is too simple to review.&lt;/p&gt;

&lt;h2&gt;
  
  
  Week one: identity and access
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The first thing to fix is who can log in to what, because every other control assumes this is right.&lt;/strong&gt; If three people share one admin account, you cannot audit anything, you cannot offboard anyone, and a single phished password is a full compromise.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;One identity per person, everywhere.&lt;/strong&gt; No shared logins for the cloud console, the domain registrar, the app stores, the payment processor, or the production database. If a tool only allows one account, put it in the password manager and log who uses it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;MFA on everything that matters,&lt;/strong&gt; starting with email, cloud, code hosting, DNS, and payments. Prefer an authenticator app or hardware key over SMS.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A company password manager,&lt;/strong&gt; not browser-saved passwords on personal laptops.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Lock away the cloud root account.&lt;/strong&gt; Root credentials go into the password manager with MFA, and nobody uses them day to day.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Least privilege by default.&lt;/strong&gt; Engineers get the access their current work needs. Production write access is a short list you can read out loud.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;An offboarding checklist that actually runs.&lt;/strong&gt; When someone leaves, every account is revoked the same day. Contractors and agencies are where this breaks most often.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of this costs money beyond a password manager seat. All of it is painful to retrofit once you have twenty people and forty tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Secrets and credentials: keep them out of the code
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;API keys, database passwords, and tokens belong in a secrets manager or environment configuration, never in the repository, and never in a chat message.&lt;/strong&gt; Once a secret has been committed, assume it is compromised, even if the repo is private; the fix is rotation, not deletion.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Turn on secret scanning in your code host and add a pre-commit hook so keys never reach the repo in the first place.&lt;/li&gt;
&lt;li&gt;Use separate keys for development, staging, and production. A developer laptop should never hold production credentials.&lt;/li&gt;
&lt;li&gt;Scope every key to what it needs. A payment key that can only create charges is a very different incident from one that can issue refunds and read customer data.&lt;/li&gt;
&lt;li&gt;Keep a list of every third-party key and who owns it, and rotate them on a schedule and whenever someone with access leaves.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters twice as much for AI products, because model provider keys are billed per use. A leaked key is not only a data risk; it is an invoice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cloud and infrastructure: guardrails, backups, and logs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Your cloud setup should be defined in code, reviewed like code, backed up in a way you have actually tested, and logged well enough to answer "what happened" after an incident.&lt;/strong&gt; Most startups have one of these four, and it is rarely the tested backup.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infrastructure as code&lt;/strong&gt; (Terraform, Pulumi, CloudFormation, whatever your team knows). Changes go through review, which is exactly what would have caught the load balancer line earlier.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No public storage by default.&lt;/strong&gt; Buckets, databases, and admin panels should not be reachable from the internet unless there is a written reason.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backups with a tested restore.&lt;/strong&gt; A backup you have never restored is a hope, not a backup. Restore to a scratch environment at least once a quarter and time it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Centralised logs and basic alerting&lt;/strong&gt; for logins, permission changes, and unusual spend. You do not need a security operations centre. You need to know when something changes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Patching and dependency updates on a schedule,&lt;/strong&gt; not when someone remembers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate environments.&lt;/strong&gt; Production data does not get copied into staging for convenience, especially if it contains personal or health data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Application security basics every MVP should ship with
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Most web application vulnerabilities come from a short, well-known list: broken access control, injection, weak authentication, and outdated dependencies.&lt;/strong&gt; The OWASP Top 10 is still the right reference, and an MVP that handles those well is ahead of most production software.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authorisation checks on the server for every request,&lt;/strong&gt; not only hidden buttons in the UI. The most common serious bug I see in early products is one user being able to read another user's data by changing an ID in a URL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parameterised queries and an ORM&lt;/strong&gt; instead of string-built SQL.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt; on login, signup, password reset, OTP, and any endpoint that costs you money (which, for AI features, is most of them).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Dependency scanning&lt;/strong&gt; in CI, with someone responsible for acting on the results.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security headers, HTTPS everywhere, and secure cookie settings,&lt;/strong&gt; which are mostly one-time configuration.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuous external scanning&lt;/strong&gt; of what is exposed to the internet. At ColadAI I built SiteGuard for exactly this: automated web and API security checks that run between audits, so a new exposure shows up in days rather than at the next pen test.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you are scoping an MVP right now, put these in the scope, not in a "phase two" nobody funds. It is part of how I approach &lt;a href="https://kunalvohra.com/mvp-development" rel="noopener noreferrer"&gt;MVP development&lt;/a&gt;, and it costs far less on day one than after launch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security for AI startups: the checklist most founders skip
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;If your product sends user data to a model or lets a model take actions, you have a new attack surface that the standard checklist does not cover.&lt;/strong&gt; AI-first startups need a few extra items, and investors doing &lt;a href="https://kunalvohra.com/blog/ai-startup-technical-due-diligence" rel="noopener noreferrer"&gt;technical due diligence on AI startups&lt;/a&gt; now ask about them directly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Treat every model input as untrusted.&lt;/strong&gt; Prompt injection means text in a document, email, web page, or user message can steer the model. The model's own instructions are not a security boundary. I covered the mechanics in &lt;a href="https://medium.kunalvohra.com/prompt-injection-attacks-explained-the-security-vulnerability-every-ai-builder-needs-to-understand-d3d17b8c1c0c" rel="noopener noreferrer"&gt;Prompt Injection Attacks Explained&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scope tool access tightly.&lt;/strong&gt; If an agent can call APIs, query a database, or send email, give it its own credentials with the minimum permissions, and require a human confirmation for anything destructive or financial.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Know where your data goes.&lt;/strong&gt; For every model provider in the stack, write down what you send, whether it is retained, whether it can be used for training, and which region it is processed in. Enterprise buyers will ask for this in writing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep personal data out of prompts and logs&lt;/strong&gt; unless the feature genuinely needs it. Prompt logs are one of the most common places sensitive data ends up by accident.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Separate tenants in retrieval.&lt;/strong&gt; If you use RAG, make sure one customer's documents can never be retrieved into another customer's answer. Filter on the server, not in the prompt.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Put spend limits on model keys.&lt;/strong&gt; Abuse of an AI endpoint often shows up first as a bill.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I build and run ColadAI, a multi-LLM platform, so these are the same decisions I make on my own products before I recommend them to anyone else. For a wider view of how attackers are using AI, see &lt;a href="https://kunalvohra.com/blog/can-ai-hack-systems" rel="noopener noreferrer"&gt;Can AI Hack Systems?&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Data protection and compliance: HIPAA, DPDP, GDPR, and SOC 2 for startups
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Compliance should follow your data and your customers, not a generic roadmap.&lt;/strong&gt; Start by mapping what personal data you collect, where it is stored, and which vendors touch it. That single document answers half of every security questionnaire you will ever receive.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Health data&lt;/strong&gt; in the US brings HIPAA, and every vendor that touches protected health information needs a BAA. On one engagement a signed enterprise pilot stalled in security review because PHI was flowing into three vendor systems with no BAA and no audit trail. Redrawing the data boundary, removing PHI from everything that did not need it, and adding immutable access logging took six weeks, and the deal closed. The same work after a failed audit would have cost the deal. That is the kind of work behind the &lt;a href="https://kunalvohra.com/fractional-cto/healthcare" rel="noopener noreferrer"&gt;fractional CTO for healthcare&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Indian users&lt;/strong&gt; bring the DPDP Act; European users bring GDPR; payments bring PCI DSS (which you mostly avoid by never touching raw card data and using a processor's hosted fields). Fintech has its own layer on top, covered on the &lt;a href="https://kunalvohra.com/fractional-cto/fintech" rel="noopener noreferrer"&gt;fractional CTO for fintech&lt;/a&gt; page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOC 2&lt;/strong&gt; is a sales requirement, not a security milestone. Pursue it when enterprise customers ask for it in real deals. Doing the checklist above first makes the audit far faster, because most SOC 2 controls are the same basics with evidence attached.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Incident readiness: decide before you need it
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Every startup should have a one-page incident plan before its first incident, because the worst time to decide who is in charge is during one.&lt;/strong&gt; It does not need to be elaborate.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who leads an incident, and who is the backup.&lt;/li&gt;
&lt;li&gt;How to revoke access and rotate keys quickly, with the steps written down.&lt;/li&gt;
&lt;li&gt;Who needs to be told (customers, regulators, investors) and within what time frame for your markets.&lt;/li&gt;
&lt;li&gt;Where logs live and how long they are kept.&lt;/li&gt;
&lt;li&gt;A short review afterwards, focused on what to change, not who to blame.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Who should own security at a startup
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Before you can justify a full-time security hire, security should be owned by whoever owns the architecture, which at most early-stage startups means the CTO or, if you do not have one, a fractional CTO.&lt;/strong&gt; A security consultant can audit you once; someone has to own the fixes and keep the standard as the team grows.&lt;/p&gt;

&lt;p&gt;Security and infrastructure posture is one of the five areas I own in a fractional CTO engagement, alongside architecture, hiring, vendor oversight, and investor diligence. If you only need a periodic review of architecture and security decisions, the &lt;a href="https://kunalvohra.com/technical-advisor" rel="noopener noreferrer"&gt;Technical Advisor tier&lt;/a&gt; is $750 a month; if you need someone to own the work, the Fractional CTO retainer is $2,500 a month. Full details are on the &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;fractional CTO pricing page&lt;/a&gt;, and the &lt;a href="https://kunalvohra.com/cto-as-a-service" rel="noopener noreferrer"&gt;CTO as a service&lt;/a&gt; page explains how the retainers differ.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What should be on a startup security checklist before launch?&lt;/strong&gt; At minimum: one account per person with MFA, a password manager, no secrets in the repository, least-privilege cloud access with the root account locked away, tested backups, server-side authorisation on every request, rate limiting, dependency scanning, and a one-page incident plan. AI products should add untrusted-input handling, scoped tool permissions, and a written record of what data goes to which model provider.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When does a startup need SOC 2?&lt;/strong&gt; When enterprise customers ask for it in active deals, usually around the time you start selling to mid-market or larger companies. Before that, the same money is better spent fixing the basics, which also makes the eventual audit faster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do early-stage startups need a penetration test?&lt;/strong&gt; Not before the basics are in place. A pen test on a product with shared admin logins and keys in the repo mostly confirms what a checklist would have told you for free. Once the basics are done and you have customers asking, a scoped test is worth it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How is security different for AI startups?&lt;/strong&gt; AI products add three risks the standard checklist misses: prompt injection through untrusted content, models or agents with more access than they need, and sensitive data flowing to model providers or into prompt logs. Each has a concrete fix, and investors increasingly ask about all three.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a fractional CTO handle security, or do I need a security specialist?&lt;/strong&gt; For most startups before Series A, a fractional CTO with a security background can own the posture, fix the basics, and prepare for questionnaires and audits. A dedicated security hire makes sense once you are regulated at scale or security is a core part of what you sell.&lt;/p&gt;

&lt;p&gt;If you want a straight read on where your product stands, &lt;a href="https://calendly.com/kunalvohra" rel="noopener noreferrer"&gt;book a 30-minute call&lt;/a&gt; and walk me through your stack. I will tell you the three things I would fix first, whether or not we end up working together.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>programming</category>
      <category>startup</category>
    </item>
    <item>
      <title>How to Hire a CTO for Your Startup (From Someone Who Has Been Hired as One Six Times)</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Thu, 24 Sep 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/how-to-hire-a-cto-for-your-startup-from-someone-who-has-been-hired-as-one-six-times-5lm</link>
      <guid>https://dev.to/kunalvohra/how-to-hire-a-cto-for-your-startup-from-someone-who-has-been-hired-as-one-six-times-5lm</guid>
      <description>&lt;p&gt;To hire a CTO for your startup, decide first which shape of CTO you actually need (technical co-founder, full-time hire, &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt;, or &lt;a href="https://kunalvohra.com/interim-cto" rel="noopener noreferrer"&gt;interim CTO&lt;/a&gt;), then find candidates through your investors and your engineers rather than job boards, evaluate them on systems they have built and broken rather than on a whiteboard, and pay with a mix of cash and equity that matches the stage. Most founders skip the first step and pay for it for two years.&lt;/p&gt;

&lt;p&gt;I have been the technical co-founder six times, I have been hired as a fractional and interim CTO by founders who could not evaluate me, and I have sat on the other side of the table hiring engineers and my own replacements. This is the process I wish someone had handed me the first time. It is written for a non-technical founder, but a technical one will recognise most of it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 1: Decide whether you need a CTO at all
&lt;/h2&gt;

&lt;p&gt;The honest test is whether technical leadership has become a job or is still a set of decisions. If you have no product, no engineers, and no code, you do not need a CTO yet; you need the product to exist, which is a build problem, not a leadership one. If you have an agency shipping an MVP, you need someone senior to check their work, which is an advisory problem. A CTO becomes necessary when there is a team to lead, an architecture to own, and a roadmap someone has to be accountable for.&lt;/p&gt;

&lt;p&gt;The rough line I use: below three engineers, a technical advisor or a fractional CTO covers it. Between three and eight, a fractional CTO two or three days a week is usually right. Past eight engineers and a funded roadmap, technical leadership is a full-time job, and hiring it part-time makes the leader the bottleneck every decision queues behind. I have written the &lt;a href="https://kunalvohra.com/blog/fractional-cto-vs-full-time-cto" rel="noopener noreferrer"&gt;fractional versus full-time comparison&lt;/a&gt; in more detail, but that line is the short version.&lt;/p&gt;

&lt;p&gt;One stat line worth keeping: a full-time startup CTO in the US costs roughly $260,000 a year fully loaded before equity. Hiring one two years early is a half-million-dollar mistake before you count the rewrite they will start to justify the seniority.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 2: Choose the shape before you choose the person
&lt;/h2&gt;

&lt;p&gt;"Hire a CTO" hides four different decisions. Pick the shape first, because the search, the evaluation, and the compensation are different for each.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Technical co-founder.&lt;/strong&gt; Fits when you are pre-product and pre-funding and the company does not exist without them. Costs 10 to 50 percent equity and little or no cash. Ends never, ideally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Full-time CTO.&lt;/strong&gt; Fits past Series A, with eight or more engineers, when leadership is a full-time job. Costs about $260k a year plus 1 to 4 percent equity. Ends with an exit, or a hard conversation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fractional CTO.&lt;/strong&gt; Fits a funded company with three to eight engineers that needs senior ownership two or three days a week. Costs $2,500 to $15,000 a month across the market, no equity by default. Ends when you outgrow it and hire full-time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Interim CTO.&lt;/strong&gt; Fits when your CTO left, the product is stuck, or a raise is weeks away. Near full-time for three to nine months. Ends with your permanent CTO hired, often by the interim.&lt;/p&gt;

&lt;p&gt;If you are pre-product and want a partner, the &lt;a href="https://kunalvohra.com/blog/how-to-find-a-technical-cofounder" rel="noopener noreferrer"&gt;technical co-founder guide&lt;/a&gt; is the one to read, and the &lt;a href="https://kunalvohra.com/blog/technical-cofounder-equity-split" rel="noopener noreferrer"&gt;equity split post&lt;/a&gt; covers what to offer. The rest of this article assumes you are hiring, not partnering.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 3: Write the job for the role you have, not the title
&lt;/h2&gt;

&lt;p&gt;Most CTO job descriptions are copied from a company ten times the size. They ask for someone who has scaled to millions of users, managed fifty engineers, and set a multi-year platform strategy, and then they hand that person a team of four and a product that needs to ship by March. The senior candidate reads the description, joins, and spends the first quarter building the org chart the description promised.&lt;/p&gt;

&lt;p&gt;Answer three questions before you write anything:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;What has to be true in twelve months?&lt;/strong&gt; Shipped features, a hired team, a security certification, a platform that survives ten times the load. The CTO's job is whichever of those the company cannot get without them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hands on the keyboard or not?&lt;/strong&gt; With fewer than six engineers, a CTO who does not write code is a manager without enough people to manage. Say explicitly whether you expect them to build.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;What is the one thing that breaks if nobody senior is in the room?&lt;/strong&gt; That sentence is the job description. Everything else is a nice-to-have.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Write the description in that order: outcomes, then hands-on expectation, then the one thing. Leave the ten-year-experience laundry list out. The right person will recognise the job; the wrong one will self-select out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 4: Where to actually find a CTO
&lt;/h2&gt;

&lt;p&gt;Job boards are the worst place to find a CTO and the first place most founders look. Senior technical leaders are almost never actively applying; the good ones are pulled, not pushed. In rough order of how often it works:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your investors.&lt;/strong&gt; Every fund keeps an informal list of technical leaders between roles or looking for their next thing. Ask for introductions, not for a list. A warm intro from a partner who has backed the person before is the single highest-quality source I know of.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your engineers' networks.&lt;/strong&gt; Your best engineer has worked for somebody they still respect. Ask them, specifically: who is the best technical leader you have ever reported to, and are they reachable? Engineers rarely volunteer this and almost always have an answer.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Founders who have exited.&lt;/strong&gt; Their former CTOs are often available, well-referenced, and looking for something earlier-stage than a big-company role. Founder communities and your investors' portfolios are where these introductions come from.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fractional first.&lt;/strong&gt; Engaging a &lt;a href="https://kunalvohra.com/cto-as-a-service" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; for three to six months is the lowest-risk way to hire a full-time one: you see the person under load before any equity conversation, and many fractional engagements convert. Even when they do not, a good fractional CTO will define the full-time role properly and help you interview for it. That is a large part of what I do in &lt;a href="https://kunalvohra.com/interim-cto" rel="noopener noreferrer"&gt;interim engagements&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Executive search.&lt;/strong&gt; Retained CTO recruiters charge around a third of first-year compensation and are worth it above Series B, when the role is well-defined and the pool is global. Below that, they tend to send you the copied job description's candidates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Communities and events.&lt;/strong&gt; Slower, but real. Technical meetups, open-source maintainers in your stack, conference speakers on the exact problem you have. If someone has spent three years talking publicly about the thing your product needs, they are a better lead than a CV.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 5: How to evaluate a CTO when you cannot evaluate their code
&lt;/h2&gt;

&lt;p&gt;This is the step non-technical founders lose sleep over, and the good news is that the most predictive signals are not technical. I have written a full &lt;a href="https://kunalvohra.com/blog/cto-interview-questions" rel="noopener noreferrer"&gt;CTO interview question bank&lt;/a&gt;, but the five tests below are the ones that decide it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. "Walk me through a system you built, and what broke."&lt;/strong&gt; Every real system has broken. A candidate who describes a failure, what it cost, what they changed, and what they would do differently is telling you how they will behave when your system breaks. A candidate who has only stories of success has either not built much or is not going to tell you the truth later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. "What would you change in our codebase in the first thirty days?"&lt;/strong&gt; Give them read access to the repository for a week before the final interview. A senior person will come back with three specific things, ranked, and at least one of them will be "nothing yet, I need to understand why it was done this way." A junior person will come back with a rewrite.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Reference calls with engineers who reported to them.&lt;/strong&gt; Not their peers, not their CEO: the people they managed. Ask one question: would you work for this person again, and why? The pause before the answer is the data.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. A paid trial project.&lt;/strong&gt; Two to four weeks, a real problem, real money. This is the only way to see how someone works with your actual team, and any candidate who is offended by the idea has told you something useful. Fractional engagements are essentially this, extended.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. How they handle "I don't know."&lt;/strong&gt; Ask something at the edge of their expertise. The best technical leaders say "I don't know, here is how I would find out" within a sentence. The worst ones bluff, and a CTO who bluffs to you will bluff to investors and customers.&lt;/p&gt;

&lt;p&gt;Whiteboard algorithm interviews, take-home coding tests, and system-design puzzles tell you almost nothing at this level. The person is going to hire engineers, make architecture calls, and represent you to investors; test for those.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 6: What to pay a startup CTO
&lt;/h2&gt;

&lt;p&gt;Compensation is the part founders get most wrong in both directions: too much equity to a hire who joins post-funding, or too little cash to someone they expect to work like a co-founder. Rough shape, US market, mid-2026:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Full-time CTO, seed to Series A:&lt;/strong&gt; salary typically in the $180,000 to $260,000 range depending on city and how much the person is taking below market, plus 1 to 4 percent equity on a four-year vest with a one-year cliff. Earlier stage and lower salary push the equity up; later stage and market salary push it down.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Full-time CTO, Series B and later:&lt;/strong&gt; market salary, equity usually under 1 percent, and the equity is negotiated against the last round's valuation rather than a percentage.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fractional CTO:&lt;/strong&gt; monthly retainers run $4,000 to $15,000 across the market for two to three days a week. My own tiers are &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;published&lt;/a&gt; and lower than that, held through December 2026. No equity by default; a cash and equity mix is possible when a founder prefers it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Technical co-founder:&lt;/strong&gt; this is not a hire and should not be paid like one; the &lt;a href="https://kunalvohra.com/blog/technical-cofounder-equity-split" rel="noopener noreferrer"&gt;equity split post&lt;/a&gt; covers it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two rules. First, vesting always, including for a co-founder, including for someone you have known for a decade. Second, never trade equity for a discount on a fractional retainer unless you expect the person to still be around in four years; equity is the most expensive currency you have, and a retainer is the cheapest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Step 7: The offer and the first ninety days
&lt;/h2&gt;

&lt;p&gt;Make the offer in writing with the outcomes from Step 3 attached. The best CTO hires I have seen started with a one-page document that said: here is what we need true in twelve months, here is what you own, here is what you do not own, here is how we will know it is working at ninety days. It prevents the two most common failures: a CTO who builds a platform nobody asked for, and a founder who keeps making technical decisions behind their new CTO's back.&lt;/p&gt;

&lt;p&gt;Then get out of the way for the first month, with one exception: the ninety-day check-in you agreed to in the offer. If the outcomes are visibly on track, you hired well. If the CTO has spent ninety days on a reorganisation or a rewrite that was not in the document, you have your answer early, which is the whole point of writing it down.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red flags, briefly
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A CTO candidate who wants a title and a team before there is work for either.&lt;/li&gt;
&lt;li&gt;No failure stories, or failure stories in which nothing was their fault.&lt;/li&gt;
&lt;li&gt;A rewrite proposed before they have read the code.&lt;/li&gt;
&lt;li&gt;Unwillingness to do a paid trial or to give engineer references.&lt;/li&gt;
&lt;li&gt;Equity demands calibrated to a co-founder when they are joining after the money.&lt;/li&gt;
&lt;li&gt;Fluency in the current framework and silence on what happens when it breaks at 2 a.m.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;How much does it cost to hire a CTO?&lt;/strong&gt; A full-time startup CTO in the US runs about $260,000 a year fully loaded before equity, and a retained search adds roughly a third of that once. A fractional CTO runs $4,000 to $15,000 a month across the market, with no equity and no search fee. The cheaper option is almost always the right one until you have eight or more engineers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How long does it take to hire a CTO?&lt;/strong&gt; A full-time search through investors and networks typically takes four to six months from the decision to the start date. A fractional or interim engagement can start within a week or two, which is why many founders use one as the bridge while they search.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Can a non-technical founder hire a CTO?&lt;/strong&gt; Yes, and the five tests above are designed for exactly that. The mistake is trying to evaluate code; evaluate judgment, failure stories, references from engineers, and behaviour on a paid trial instead. A fractional CTO can also run the technical side of the search for you.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Are CTO recruitment services worth it for a startup?&lt;/strong&gt; Above Series B, usually. Below it, the fee is high relative to the round and the candidates tend to be optimised for the job description rather than the company. Investor and engineer introductions are cheaper and better at early stage.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should a startup CTO get equity?&lt;/strong&gt; A full-time CTO joining after funding, yes, typically 1 to 4 percent vesting over four years. A fractional CTO, not by default. A technical co-founder is a different question entirely and is answered in the equity split post.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is the difference between hiring a CTO and finding a technical co-founder?&lt;/strong&gt; A co-founder joins before the money, shares the risk, and earns a large equity stake for it. A CTO is hired after there is a company to run, is paid mostly in cash, and gets a small equity stake to align incentives. Founders who try to hire a CTO on co-founder terms, or find a co-founder on hire terms, usually end up with neither.&lt;/p&gt;

&lt;p&gt;If you are in the middle of this decision, &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;book a call&lt;/a&gt; and describe where the company is. I will tell you which shape you need, and if the answer is a full-time hire I will help you write the role and interview for it rather than sell you a retainer. If the answer is fractional or interim, the &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO page&lt;/a&gt; and the &lt;a href="https://kunalvohra.com/interim-cto" rel="noopener noreferrer"&gt;interim CTO page&lt;/a&gt; describe how each engagement runs, with the pricing published.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>career</category>
      <category>leadership</category>
      <category>entrepreneurship</category>
    </item>
    <item>
      <title>Technical Co-Founder Equity Splits: What's Fair in 2026</title>
      <dc:creator>Kunal Vohra</dc:creator>
      <pubDate>Tue, 22 Sep 2026 12:00:00 +0000</pubDate>
      <link>https://dev.to/kunalvohra/technical-co-founder-equity-splits-whats-fair-in-2026-5b21</link>
      <guid>https://dev.to/kunalvohra/technical-co-founder-equity-splits-whats-fair-in-2026-5b21</guid>
      <description>&lt;p&gt;If you are pre-product and pre-revenue, and a technical co-founder is going to build the entire product while you handle everything else full time, the defensible range is 40 to 50 percent of the founder pool. The more evidence you bring to the table, in revenue, committed funding, a real domain moat, or a full-time head start measured in years rather than weeks, the further the split can tilt toward you, into the 55/45 to 70/30 zone.&lt;/p&gt;

&lt;p&gt;That is the whole answer. Everything below is about how you get to a number inside those ranges, and how to structure it so nobody is quietly furious in month fourteen.&lt;/p&gt;

&lt;p&gt;I have been the technical co-founder six times, across three continents, and I have turned the offer down far more often than I have taken it. I have also been on the other side, watching a split I was not part of poison a company that the market was actively trying to keep alive. So this is written from the negotiating table rather than from a template. The longer piece on &lt;a href="https://kunalvohra.com/blog/how-to-find-a-technical-cofounder" rel="noopener noreferrer"&gt;how to find a technical co-founder&lt;/a&gt; covers the search itself; this one is only about the equity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The short answer, by stage
&lt;/h2&gt;

&lt;p&gt;The single biggest input is what exists on the day the conversation happens. Roughly:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Idea only, nothing built, no revenue, no funding.&lt;/strong&gt; Near-equal, 40 to 50 percent of the founder pool. You are asking someone to create the entire product from nothing, on the same risk you are taking. There is very little to justify a large gap.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A prototype exists, built by contractors or by you.&lt;/strong&gt; 35 to 45 percent. A prototype is evidence, and it reduces the unknowns the technical co-founder is absorbing. It rarely survives contact with production, so discount it accordingly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Real revenue or committed funding.&lt;/strong&gt; 25 to 40 percent. Money already on the table changes the risk profile genuinely, and a rational technical co-founder will price that in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Established company hiring a technical leader.&lt;/strong&gt; This is not a co-founder conversation any more. It is an executive hire, typically low single digits of the company post-funding, and calling it a co-founder role to justify a below-market salary is a tactic engineers recognise immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These are ranges, not a formula. Anyone selling you a calculator that spits out a precise percentage is selling certainty that does not exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why "it was my idea" is not an input
&lt;/h2&gt;

&lt;p&gt;The most common opening position I hear is that the idea is worth the majority of the company. It is not, and pretending otherwise is the fastest way to lose the engineer you were trying to recruit.&lt;/p&gt;

&lt;p&gt;Ideas are cheap in the sense that matters here: several other people are having yours right now, and the difference between them and you will be execution. If your idea genuinely is the asset, the question is why you cannot fund its construction. If the answer is that nobody will fund it yet, then the risk being absorbed by the person who builds it is real, and it prices accordingly.&lt;/p&gt;

&lt;p&gt;What legitimately shifts the number in your favour is evidence: customers who have paid, a distribution advantage nobody can copy, domain knowledge that took a decade to acquire, funding already committed, or a full-time head start where you have been at this for two years and they are joining on Monday. Those are inputs. "I thought of it" is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  The four things that actually move the number
&lt;/h2&gt;

&lt;p&gt;When I am the one deciding whether to say yes, I am weighing four things, and they are the same four on both sides of the table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Who is carrying how much risk, in cash terms.&lt;/strong&gt; Is either of you taking a salary? Whose savings are funding the next twelve months? A founder who has been unpaid for eighteen months has contributed real capital, and it should count. So has a technical co-founder who leaves a senior salary to build for free.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Full-time or not.&lt;/strong&gt; A part-time co-founder is not a co-founder. If one of you is keeping a job while the other goes all in, that gap has to show up in the split or in the vesting, and it is the single most common source of later resentment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. What happens if this person leaves in month six.&lt;/strong&gt; This is a vesting question rather than a percentage question, and I will come back to it, but it belongs in your thinking from the start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Whether the technology is the moat.&lt;/strong&gt; If the product is a well-understood build, a marketplace, a booking flow, a dashboard over an API, then you need it built well rather than invented, and the equity case for a co-founder is weaker. If the hard part is genuinely hard, novel AI systems, infrastructure, security-critical products, then the person solving it is not a builder you are hiring, they are the reason the company can exist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Vesting matters more than the split
&lt;/h2&gt;

&lt;p&gt;Here is the thing founders discover late: the structure protects both of you far more than the percentage does.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Four-year vesting with a one-year cliff, for both founders, with no exceptions.&lt;/strong&gt; Not just the technical co-founder. Both of you, including whoever holds the larger share. This is not a sign of distrust, it is the mechanism that makes trust affordable. It makes "half the company to someone who left in month four" impossible, which is precisely what allows a generous split to be safe to offer in the first place.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Put decision rights in writing.&lt;/strong&gt; Who decides product, who decides technical architecture, what spending limits exist, and what needs both signatures. Most co-founder disputes I have watched were not about equity, they were about a decision someone thought was theirs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agree the exit script before you need it.&lt;/strong&gt; What happens if one of you wants out, gets an offer they cannot refuse, or simply stops showing up. It is an uncomfortable conversation on day one and a catastrophic one to improvise in year two.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Write it down properly, with a lawyer, before anyone writes code.&lt;/strong&gt; Handshake splits between friends are the single most expensive form of optimism in startups. The document costs a small fraction of what fixing its absence costs.&lt;/p&gt;

&lt;p&gt;A fair split with no vesting is worse than an aggressive split with proper vesting. If you only take one thing from this piece, take that.&lt;/p&gt;

&lt;h2&gt;
  
  
  Co-founder, first engineer, or advisor
&lt;/h2&gt;

&lt;p&gt;Three very different roles get labelled as co-founder, usually because equity is easier to offer than salary. The market ranges are not close to each other:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Technical co-founder:&lt;/strong&gt; the double-digit percentages above, vesting over four years, full-time, sharing the risk and the decisions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;First engineer:&lt;/strong&gt; typically 0.5 to 2 percent, with a salary, joining after the founding risk has been partly absorbed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advisor:&lt;/strong&gt; typically 0.25 to 1 percent, vesting over two years, for a few hours a month of judgment rather than ownership of delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If what you actually need is someone to build the thing, and you call it a co-founder role to avoid paying, you will attract exactly the engineers who cannot tell the difference. That is the opposite of the selection you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Three patterns that turn a fair deal into resentment
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;The silent part-timer.&lt;/strong&gt; One founder is full-time, the other is keeping a job "for another couple of months" that becomes another year. The equity was agreed on the assumption of parity that never arrived. Fix this with vesting tied to actually starting full-time, and by saying the quiet part out loud early.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The renegotiation after the hard part.&lt;/strong&gt; The product ships, the company raises, and suddenly the split is revisited because the technical work "is done now". It is never done, and nothing destroys a technical co-founder's commitment faster than discovering their share was contingent on a phase.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The 90/10 that was accepted quietly.&lt;/strong&gt; An engineer takes a token share because they wanted to work on the problem, tells themselves it is fine, and spends two years watching a company they built be mostly owned by someone else. It does not stay fine. It converts into slow disengagement, and it will cost you far more than the equity would have.&lt;/p&gt;

&lt;p&gt;A split that leaves either founder quietly resentful is a liability on the cap table that no amount of traction fixes.&lt;/p&gt;

&lt;h2&gt;
  
  
  The option most founders never price
&lt;/h2&gt;

&lt;p&gt;Before you give away a third of your company, it is worth doing the arithmetic on the alternative coldly, because most founders never do.&lt;/p&gt;

&lt;p&gt;If your product is a well-understood build and your unfair advantage is distribution or domain knowledge, you may not need a co-founder at all. You need the product built well and senior technical judgment available while you build the company. That is a cash cost with a defined end, not a permanent claim on your exit.&lt;/p&gt;

&lt;p&gt;That is the trade I offer founders now. I build MVPs &lt;a href="https://kunalvohra.com/mvp-development" rel="noopener noreferrer"&gt;priced per screen&lt;/a&gt;, so the total is known before anything is built, and I work as a &lt;a href="https://kunalvohra.com/fractional-cto" rel="noopener noreferrer"&gt;fractional CTO&lt;/a&gt; with the pricing published, at a monthly cost that is a rounding error next to a co-founder's equity. The &lt;a href="https://kunalvohra.com/fractional-cto-cost" rel="noopener noreferrer"&gt;cost and rates guide&lt;/a&gt; has the full comparison against a full-time hire.&lt;/p&gt;

&lt;p&gt;And sometimes, a few months into an engagement like that, it turns into something more permanent. That is the best possible way to choose a co-founder: after you have already worked together, shipped something, and seen how the other person behaves when it breaks at two in the morning.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently asked questions
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;What is a fair equity split for a technical co-founder?&lt;/strong&gt; Pre-product and pre-revenue, with the technical co-founder building everything, 40 to 50 percent of the founder pool is defensible. With a prototype, 35 to 45. With revenue or committed funding, 25 to 40. Below roughly 20 percent for a genuine full-time founding role, expect most experienced engineers to decline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Should a technical co-founder get 50 percent?&lt;/strong&gt; Often yes, at the idea stage, and it is less frightening than it sounds once both sides vest over four years with a cliff. The scenario founders fear, handing half the company to someone who leaves, is exactly what vesting prevents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What if I have already built a prototype?&lt;/strong&gt; It shifts the number modestly, not dramatically. Be honest with yourself about whether the prototype is an asset or a liability the co-founder will have to rewrite. A contractor-built demo usually does not survive production, and every experienced engineer knows it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do co-founders always split equally?&lt;/strong&gt; No, and equal splits are not automatically correct. They are simply common at the idea stage because the contributions genuinely are comparable. Unequal splits work fine when the reason is a fact both people agree on, and fail when it is a position one person negotiated harder for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How does vesting work for founders?&lt;/strong&gt; Standard is four years with a one-year cliff: nothing vests until twelve months, then monthly. It applies to every founder including the majority holder. Add acceleration terms for a change of control if you want, but do not skip the cliff.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What about equity instead of salary for a fractional CTO?&lt;/strong&gt; That is a different and much smaller conversation, usually a partial swap rather than a founder-sized grant. I do it case by case, from a small equity component up to roughly half and half, depending on stage and how long we expect to work together. It is a way to share risk without restructuring your cap table.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When should I not look for a technical co-founder at all?&lt;/strong&gt; When the technology serves your advantage rather than being it, when you can fund development modestly, or when the search would take the six to nine months you do not have. I covered the full version of this in &lt;a href="https://kunalvohra.com/blog/how-to-find-a-technical-cofounder" rel="noopener noreferrer"&gt;how to find a technical co-founder&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are in the middle of this decision, &lt;a href="https://kunalvohra.com/contact" rel="noopener noreferrer"&gt;tell me what you are building&lt;/a&gt; and I will give you the straight read on whether the situation calls for equity, a retainer, or neither yet. I take on &lt;a href="https://kunalvohra.com/technical-cofounder" rel="noopener noreferrer"&gt;technical co-founder partnerships&lt;/a&gt; very selectively, and everything on this page is the same bar I apply to myself.&lt;/p&gt;

</description>
      <category>entrepreneurship</category>
    </item>
  </channel>
</rss>
