Comparison
RAG vs Fine-tuning
Retrieval-augmented generation changes what a model sees at the moment it answers. Fine-tuning changes how the model behaves. Most teams asking which they need have either a knowledge problem or a behaviour problem, and a good share have one that clearer prompting would fix for far less than either.
What the choice is actually between
Retrieval-augmented generation leaves the model alone and changes its input. When a question arrives, your system searches your own content, picks the passages most likely to contain the answer, and places them in the prompt alongside the question with an instruction to answer from them. The model is the same general-purpose model it was yesterday. What it knows about your business, at the moment of answering, is whatever the retrieval step put in front of it. Update a document and the next answer reflects it. Restrict a document and users without access never see it retrieved.
Fine-tuning changes the model itself. You take a pre-trained model and continue training it on examples of the inputs you will give it and the outputs you want back, which adjusts its weights so it produces that kind of output more reliably. That is an effective way to change behaviour: the format it answers in, the tone, the way it classifies or extracts, its handling of a specialised domain’s language, or the ability of a small model to do one job that previously needed a large one. It is a poor way to give a model facts, because facts learned in training cannot be cited, cannot be updated without training again, cannot be withheld from users who should not see them, and are recalled less reliably than facts placed directly in front of the model.
So the comparison is less a contest than a diagnosis. If the model gives wrong or outdated answers about your products, policies or records, the problem is what it sees, and retrieval addresses it. If the model has the right information but answers in the wrong shape, ignores your conventions, or costs too much per call because the prompt has grown into pages of instructions, the problem is behaviour, and fine-tuning is one of several answers. Many production systems use both. And a large share of the teams who arrive at this question have not yet tried the cheaper fixes: clearer prompts with good examples, structured output, a smaller model for the easy cases, or simply putting the whole document in the prompt.
The short answer
If your problem is that the model does not know your information, use retrieval. That covers most business requests: answering from policies, documentation, contracts, product data, tickets or records. RAG keeps answers current without retraining, lets every answer cite its source, can respect the permissions of the person asking, and turns hallucination into something you can measure and reduce rather than something you hope training has fixed. Its difficulty is real and well understood, and it lives in the retrieval: how documents are split, indexed, searched and ranked.
Fine-tune when the problem is behaviour that prompting cannot make reliable, and you have enough good examples to teach it. The strongest cases are narrow and high-volume: a consistent output format or style across a very large number of calls, a classification or extraction task with plenty of labelled data, specialised language the base model handles badly, or moving a well-defined job from a large, expensive model to a small, fast one that you may be able to host yourself. Done for those reasons, fine-tuning can repay its data preparation and evaluation cost. Done to teach a model your product catalogue, it disappoints.
Before either, exhaust the cheap options, and we say that as people who are paid to build both. Rewrite the prompt with clear instructions and a handful of worked examples, require structured output against a schema, try a smaller model, cache the stable part of the prompt, and if your knowledge fits in the model’s context window, try putting all of it in the prompt before building a retrieval pipeline. A good share of the problems people bring to this question disappear at that stage. What remains is a genuine knowledge or behaviour problem, and the answer above applies.
Side by side
| Dimension | RAG | Fine-tuning |
|---|---|---|
| What it changes | The model’s input. Relevant passages from your content are retrieved at query time and placed in the prompt. | The model’s weights. Further training on your examples shifts how it responds to every future input. |
| What it is best at | Knowledge: answering from specific, changing or private information the model was never trained on. | Behaviour: format, style, tone, consistent judgement on a narrow task, and getting a smaller model to do one job well. |
| Freshness | As current as the index. Change a document, re-index it, and the next answer uses it, as soon as the pipeline picks up the change. | Frozen at the last training run. New information means new training data, a new run, new evaluation and a new deployment. |
| Citations | Natural. The system knows which passages it supplied, so every answer can point to them and a reader can check the claim. | Not available from the weights. A fine-tuned model cannot tell you which training example a statement came from. |
| Hallucination control | Measurable and adjustable: answer only from retrieved passages, say so when they lack the answer, and score faithfulness to sources. Still fails when retrieval returns the wrong passages. | Can make behaviour on the trained task more consistent. Does not make the model reliably recall facts, and training on unfamiliar facts can make confident errors more likely. |
| Access control | Permission-aware if built that way: filter retrieval by what the asking user may see, and the model never receives the rest. | None at the level of individual facts. Whatever is trained in is available to everyone who can query the model. |
| Removing information | Delete or update the document and its chunks, and it stops being retrieved on the next query. | Hard. Removing what a model learned generally means retraining without the data, which matters when someone asks for their data to be deleted. |
| Data preparation | Extracting, cleaning, splitting and indexing documents, with metadata and permissions. Ongoing, because the sources keep changing. | Curating consistent, high-quality pairs of inputs and ideal outputs that represent the real task. Usually the largest part of the project. |
| Cost structure | Indexing and embedding costs, a search per request, and more input tokens per call because retrieved passages go into the prompt. | A training charge per run, evaluation runs, and inference that can be cheaper per call if the tuned model is smaller or the prompt shorter. Tuned models may be priced differently from base models. |
| Latency | Adds a retrieval step and a longer prompt to every request. | No retrieval step and often a shorter prompt, so it can be faster, particularly when a small tuned model replaces a large one. |
| Evaluation | Two layers you can test separately: does retrieval return the right passages, and does the answer stay faithful to them. | A held-out test set compared against the base model with your best prompt, plus checks that tuning has not damaged abilities you still rely on. |
| Changing models | Easy. The index and pipeline work with any capable model, so an upgrade or a new provider is a configuration change and an evaluation run. | Each tune belongs to one base model. When that base is superseded or retired, you prepare, tune and evaluate again. |
| Privacy and data residency | Documents stay in your own store, in a location you choose. Retrieved passages are sent to the model at query time, so the model provider’s terms apply to them. | Hosted tuning means uploading the training set to the provider. Tuning an open-weights model on your own infrastructure keeps everything inside your environment. |
| Typical failure | The answer exists in your content but retrieval does not find it, so the model answers from the wrong passage or says it does not know. | The model learns the surface pattern of the examples, including their mistakes, and gets worse at things outside the narrow task. |
Choose RAG when
- The model needs to answer from your information. Policies, manuals, contracts, product specifications, support history, research and records. If the right answer depends on facts the base model was never trained on, retrieval is the direct way to supply them.
- The information changes. Prices, stock, procedures, regulations, case notes and documentation move every week. Retrieval reflects a change as soon as it is indexed, while a fine-tuned model starts going out of date the day training finishes.
- Answers must be checkable. If a reviewer, a customer or an auditor needs to see where an answer came from, citations to the source passage are the mechanism, and only retrieval can provide real ones.
- Different users may see different things. When access depends on role, team, client or contract, retrieval can filter by the user’s permissions before anything reaches the model. Fine-tuning has no equivalent, because everything trained in is available to everyone.
- You may need to remove information. Data protection obligations, expired agreements and withdrawn documents all require that something can be made to disappear. Deleting a document from an index is routine. Getting a model to forget something it was trained on is not.
- You do not have a curated training set and do not want to build one. Retrieval works with the documents you already have, cleaned and structured, rather than requiring a large set of carefully written examples of ideal outputs.
- You want to stay free to change models. Models improve and prices move often. A retrieval system is largely independent of the model it feeds, so moving to a better or cheaper model is a configuration change followed by your evaluation suite, with no retraining.
- Accuracy needs to be measured rather than assumed. Retrieval gives you two things to test separately, whether the right passages are found and whether the answer stays faithful to them, which makes failures diagnosable instead of mysterious.
Choose Fine-tuning when
- You need a consistent format or style at high volume, and prompting gets close but not close enough. If every output must follow a house style, a strict template or a domain’s conventions, and the prompt has grown into pages of instructions that still slip, training on good examples makes the behaviour the default rather than a request.
- You have a narrow task and plenty of labelled examples. Classification, routing, entity extraction, tagging and scoring tasks backed by a large history of correct decisions are where fine-tuning is strongest, because the training data already exists and the measure of success is clear.
- You want a smaller, cheaper or faster model to do a job a large one does today. Fine-tuning a small model on high-quality outputs for one well-defined task can bring it to an acceptable standard on that task, cutting cost and latency on every call. At high volume that difference adds up quickly.
- You must run the model inside your own environment. If data cannot leave your infrastructure, or you need a model that works offline or on a device, a small open-weights model fine-tuned for the job and hosted yourself may be the only design that meets the constraint. Retrieval can still sit alongside it.
- The material is unusual enough that the base model misreads it. Specialised notation, abbreviations, internal codes, or text in a language or register the base model handles poorly. Retrieval can supply definitions, but if the model misreads the material itself, examples teach it more reliably than instructions do.
- Your prompts have become long and expensive. When most of each request is the same instructions and examples, moving that behaviour into the weights shortens every call. Check prompt caching first, since it attacks the same cost without any training, but where caching does not fit the pattern of your traffic, tuning can.
- You need a model to apply a judgement consistently. Deciding what to escalate, how to grade a piece of work, or which tone suits which kind of message is behaviour, and examples of past good decisions teach it more reliably than a written description of the policy.
- Retrieval is already in place and the remaining errors are behavioural. If the right passages are being retrieved and the model still misuses them, ignores the answer format or cites carelessly, tuning on good examples of grounded answers is a legitimate next step, and the two approaches combine well.
Knowledge or behaviour: working out which problem you have
The quickest diagnostic costs an afternoon. Collect twenty or thirty real cases where the model gets it wrong. For each one, paste the information it would need straight into the prompt by hand, then run it again. If the answers become right, the problem is knowledge: the model can do the task once it can see the facts, and retrieval is how you put the facts in front of it automatically. If the answers are still wrong with the correct information sitting in the prompt, the problem is behaviour, and the next move is better instructions, then, only if those fail, training.
Knowledge problems have recognisable symptoms. The model states a price, a policy or a procedure that is wrong or out of date. It invents a plausible feature your product does not have. It says it does not know something your documentation plainly covers. It answers well about anything public and badly about anything internal. Every one of these is about what the model can see, and no amount of training on example answers fixes that durably, because next month the facts will have moved.
Behaviour problems look different. The facts are right but the answer is in the wrong format, too long, in the wrong register, or inconsistent between similar inputs. A classifier puts the same kind of message in different categories on different days. Extraction misses fields that are plainly present. The model ignores a convention that matters to you, however many times the prompt repeats it. Or the output is fine but each call is too slow or too expensive, because the prompt has grown into pages of instructions and examples. These are what fine-tuning addresses, and what prompting often addresses more cheaply.
Many real systems have both, and the order matters. Fix the knowledge problem first, because you cannot judge a model’s behaviour on inputs that are missing the facts it needed. Once retrieval reliably supplies the right passages, the errors that remain are behavioural, and you have a clean picture of what training, or a better prompt, would need to change.
Freshness, citations and hallucination control
Freshness is where the two differ most plainly. A retrieval system is as current as its index, and a pipeline that re-indexes changed documents, removes deleted ones and keeps versions straight means the next answer reflects today’s content. A fine-tuned model is a snapshot of its training data. It knows nothing about what changed afterwards, and updating it means new examples, a new training run, new evaluation and a new deployment. For information that changes every week, that cycle never catches up.
Citations follow from the same mechanism. A retrieval system knows exactly which passages it put in front of the model, so it can show them, link to them and let a reader check the claim. That changes how much trust an answer deserves and how quickly a wrong one gets caught. A fine-tuned model cannot point to the training example a statement came from, because the knowledge has been blended into its weights. You can train a model to produce citations in a particular format, but only retrieval gives it something real to cite. Evaluate the citations as well: a citation that does not support the sentence it is attached to is worse than none, because it lends false authority.
Retrieval reduces hallucination without eliminating it. Models still misread a passage, merge two passages into a claim neither makes, or ignore the context and answer from training. The controls are well established: instruct the model to answer only from the supplied passages and to say plainly when they do not contain the answer, require a citation for each claim, check automatically whether each claim is supported, and show users a clear "not found" rather than a guess. Fine-tuning gives much weaker control over facts. Training a model on facts does not make it recall them reliably, and published research suggests that training on information the model did not already know can make it more willing to state things it does not know. Use fine-tuning to shape how a model answers, and retrieval to decide what it answers from.
Most of the engineering in a retrieval system is the retrieval. Documents are split into chunks that follow their structure, each chunk is turned into an embedding and stored, and at query time the system finds the chunks closest in meaning to the question. Vector databases do this at scale, either as managed services such as Pinecone or as an extension to a database you already run, such as pgvector for PostgreSQL. Pure semantic search handles exact terms like product codes and names poorly, so good systems combine it with keyword search, filter on metadata such as date, product and permission, and rerank the candidates before choosing what goes into the prompt. A small collection may need no dedicated vector store at all.
Data preparation: where the effort really goes
For retrieval, data preparation means turning documents into reliable, retrievable passages. Text has to be extracted from PDFs, web pages, spreadsheets, slide decks and sometimes scans, with tables and headings preserved well enough to keep their meaning. Navigation, boilerplate and repeated footers have to go. Chunks have to follow the structure of the document so that each passage carries its own context. Each chunk needs metadata: source, date, owner, version and who is allowed to see it. Then comes the uncomfortable part. When two documents disagree, the system answers from whichever it happens to retrieve, so contradictory or outdated content has to be resolved, and that is an editorial task rather than an engineering one.
For fine-tuning, data preparation means building a set of examples, each an input paired with the ideal output, that represents the task as it will really arrive. Consistency matters more than volume: if two experts would label the same case differently, the model learns the disagreement. The set needs the hard cases and edge cases, not only the easy majority, and a held-out portion the model never trains on, so you can measure it honestly. Writing or reviewing those examples takes the time of people who know the domain, and that time is usually the largest cost in the project. Generating candidate examples with a larger model and having experts review them can help, but check the terms of the model whose outputs you are training on, because some providers restrict that use.
Most of this is ordinary data engineering. Parsers, cleaning scripts, scheduled pipelines, deduplication and validation are typically written in Python, and frameworks such as LangChain provide document loaders, text splitters and integrations with the common vector stores and model APIs, which make a first version quick to assemble. As requirements sharpen, teams often replace parts of a framework with their own code where they need tighter control over chunking, ranking or permissions. That is a normal evolution and nothing to avoid.
Neither approach is a one-off effort. A retrieval pipeline runs for as long as the sources change, and it needs monitoring for failed parses, stale indexes and permissions that have drifted out of sync with the source systems. A fine-tuning dataset needs maintaining as the task evolves, and the tune has to be redone whenever you move to a new base model or the provider retires the one you tuned. In most generative AI development projects, the data side of either approach takes more effort than the model side, and plans that budget the other way round tend to run late.
Cost structure, without invented numbers
Hosted models are billed per token, usually with input and output priced separately. Fine-tuning on a hosted platform generally adds a training charge based on the volume of data processed, then bills inference on the tuned model, sometimes at a different rate from the base model. Managed vector stores are usually priced on usage, by storage and queries. Self-hosting an open-weights model swaps per-token charges for the cost of the hardware or cloud instances, which you pay whether or not they are busy, plus the people to run them. Rates, and the list of models that can be tuned at all, change often, so check current rate cards and model your own traffic against them.
Retrieval’s costs are front-loaded into engineering and then spread thinly across each request. Every call carries retrieved passages, so input tokens per call go up. Embeddings must be computed for every chunk when it is indexed and for every query. Storage and the search service cost something, usually modest next to the model calls themselves. The levers are retrieving fewer, better passages through reranking, caching the stable part of the prompt where the provider supports it, and using a smaller model when the retrieved passages make the task easy.
Fine-tuning’s costs concentrate in data preparation and evaluation, then in each training run, and there are usually several runs before one is good enough. The return comes per call: a shorter prompt, because the instructions and examples now live in the weights, and possibly a smaller, cheaper, faster model doing the job. That return scales with volume. At low volume, it rarely repays the preparation. At high volume on a narrow, stable task, it can, and that is the situation in which fine-tuning is most clearly the economic choice.
Count the costs that arrive later. A retrieval system needs its pipeline maintained and its index kept healthy. A fine-tuned model is tied to its base model, and when that base is superseded or retired, the tuning, evaluation and deployment are repeated. Retrieval moves to a new model with a configuration change and an evaluation run. Over a few years, that portability is often worth more than the per-call saving a tune delivered.
Privacy, permissions and data residency
With retrieval, your documents stay in your own store, in a location you choose, and only the passages relevant to a given question are sent to the model at query time. That still means passages leave your environment when the model is hosted, so the provider’s terms on retention, on whether API data may be used for training, and on where processing happens all apply. Those terms differ between providers and between products from the same provider, and they change, so read the current ones and choose the contract and region accordingly.
Retrieval can be permission-aware, and in any organisation with access controls it has to be. Store each chunk’s access rules alongside it, filter the search by the identity of the person asking, and keep those rules in sync when permissions change in the source system. Do not rely on instructions in the prompt to withhold information: anything placed in the model’s context should be assumed retrievable by a determined user. The safe rule is that a question can only ever retrieve what the person asking could have opened directly.
Fine-tuning has no equivalent. Everything in the training set becomes, in some diffuse form, available to everyone who can query the model, and there is no way to make one fact visible to one team and hidden from another. Removing something later generally means retraining without it, which is awkward when a person exercises a right to have their data deleted. Hosted fine-tuning also means uploading your training set to the provider, and for closed models the tuned model stays on the provider’s platform. Strip personal data from training sets unless the task genuinely needs it, and treat the training set as sensitive in its own right.
Where data must stay in a particular jurisdiction or inside your own infrastructure, both approaches can be built to comply. The options include regional processing offered by some providers, models hosted in a chosen region through the major cloud platforms, and open-weights models run entirely on your own infrastructure, with retrieval and any fine-tuning happening there as well. The trade-off with self-hosting is operational: you take on serving, scaling and upgrades, and the open models you can run yourself may be less capable than the largest hosted ones for some tasks. Weigh that against the constraint, rather than assuming the constraint is negotiable.
The cheaper options most teams skip
Start with the prompt. Many problems blamed on the model come from instructions that are vague, contradictory or missing the examples that would show the model what good looks like. Prompt engineering done properly is plain, methodical work: state the task and the audience, set out the rules and the edge cases, include a few worked examples of good output, and say what to do when the input does not fit. Version the prompt, keep a test set, and measure each change. A team that has done this rigorously is in a far better position to decide whether training is needed, because it knows what prompting can and cannot do for its task.
Use structured output for format problems. If the complaint is that the model returns the wrong shape, such as missing fields, invalid JSON or free text where a category was needed, constrain it. The major model APIs, including OpenAI and Claude, can hold output to a JSON schema, either directly or through tool definitions, and your code can validate the result and retry on failure. That solves most format problems without any training, and it is often the whole of what people hoped fine-tuning would fix.
Try a smaller model, and route between models. A well-prompted small model handles many classification, extraction and drafting tasks adequately, with lower latency and cost. Where some inputs are harder than others, send the easy ones to a small model and escalate the rest. If your prompts are long because of stable instructions and reference material, prompt caching, where the provider offers it, reduces the cost of repeating them. Each of these attacks the cost and latency arguments for fine-tuning directly, without a training pipeline to maintain.
And before building a retrieval pipeline, check whether you need one. Current models accept long contexts, and if your reference material is a handful of policies or a single product manual, putting all of it in the prompt, with caching for the repeated part, may be simpler and more accurate than chunking and searching it. The limits are real: cost grows with every call, models can attend less reliably to material deep inside a very long prompt, and there is no per-user filtering unless you choose what to include. When the material outgrows the context, or access varies by user, retrieval earns its complexity. Fixing the source documents, so they are correct, current and consistent, helps every one of these options.
Combining both, and moving from one to the other
The two combine naturally because they change different things. Retrieval supplies the facts, and a tuned model can be better at using them: answering in the house format, citing consistently, declining when the passages do not contain the answer, and keeping a steady tone. A less obvious combination is often more valuable, which is fine-tuning the retrieval side rather than the generator. Training an embedding model or a reranker on examples from your own domain, pairs of real questions and the passages that answer them, can improve what gets retrieved, and better retrieval improves every answer downstream.
Teams who tried to fine-tune knowledge into a model and are moving to retrieval should start from the source material behind the training set rather than the training set itself. Index the original documents, build an evaluation set from real questions, and run the tuned model and a retrieval system with a base model against the same set. Keep the tune only if it adds something behavioural that the base model, with good retrieval and a good prompt, cannot match. The comparison usually settles the question quickly.
Moving the other way, adding fine-tuning to a working retrieval system, is the more natural direction, and the production system supplies the data. Every answer that a reviewer approved or corrected, together with the passages it was given, is a training example of exactly the behaviour you want, drawn from real traffic. Collect them deliberately from the start, with consent and personal data handled properly, and when the time comes to tune, the hardest part of the work is already done.
The sequence that tends to work is prompt first, then structured output, then retrieval with an evaluation set, then fine-tuning only for the behavioural problems that remain, using examples gathered from the system itself. Keep one evaluation set constant across all of these steps, so each change is measured against the same questions and you can tell real improvement from a different sample. Each step is cheaper to undo than the one after it, which is a sound argument for taking them in that order.
Technologies involved
How we help
Common questions
What is the difference between RAG and fine-tuning?
Retrieval-augmented generation changes what the model sees: when a question arrives, the system finds relevant passages in your content and puts them in the prompt, so the model answers from them. Fine-tuning changes the model itself, by training it further on examples of inputs and ideal outputs, which shifts how it behaves. RAG is the tool for knowledge, especially knowledge that changes, needs citing or is restricted by permissions. Fine-tuning is the tool for behaviour, such as format, style, consistent judgement on a narrow task, or getting a smaller model to do one job well.
Can fine-tuning teach a model our company’s knowledge?
Not reliably, and it is the most common reason fine-tuning projects disappoint. A model trained on your documents may pick up their vocabulary and style, but it does not dependably recall specific facts, cannot cite where an answer came from, goes out of date as soon as anything changes, and makes everything it learned available to every user. Retrieval does each of those things better. Fine-tuning is worth considering once retrieval is supplying the facts and the remaining problems are about how the model uses them.
Does RAG stop hallucinations?
It reduces them and makes them measurable, but it does not stop them. Models can still misread a passage, combine two passages into a claim neither supports, or ignore the context and answer from training. If retrieval returns the wrong passages, the model may answer confidently from the wrong source. The controls are to instruct the model to answer only from what it was given, require citations, check automatically whether each claim is supported, show a clear "not found" when the answer is absent, and test retrieval and answers separately.
Is RAG cheaper than fine-tuning?
Usually cheaper to start and to change, though not always cheaper per call. Retrieval needs a pipeline and an index, and each request carries extra input tokens for the retrieved passages. Fine-tuning needs curated training data, which is mostly expert time, plus training and evaluation runs, and it has to be redone when the base model changes. Its saving comes per call, through shorter prompts or a smaller model, so it pays back mainly at high volume on a narrow, stable task. Model your own traffic against current rate cards before deciding.
Can we use RAG and fine-tuning together?
Yes, and many production systems do. Retrieval supplies current, citable, permission-filtered facts, and a tuned model can be better at using them: following your answer format, citing consistently and declining when the passages do not contain the answer. Fine-tuning can also improve retrieval itself, by training an embedding model or reranker on pairs of real questions and the passages that answer them. Build and evaluate retrieval first, then tune only for the problems that remain, using approved answers from the live system as training data.
Do we need a vector database for RAG?
Not always. If your material is small enough to fit in the model’s context window, you may be able to include all of it in the prompt and skip retrieval entirely. For a modest collection, a vector extension to a database you already run, such as pgvector for PostgreSQL, is often enough. Dedicated vector databases, managed or self-hosted, earn their place at larger scale, at high query volume, or when you need richer filtering. Many good systems also combine vector search with ordinary keyword search, because embeddings handle exact codes and names poorly.
Is our data safe if we fine-tune a hosted model?
It depends on the provider’s terms and on what you put in the training set. Hosted fine-tuning means uploading the training data, and for closed models the tuned model stays on the provider’s platform. Read the current terms on retention, use of your data and processing location. Separately, anything you train in becomes available to everyone who can query the model, cannot be restricted by user, and is hard to remove later. Strip personal data unless the task needs it, or fine-tune an open-weights model on your own infrastructure if the data cannot leave.
How much data do we need to fine-tune a model?
There is no fixed number, and quality and consistency matter more than volume. For changing format or tone, a modest set of excellent examples can show a measurable effect. For classification across many categories, you need enough examples of every category, including the hard and rare cases. Start small, compare the tuned model against your best prompt on a held-out test set, and add examples where errors cluster. If your experts disagree on how to label some cases, resolve that first, because the model will learn the disagreement.
Weighing RAG against Fine-tuning?
Tell us the volumes, the compliance position and who would run it day to day. We will tell you which one we would choose for your case, and say so plainly when it is not the one we sell.
- 01A senior engineer reads it. Not a form queue, and not an account manager.
- 02We reply either with questions or with a straight answer that we are not the right fit.
- 03If it looks like a fit, a technical call with the person who would actually run the delivery.
- 04Then scope, effort and risk in writing, before anyone signs anything.