<?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: Kapil Singhal</title>
    <description>The latest articles on DEV Community by Kapil Singhal (@kapilaxentis).</description>
    <link>https://dev.to/kapilaxentis</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%2F4168037%2Fb203f6d9-8d07-4d39-b0e0-c0184a7f1c99.png</url>
      <title>DEV Community: Kapil Singhal</title>
      <link>https://dev.to/kapilaxentis</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kapilaxentis"/>
    <language>en</language>
    <item>
      <title>A Pre-Production Checklist for LLM Agents: 30 Checks Before You Ship</title>
      <dc:creator>Kapil Singhal</dc:creator>
      <pubDate>Tue, 03 Nov 2026 04:46:27 +0000</pubDate>
      <link>https://dev.to/kapilaxentis/a-pre-production-checklist-for-llm-agents-30-checks-before-you-ship-23e0</link>
      <guid>https://dev.to/kapilaxentis/a-pre-production-checklist-for-llm-agents-30-checks-before-you-ship-23e0</guid>
      <description>&lt;p&gt;A prototype agent that works in a notebook is a long way from one you can leave running against real users and real systems. The gap is rarely the model. It is everything around it: evaluation, tool permissions, failure handling, observability and the boring operational work.&lt;/p&gt;

&lt;p&gt;This is the checklist we use before an LLM agent goes to production. It is model-agnostic and framework-agnostic. Copy it into your repo as &lt;code&gt;PRODUCTION_READINESS.md&lt;/code&gt; and tick it off honestly.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Scope and contract
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;One-sentence job description.&lt;/strong&gt; "The agent classifies inbound support emails and drafts a reply for human approval." If you can't write it, you can't test it.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Explicit non-goals.&lt;/strong&gt; List what the agent must not attempt, and make sure the system prompt and the tool list enforce them.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Input and output schemas.&lt;/strong&gt; Structured outputs (JSON schema, typed tool arguments) for anything another system consumes. Validate them, and reject or retry on failure.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Success metric agreed with the owner.&lt;/strong&gt; Pick one, such as task success rate on the eval set, escalation rate or handling time, with a baseline.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2. Evaluation
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;A versioned eval set&lt;/strong&gt; in the repo: real (anonymised) inputs, expected outputs or grading rubrics, and edge cases. Start with 50–100 cases and grow it from production failures.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Automated scoring&lt;/strong&gt; in CI. Use exact match or schema checks where you can, and rubric-based LLM grading where you can't, spot-checked by a human.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Regression gate.&lt;/strong&gt; A prompt, model or tool change that drops the score below the threshold fails the build.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Adversarial cases.&lt;/strong&gt; Prompt injection in user input and in retrieved documents, off-topic requests, empty and huge inputs, and other languages.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;A pinned model version.&lt;/strong&gt; Don't point production at a floating "latest" alias. Upgrade on purpose and run evals first.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/agent-evals.yml (sketch)&lt;/span&gt;
&lt;span class="na"&gt;on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;[&lt;/span&gt;&lt;span class="nv"&gt;pull_request&lt;/span&gt;&lt;span class="pi"&gt;]&lt;/span&gt;
&lt;span class="na"&gt;jobs&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;evals&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;runs-on&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;ubuntu-latest&lt;/span&gt;
    &lt;span class="na"&gt;steps&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;uses&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;actions/checkout@v4&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;pip install -r requirements.txt&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;run&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;python evals/run.py --set evals/cases.jsonl --min-score &lt;/span&gt;&lt;span class="m"&gt;0.90&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Tools and permissions
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Least privilege per tool.&lt;/strong&gt; Read-only credentials unless the tool must write. Give the agent its own scoped service account, never a developer's token.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Human approval for side effects.&lt;/strong&gt; Anything that sends a message, changes a record, moves money or deletes data waits for an approval step until the eval data justifies removing it.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Idempotent tool calls.&lt;/strong&gt; Retries happen. Use idempotency keys so a retried "create refund" doesn't run twice.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Argument validation server-side.&lt;/strong&gt; Treat tool arguments from the model as untrusted user input.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Allow-lists over block-lists&lt;/strong&gt; for URLs, file paths, SQL tables and email domains the agent can touch.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Step and loop limits.&lt;/strong&gt; Cap the number of tool calls per task and stop on repeated identical calls.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4. Failure handling
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Timeouts&lt;/strong&gt; on every model and tool call, with sensible retries and backoff.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;A fallback path.&lt;/strong&gt; When confidence is low, validation fails or limits are hit, hand off to a person with the context attached. Don't fail silently.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Provider outage plan.&lt;/strong&gt; Decide whether to queue, degrade to a simpler flow, or switch to a secondary model, and test it.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Graceful user messaging.&lt;/strong&gt; The user should know when a human is taking over.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5. Observability
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Trace every run.&lt;/strong&gt; Inputs, the prompt version, model and version, every tool call with arguments and results, the final output, latency and token usage, all tied to one trace ID.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;PII handling in logs.&lt;/strong&gt; Redact or hash sensitive fields before they reach your log store, and set retention.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Dashboards&lt;/strong&gt; for success rate, escalation rate, latency (p50/p95), error rate by tool, and cost per task.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Alerts&lt;/strong&gt; on spikes in errors, escalations, latency or spend.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;A feedback loop.&lt;/strong&gt; Human corrections and approvals are captured and turned into new eval cases.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6. Cost and rate limits
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Per-task and per-day budgets&lt;/strong&gt; enforced in code, not just watched on a billing page.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Rate limiting&lt;/strong&gt; per user and per tenant to stop runaway loops and abuse.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Caching&lt;/strong&gt; for repeated retrieval and deterministic sub-steps where it is safe.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  7. Security review
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Prompt injection mitigations.&lt;/strong&gt; Separate system instructions from retrieved content, don't let retrieved text grant permissions, and re-check authorisation on every tool call.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Secrets in a secret manager,&lt;/strong&gt; never in prompts, code or logs.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Data residency and processor list&lt;/strong&gt; documented for your security and legal teams.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Threat model&lt;/strong&gt; written down: what could a malicious user or poisoned document make the agent do, and what stops it? The &lt;a href="https://owasp.org/www-project-top-10-for-large-language-model-applications/" rel="noopener noreferrer"&gt;OWASP Top 10 for LLM Applications&lt;/a&gt; is a good starting list.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  8. Deployment and rollback
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Prompts and configs versioned&lt;/strong&gt; alongside the code, deployed through the same pipeline.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Staged rollout.&lt;/strong&gt; Run in shadow mode first (the agent drafts, humans act), then send a small share of traffic, then more.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Feature flag or kill switch&lt;/strong&gt; that turns the agent off and routes everything to the human path in one step.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Infrastructure as code&lt;/strong&gt; for queues, workers, vector stores and secrets, so environments are reproducible.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If your platform basics such as CI/CD, environments and monitoring aren't in place yet, sort those first. An agent amplifies weak operations. Our notes on &lt;a href="https://axentis.tech/devops-sre-services/" rel="noopener noreferrer"&gt;DevOps and SRE services&lt;/a&gt; cover the foundations we look for.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Handover
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Runbook:&lt;/strong&gt; how to deploy, roll back, rotate keys, update the eval set and respond to each alert.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Ownership:&lt;/strong&gt; a named team on call for the agent, with access to traces and dashboards.&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Everything in the client's or team's repo:&lt;/strong&gt; code, prompts, eval sets, IaC and docs. No knowledge stuck in one person's head.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We use a broader version of this in our &lt;a href="https://axentis.tech/software-project-handover-checklist/" rel="noopener noreferrer"&gt;software project handover checklist&lt;/a&gt;, which applies to any system, not just agents.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the checklist
&lt;/h2&gt;

&lt;p&gt;You won't tick every box on day one, and that is fine for a pilot, as long as the gaps are written down and the risky ones (permissions, approvals, kill switch) are closed. The checklist works best as a pull-request template: each change to prompts, tools or models has to say which items it affects.&lt;/p&gt;

&lt;p&gt;If you are scoping a first agent and want the evaluation and guardrails designed in from the start, our &lt;a href="https://axentis.tech/ai-agent-development/" rel="noopener noreferrer"&gt;AI agent development&lt;/a&gt; team works this way by default.&lt;/p&gt;

&lt;p&gt;What would you add? I'd like to hear which checks have saved you in production.&lt;/p&gt;




&lt;p&gt;Kapil Singhal, Director, Axentis Technologies&lt;/p&gt;

&lt;p&gt;About Axentis Technologies: &lt;a href="https://axentis.tech" rel="noopener noreferrer"&gt;https://axentis.tech&lt;/a&gt; | Axentis on LinkedIn: &lt;a href="https://www.linkedin.com/company/axentis-technologies" rel="noopener noreferrer"&gt;https://www.linkedin.com/company/axentis-technologies&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aranyix: &lt;a href="https://aranyix.tech" rel="noopener noreferrer"&gt;https://aranyix.tech&lt;/a&gt; | Aranyix on LinkedIn: &lt;a href="https://www.linkedin.com/showcase/aranyix/" rel="noopener noreferrer"&gt;https://www.linkedin.com/showcase/aranyix/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>devops</category>
      <category>testing</category>
    </item>
    <item>
      <title>Designing a data model for geo-tagged tree plantation records</title>
      <dc:creator>Kapil Singhal</dc:creator>
      <pubDate>Tue, 03 Nov 2026 04:45:32 +0000</pubDate>
      <link>https://dev.to/kapilaxentis/designing-a-data-model-for-geo-tagged-tree-plantation-records-mp6</link>
      <guid>https://dev.to/kapilaxentis/designing-a-data-model-for-geo-tagged-tree-plantation-records-mp6</guid>
      <description>&lt;p&gt;&lt;em&gt;Canonical / originally published at: &lt;a href="https://aranyix.tech/resources/geo-tagged-tree-plantation-csr-india" rel="noopener noreferrer"&gt;https://aranyix.tech/resources/geo-tagged-tree-plantation-csr-india&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Tree plantation looks like a field problem, but most of the trouble I see shows up later as a data problem. A company plants 10,000 saplings for a CSR project or a green belt condition, and a year later someone asks a simple question: how many are alive, and where? If the records were never designed to answer that, nobody can.&lt;/p&gt;

&lt;p&gt;This post walks through the data model we use for plantation records at Aranyix. It isn't the only way to do it, but it holds up when auditors and reviewers start asking questions.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the unit you will resurvey
&lt;/h2&gt;

&lt;p&gt;The first decision is the unit of record. There are three common choices:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Unit&lt;/th&gt;
&lt;th&gt;Good for&lt;/th&gt;
&lt;th&gt;Trade-off&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Individual tree&lt;/td&gt;
&lt;td&gt;Avenue planting, high-value species, small sites&lt;/td&gt;
&lt;td&gt;More capture effort per sapling&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Plot (fixed polygon or point + radius)&lt;/td&gt;
&lt;td&gt;Dense block planting, green belts&lt;/td&gt;
&lt;td&gt;Survival is a sample estimate&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Site boundary only&lt;/td&gt;
&lt;td&gt;Early-stage reporting&lt;/td&gt;
&lt;td&gt;Cannot support survival claims&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Choose the unit you will &lt;strong&gt;come back to&lt;/strong&gt;. If resurveys will be done by plot, the plot is your primary key, not the site.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core entities
&lt;/h2&gt;

&lt;p&gt;A minimal schema has five tables:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;site&lt;/strong&gt;: id, owner organisation, programme (CSR, EC condition, CAMPA, etc.), boundary geometry (WGS84 polygon), start date.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;unit&lt;/strong&gt;: id, site_id, geometry (point or polygon), species, planted_count, planted_at, captured_by.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;observation&lt;/strong&gt;: id, unit_id, observed_at, status (alive/dead/replaced/missing), alive_count, photo_ref, device location, accuracy_m.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;activity&lt;/strong&gt;: id, unit_id or site_id, type (watering, fencing, weeding, gap-filling), done_at, notes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;evidence&lt;/strong&gt;: id, linked entity, file hash, captured_at, location.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The important part is that &lt;strong&gt;observation never overwrites unit&lt;/strong&gt;. Planting-day counts are immutable. Every resurvey is a new row. Survival at any date is then a query, not a number someone typed into a report.&lt;/p&gt;

&lt;h2&gt;
  
  
  Capture rules that save you later
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Location and time come from the device at capture.&lt;/strong&gt; Don't accept gallery uploads with typed coordinates for the planting-day record. Store the reported GPS accuracy too. A point at Â±40 m is not the same evidence as one at Â±5 m.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hash the photo on capture.&lt;/strong&gt; Storing a content hash with the timestamp makes it easy to show later that the image hasn't been swapped.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use stable IDs printed or tagged in the field&lt;/strong&gt; for tree-level programmes, so the resurvey team can match records without guessing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Keep geometry in WGS84&lt;/strong&gt; (EPSG:4326) for storage and exchange. Reproject only for area calculations.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Survival as a query
&lt;/h2&gt;

&lt;p&gt;With the model above, survival for a unit at date D is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;latest observation at or before D: alive_count / planted_count Ã— 100
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At site level you aggregate across units, and you report the share of units that actually have an observation in the window. A 92% survival figure from 20% of plots is a different claim from 92% across all of them, and your output should make that visible.&lt;/p&gt;

&lt;p&gt;Gap-filling is an &lt;strong&gt;activity&lt;/strong&gt; plus a new planted batch, not an edit to the original count. Otherwise replanting quietly inflates survival.&lt;/p&gt;

&lt;h2&gt;
  
  
  Between field visits
&lt;/h2&gt;

&lt;p&gt;Field resurveys are expensive, so most programmes do them two or three times a year. Satellite and trend monitoring fills the gaps. It won't count saplings, but a sharp drop in a vegetation index over a plot is a good trigger for an unscheduled visit. Store these signals as observations of a different type (source = satellite) so they never get mixed up with ground counts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Exports reviewers can use
&lt;/h2&gt;

&lt;p&gt;The output that matters is usually a table plus a map: per unit, planted count, latest alive count, observation date, and an evidence link. Add the site boundary as KML or GeoJSON. We call this audit-prep evidence. It's what a reviewer needs to check the claim, not a verdict on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd do differently next time
&lt;/h2&gt;

&lt;p&gt;Agree the resurvey calendar and the unit of record before planting day, in writing, with whoever does the fieldwork. Almost every messy dataset I've inherited started with a planting drive that was organised as an event, not as the first observation in a multi-year record.&lt;/p&gt;

&lt;p&gt;The field-side version of this, including the minimum GPS, photo and time record for planting day, is in our guide to &lt;a href="https://aranyix.tech/resources/geo-tagged-tree-plantation-csr-india" rel="noopener noreferrer"&gt;geo tagging in tree plantation&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;Kapil Singhal, Director, Axentis Technologies&lt;/p&gt;

&lt;p&gt;&lt;a href="https://aranyix.tech" rel="noopener noreferrer"&gt;aranyix.tech&lt;/a&gt; | &lt;a href="https://axentis.tech" rel="noopener noreferrer"&gt;axentis.tech&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/showcase/aranyix/" rel="noopener noreferrer"&gt;Aranyix on LinkedIn&lt;/a&gt; | &lt;a href="https://www.linkedin.com/company/axentis-technologies" rel="noopener noreferrer"&gt;Axentis Technologies on LinkedIn&lt;/a&gt;&lt;/p&gt;

</description>
      <category>gis</category>
      <category>datamodeling</category>
      <category>sustainability</category>
      <category>india</category>
    </item>
    <item>
      <title>Owning Your Stack After an Outsourced Build: A Software Project Handover Checklist</title>
      <dc:creator>Kapil Singhal</dc:creator>
      <pubDate>Wed, 07 Oct 2026 06:42:08 +0000</pubDate>
      <link>https://dev.to/kapilaxentis/owning-your-stack-after-an-outsourced-build-a-software-project-handover-checklist-1374</link>
      <guid>https://dev.to/kapilaxentis/owning-your-stack-after-an-outsourced-build-a-software-project-handover-checklist-1374</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://axentis.tech/software-project-handover-checklist/" rel="noopener noreferrer"&gt;https://axentis.tech/software-project-handover-checklist/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most companies discover whether they really own their software at the worst possible moment: a vendor relationship ends, a key engineer leaves, or an investor's technical due diligence asks who can deploy to production tonight. If the honest answer involves "we would need to ask the agency", you have a handover problem, and it is far cheaper to solve at the start of an engagement than at the end.&lt;/p&gt;

&lt;p&gt;This &lt;strong&gt;software project handover checklist&lt;/strong&gt; is written for CTOs and founders in the US, UK, Canada and Australia who work with an outsourced team, including an India-based partner like us. It covers ownership of accounts and credentials, reproducible environments, the documentation worth insisting on, the contract basics, and how to run a handover session that proves your team can operate the system without the vendor in the room.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why handover gets planned too late, and what that costs you
&lt;/h2&gt;

&lt;p&gt;Handover is usually treated as the last line of the project plan. By then, the decisions that make it easy or painful have already been made: whose account the cloud resources sit in, whether environments were built by hand, and whether anything was written down. Typical consequences of a late handover include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Nobody on your side can deploy, roll back or rotate a credential.&lt;/li&gt;
&lt;li&gt;Production runs in an account billed to the vendor, so moving it becomes a migration project.&lt;/li&gt;
&lt;li&gt;Key knowledge lives in two engineers' heads, and the next team spends its first weeks reverse-engineering decisions.&lt;/li&gt;
&lt;li&gt;Domains, app store listings or payment accounts are registered to the wrong legal entity.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are dramatic on day one. All of them become expensive the day you need to move quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ownership from day one: repositories, cloud accounts, domains and credentials
&lt;/h2&gt;

&lt;p&gt;The simplest rule: anything your product depends on should be created in your company's name, with the delivery team added as collaborators whose access you can remove.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Asset&lt;/th&gt;
&lt;th&gt;Who should own it&lt;/th&gt;
&lt;th&gt;What to check&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Source code repositories&lt;/td&gt;
&lt;td&gt;Your organisation&lt;/td&gt;
&lt;td&gt;Vendor engineers are members you can remove; no "real" copy lives elsewhere.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud and hosting accounts&lt;/td&gt;
&lt;td&gt;Your company, on your billing&lt;/td&gt;
&lt;td&gt;At least two people on your side have administrator access.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domains and DNS&lt;/td&gt;
&lt;td&gt;Your company's registrar account&lt;/td&gt;
&lt;td&gt;Renewal contact and payment are yours.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;App store developer accounts&lt;/td&gt;
&lt;td&gt;Your legal entity&lt;/td&gt;
&lt;td&gt;A mobile MVP release slice is distributed through your own TestFlight or Google Play Console account.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Third-party services (email, payments, analytics, error tracking, AI model providers)&lt;/td&gt;
&lt;td&gt;Your company&lt;/td&gt;
&lt;td&gt;API keys are issued from your accounts, not shared from the vendor's.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secrets and credentials&lt;/td&gt;
&lt;td&gt;Your secrets manager or vault&lt;/td&gt;
&lt;td&gt;Nothing sensitive in code, chat history or CI logs.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;CI/CD pipelines&lt;/td&gt;
&lt;td&gt;Your organisation&lt;/td&gt;
&lt;td&gt;Pipeline definitions live in the repository, not only in a vendor-run tool.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If you inherit a project where this was not done, the first handover task is moving each asset into your ownership, one at a time, with a rollback plan for each move.&lt;/p&gt;

&lt;h2&gt;
  
  
  Infrastructure as code and reproducible environments
&lt;/h2&gt;

&lt;p&gt;An environment that was built by clicking through a cloud console can only be rebuilt by the person who clicked. Ask for infrastructure defined as code (Terraform, OpenTofu, Pulumi or the cloud provider's own templates), committed to your repository and applied through a pipeline.&lt;/p&gt;

&lt;p&gt;Alongside that, expect:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Environment configuration kept in code, with secrets referenced from your vault rather than pasted in.&lt;/li&gt;
&lt;li&gt;A README that gets a new engineer from a fresh laptop to a running local copy, including seed or sample data.&lt;/li&gt;
&lt;li&gt;Automated tests and build steps that run in CI on every change.&lt;/li&gt;
&lt;li&gt;Separate staging and production environments, created from the same definitions.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real test is simple: can an engineer who has never seen the project stand up a working staging environment using only the repository and the docs? If you want help reaching that standard, it is core work for our &lt;a href="https://axentis.tech/devops-sre-services/" rel="noopener noreferrer"&gt;DevOps and SRE services&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Documentation that matters: architecture notes, runbooks, decision logs
&lt;/h2&gt;

&lt;p&gt;Long documents nobody reads are not the goal. Short, current documents that a new engineer actually uses are.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture overview
&lt;/h3&gt;

&lt;p&gt;One or two pages: the main components, how data flows between them, external dependencies and where each piece is hosted. A simple diagram is enough.&lt;/p&gt;

&lt;h3&gt;
  
  
  Runbooks
&lt;/h3&gt;

&lt;p&gt;Step-by-step instructions for routine and stressful tasks: deploying, rolling back, rotating a secret, restoring a backup, scaling a service and responding to the most likely alerts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Decision log
&lt;/h3&gt;

&lt;p&gt;Brief records of significant technical decisions and why they were made. These save the next team from undoing choices that had good reasons.&lt;/p&gt;

&lt;h3&gt;
  
  
  Known issues and technical debt
&lt;/h3&gt;

&lt;p&gt;An honest list of open bugs, shortcuts and areas that need attention. A partner who hands this over freely is a partner you can trust.&lt;/p&gt;

&lt;p&gt;For AI features, add the prompts and configuration, model versions, the evaluation set, the design of the human review and approval step, and the usage limits in place. That mirrors what we recommend in &lt;a href="https://axentis.tech/how-to-scope-an-ai-pilot/" rel="noopener noreferrer"&gt;how to scope an AI pilot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code ownership in outsourced development: the contract basics
&lt;/h2&gt;

&lt;p&gt;Technical ownership needs a legal match. Before work starts, confirm with your own counsel that the contract covers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IP assignment&lt;/strong&gt; of work product to your company on payment, or on terms agreed in writing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pre-existing vendor components&lt;/strong&gt;, such as internal libraries, and the licence you receive to keep using them.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open-source dependencies&lt;/strong&gt;, with an inventory of licences so there are no surprises in later due diligence.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Exit terms&lt;/strong&gt;: what the vendor delivers at the end, how access is revoked and what happens to any copies of your data.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a checklist, not legal advice. The point is to raise these terms before kickoff, not after a disagreement.&lt;/p&gt;

&lt;h2&gt;
  
  
  The handover session: walkthroughs, a supervised first deploy, open issues
&lt;/h2&gt;

&lt;p&gt;Documents are necessary but not sufficient. Knowledge transfer from an outsourcing vendor should include hands-on proof that your team can operate the system:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Recorded codebase walkthrough.&lt;/strong&gt; The vendor's tech lead walks your engineers through structure, key flows and tricky areas, and the recording is stored with the docs.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supervised first deploy.&lt;/strong&gt; An engineer from your side runs a production deploy while the vendor watches and only advises.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rollback and restore rehearsal.&lt;/strong&gt; Roll back a release and restore a backup to a non-production environment, following the runbooks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credential rotation.&lt;/strong&gt; Rotate shared secrets and remove access that is no longer needed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open issues review.&lt;/strong&gt; Walk through the known-issues list and agree who handles what.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support window.&lt;/strong&gt; Agree a short, defined period in which the vendor answers questions after handover.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Software project handover checklist
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Area&lt;/th&gt;
&lt;th&gt;Done when&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Repositories&lt;/td&gt;
&lt;td&gt;Owned by your organisation; vendor access removable.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Cloud, domains, app stores, third-party services&lt;/td&gt;
&lt;td&gt;All in your company's name and billing.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Secrets&lt;/td&gt;
&lt;td&gt;In your vault; rotated at handover.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Infrastructure&lt;/td&gt;
&lt;td&gt;Defined as code; staging rebuilt from the repository.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Documentation&lt;/td&gt;
&lt;td&gt;Architecture overview, runbooks, decision log and known-issues list are current.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Contract&lt;/td&gt;
&lt;td&gt;IP assignment, vendor components, open-source licences and exit terms confirmed.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Operation&lt;/td&gt;
&lt;td&gt;Your engineer has deployed, rolled back and restored a backup.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;Post-handover support window and contact agreed in writing.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;If any row is incomplete, you have not finished handover yet.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scaling after handover: in-house, extended engagement or hybrid
&lt;/h2&gt;

&lt;p&gt;A clean handover gives you real choices. You can take the product in-house, extend the engagement with another scoped piece of work, or run a hybrid where your engineers own the core and a partner delivers defined workstreams. Our comparison of &lt;a href="https://axentis.tech/staff-augmentation-vs-project-outsourcing/" rel="noopener noreferrer"&gt;staff augmentation vs project outsourcing&lt;/a&gt; can help you pick the model for the next phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Axentis builds handover into a Launch Pilot
&lt;/h2&gt;

&lt;p&gt;We design every &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;Launch Pilot&lt;/a&gt; to end with the checklist above already satisfied: client-owned repositories and accounts from day one, infrastructure as code where the scope includes environments, short practical documentation and a handover session in which your team runs the deploy. That is why a pilot is a useful test of any partner; our guide to &lt;a href="https://axentis.tech/paid-pilot-project-software-development/" rel="noopener noreferrer"&gt;paid pilot projects&lt;/a&gt; explains what else to watch. The same standard applies to our &lt;a href="https://axentis.tech/custom-software-development/" rel="noopener noreferrer"&gt;custom software development&lt;/a&gt; engagements.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  When should handover planning start?
&lt;/h3&gt;

&lt;p&gt;At kickoff. Account ownership, infrastructure as code and documentation habits are set in the first week. Leaving them to the end turns a routine handover into a migration project.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should knowledge transfer from an outsourcing vendor include?
&lt;/h3&gt;

&lt;p&gt;An architecture overview, runbooks, a decision log, a known-issues list, a recorded codebase walkthrough and a supervised deploy by your own engineer, followed by a short, defined support window.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I avoid vendor lock-in with an outsourced team?
&lt;/h3&gt;

&lt;p&gt;Own every account and credential from day one, require infrastructure as code, put IP assignment and exit terms in the contract, and rehearse a deploy and rollback by your own team before the engagement ends.&lt;/p&gt;

&lt;h3&gt;
  
  
  Who should own the app store accounts for a mobile MVP?
&lt;/h3&gt;

&lt;p&gt;Your company. Create the Apple Developer and Google Play Console accounts under your legal entity and add the vendor as users, so tester builds and any later public release stay under your control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to start with handover built in?
&lt;/h2&gt;

&lt;p&gt;If you want an outsourced build that ends with your team holding the keys, &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;discuss a Launch Pilot&lt;/a&gt; with Axentis. We will scope one bounded outcome with you privately and agree the handover standard before any code is written. If you are taking over an existing codebase and want a second opinion first, &lt;a href="https://axentis.tech/talk-to-an-expert/" rel="noopener noreferrer"&gt;talk to an expert&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;If you are planning a first engagement, see how a &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;scoped Launch Pilot from Axentis&lt;/a&gt; works, or read more &lt;a href="https://axentis.tech/blog/" rel="noopener noreferrer"&gt;product and engineering notes on the Axentis blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>documentation</category>
      <category>softwaredevelopment</category>
      <category>outsourcing</category>
    </item>
    <item>
      <title>How to Scope a Fixed-Scope MVP Without Change-Order Chaos</title>
      <dc:creator>Kapil Singhal</dc:creator>
      <pubDate>Wed, 07 Oct 2026 06:36:43 +0000</pubDate>
      <link>https://dev.to/kapilaxentis/how-to-scope-a-fixed-scope-mvp-without-change-order-chaos-2co7</link>
      <guid>https://dev.to/kapilaxentis/how-to-scope-a-fixed-scope-mvp-without-change-order-chaos-2co7</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://axentis.tech/how-to-scope-a-fixed-scope-mvp/" rel="noopener noreferrer"&gt;https://axentis.tech/how-to-scope-a-fixed-scope-mvp/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most fixed-scope MVP disputes are not really about code. They start with a scope document that let the founder and the delivery team picture two different products, and they surface weeks later as change orders, a slipped date and a strained relationship. If you are a founder or CTO in the US, UK, Canada or Australia preparing to brief an outside engineering team, the way you write the scope will shape your cost and timeline more than any line on the proposal.&lt;/p&gt;

&lt;p&gt;This guide shows how to scope a &lt;strong&gt;fixed scope MVP&lt;/strong&gt; that both sides can deliver against: one core user journey, explicit in-scope and out-of-scope lists, written assumptions, testable acceptance criteria and change control that stays flexible. It also covers when fixed scope is the wrong model, and the cost drivers to understand before you ask anyone for a number.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why fixed-scope MVPs fail: moving targets and fuzzy "done"
&lt;/h2&gt;

&lt;p&gt;When a fixed-scope MVP goes wrong, the warning signs are usually visible in the original brief:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;"Done" was never defined.&lt;/strong&gt; "Users can manage their orders" can mean a read-only list or a full editing workflow with audit history. Both sides sign, then discover the gap at acceptance.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The scope is a feature list, not a journey.&lt;/strong&gt; Forty bullet points with equal weight give nobody a way to decide what matters when time runs short.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Assumptions stayed in people's heads.&lt;/strong&gt; Who supplies designs? Is the payments sandbox available? Does the partner API actually support the call you need? Unwritten assumptions become change orders.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No single decision-maker.&lt;/strong&gt; If three stakeholders can add requirements and nobody can say no, scope grows by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The estimate came before the thinking.&lt;/strong&gt; A firm figure produced from a two-paragraph brief is either padded for risk or quietly ignoring it.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Fixed scope vs time and materials: choose deliberately
&lt;/h2&gt;

&lt;p&gt;Fixed scope is not automatically safer. It works when the outcome can be described precisely in advance; it fights you when the main job is discovery. Use this as a rough guide:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Your situation&lt;/th&gt;
&lt;th&gt;Better fit&lt;/th&gt;
&lt;th&gt;Why&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;One clear user journey, known integrations, designs largely settled&lt;/td&gt;
&lt;td&gt;Fixed scope&lt;/td&gt;
&lt;td&gt;The outcome is testable up front, so a fixed boundary protects both sides.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Problem understood, solution still being explored with users&lt;/td&gt;
&lt;td&gt;Time and materials&lt;/td&gt;
&lt;td&gt;You want to change direction weekly without renegotiating a contract.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Your own engineering lead will direct the day-to-day work&lt;/td&gt;
&lt;td&gt;Time and materials or staff augmentation&lt;/td&gt;
&lt;td&gt;You are buying capacity, and you own the prioritisation.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;New partner, real but bounded outcome, trust not yet established&lt;/td&gt;
&lt;td&gt;A short fixed-scope pilot first&lt;/td&gt;
&lt;td&gt;You test delivery on real work before choosing a longer model.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Many teams combine the two: a fixed-scope first release, then time and materials or a sequence of fixed slices once the product is in users' hands. If you are still deciding who should direct the engineering, our comparison of &lt;a href="https://axentis.tech/staff-augmentation-vs-project-outsourcing/" rel="noopener noreferrer"&gt;staff augmentation vs project outsourcing&lt;/a&gt; walks through that choice by stage.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start from one core user journey, not a feature list
&lt;/h2&gt;

&lt;p&gt;The most useful scoping question is: what is the one thing a real user must be able to do, end to end, for this MVP to be worth releasing? Write it as a short narrative. For example, for a B2B operations tool: "An operations manager signs in, uploads a CSV of orders, sees rows with errors flagged, corrects them in the browser and exports a clean file."&lt;/p&gt;

&lt;p&gt;Every candidate feature is then judged against that journey. Sign-in, upload, validation, inline editing and export are in. Team invitations, saved templates, a reporting dashboard and SSO are valuable, but they are not required for the journey, so they wait. This turns arguments about preferences into a single question: does this step serve the journey?&lt;/p&gt;

&lt;p&gt;The same logic applies across lanes. A mobile MVP should be a release slice: one core job working on real devices, distributed to testers through TestFlight or Google Play internal testing, with a public store launch planned as a separate step. Our &lt;a href="https://axentis.tech/mobile-app-development/" rel="noopener noreferrer"&gt;mobile app development&lt;/a&gt; work is scoped that way. If the MVP includes an AI feature, keep it assistive, with a person approving outputs before they take effect, and scope it with the same discipline we describe in &lt;a href="https://axentis.tech/how-to-scope-an-ai-pilot/" rel="noopener noreferrer"&gt;how to scope an AI pilot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Write in scope, out of scope and assumptions explicitly
&lt;/h2&gt;

&lt;p&gt;A good MVP statement of work has three lists, and the second and third matter as much as the first.&lt;/p&gt;

&lt;h3&gt;
  
  
  In scope
&lt;/h3&gt;

&lt;p&gt;List each journey step and what it includes, plus the non-functional basics: supported browsers or devices, the sign-in method, the environments that will exist (for example staging and production), and any security or accessibility requirements that apply to this release.&lt;/p&gt;

&lt;h3&gt;
  
  
  Out of scope
&lt;/h3&gt;

&lt;p&gt;Name the things people tend to assume are included: an admin panel, more than two user roles, payments, email or push notifications, localisation, SSO, data migration from an old system, public app store submission, and ongoing support after handover. Writing "not in this release" next to each one prevents most acceptance-day surprises.&lt;/p&gt;

&lt;h3&gt;
  
  
  Assumptions and dependencies
&lt;/h3&gt;

&lt;p&gt;Record what the delivery team is relying on: API access and sandbox credentials by a given date, whether designs are supplied or included, who provides copy and test data, how quickly your product owner will answer questions, and which third-party accounts will be created in your company's name. When an assumption breaks, the conversation is about the assumption, not about blame.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually drives MVP cost and timeline
&lt;/h2&gt;

&lt;p&gt;Rather than comparing quotes in isolation, understand the factors that move effort up or down. Most of them are scoping decisions you control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;User roles and permissions.&lt;/strong&gt; Each additional role multiplies screens, rules and test cases.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Integrations.&lt;/strong&gt; Every third-party API brings its own documentation quality, sandbox limits and failure modes. Unknown APIs deserve a short technical spike before the estimate is fixed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Platforms.&lt;/strong&gt; Web only, web plus one mobile platform, or web plus iOS and Android are very different builds.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Design maturity.&lt;/strong&gt; Finished, tested designs reduce rework; "we'll figure out the UX as we go" belongs in time and materials.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data migration and quality.&lt;/strong&gt; Importing messy legacy data is often its own project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Compliance and security requirements&lt;/strong&gt; that change architecture, hosting or audit logging.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decision speed on your side.&lt;/strong&gt; Slow answers and late feedback stretch timelines as much as any technical problem.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A partner who gives a firm figure without asking about these is either pricing the risk in or not seeing it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Acceptance criteria both sides can test
&lt;/h2&gt;

&lt;p&gt;Acceptance criteria turn "done" from an opinion into a check. Write them before any code, tied to journey steps. A simple format works:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Given a signed-in operations manager, when they upload a CSV with missing order IDs, then those rows are highlighted with a reason, and the export button stays disabled until they are fixed or removed.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Also agree who accepts each item, how many business days they have to review it, what happens if they do not respond, and the difference between a defect (the build does not meet a written criterion) and a change (a new or different criterion). That last definition removes a lot of friction.&lt;/p&gt;

&lt;h2&gt;
  
  
  Change control that stays flexible without blowing up the scope
&lt;/h2&gt;

&lt;p&gt;New ideas will appear, especially once you see working software. That is healthy. The goal is to absorb them without destroying the date:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Park first.&lt;/strong&gt; New ideas go into a visible "next release" backlog by default.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Swap, don't stack.&lt;/strong&gt; If something must come in now, something of similar size comes out, agreed in writing by your named product owner.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Price the change.&lt;/strong&gt; Anything that cannot be swapped gets a short change note stating its effect on effort and date before work starts.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Review weekly.&lt;/strong&gt; A short scope check during the weekly walkthrough of work in progress keeps drift visible while it is still small.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  From a scoped MVP to the next release
&lt;/h2&gt;

&lt;p&gt;A fixed-scope MVP should end with a handover, not a cliff. Your company should already own the repositories, cloud accounts and credentials. You should receive setup notes, deployment steps and a list of known issues. Then use real usage to reprioritise the parked backlog and decide the next model: another fixed slice, time and materials, or bringing the work in-house.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Axentis scopes a fixed-scope MVP
&lt;/h2&gt;

&lt;p&gt;Our &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;Launch Pilot&lt;/a&gt; follows the structure in this guide: private scoping around one outcome, written in-scope and out-of-scope lists, acceptance criteria agreed before build, client-owned repositories from day one and a clear decision at the end. Delivery runs as a Product Build Sprint with short cycles and regular walkthroughs of working software, across &lt;a href="https://axentis.tech/custom-software-development/" rel="noopener noreferrer"&gt;custom software&lt;/a&gt;, mobile release slices, assistive AI and DevOps. For the wider reasoning behind starting small, read our guide to &lt;a href="https://axentis.tech/paid-pilot-project-software-development/" rel="noopener noreferrer"&gt;paid pilot projects&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is a fixed scope MVP?
&lt;/h3&gt;

&lt;p&gt;It is a first product release with a written boundary: a defined user journey, explicit in-scope and out-of-scope items, documented assumptions and acceptance criteria. Changes go through an agreed process instead of being added informally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is fixed price or time and materials better for an MVP?
&lt;/h3&gt;

&lt;p&gt;Fixed scope suits a clearly defined journey with known integrations. Time and materials suits exploratory work where you expect to change direction often. Many teams use a fixed-scope first release and switch models once the product is in users' hands.&lt;/p&gt;

&lt;h3&gt;
  
  
  How can I judge MVP cost before I get a quote?
&lt;/h3&gt;

&lt;p&gt;Look at the drivers: number of user roles, integrations, platforms, design maturity, data migration, compliance needs and how quickly your team can make decisions. Reducing any of these in the first release usually reduces effort and risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  What should happen when a new idea comes up mid-build?
&lt;/h3&gt;

&lt;p&gt;Park it in the next-release backlog by default. If it must be included now, swap out work of similar size, or agree a written change note covering the effect on effort and date before anyone starts on it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to scope your MVP?
&lt;/h2&gt;

&lt;p&gt;If you have a core user journey in mind and want it scoped with clear boundaries before you commit, &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;discuss a Launch Pilot&lt;/a&gt; with Axentis. We will review your brief privately, help you separate the first release from the backlog and agree acceptance criteria before any build starts. Prefer to start with a conversation? &lt;a href="https://axentis.tech/talk-to-an-expert/" rel="noopener noreferrer"&gt;Talk to an expert&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;If you are planning a first engagement, see how a &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;scoped Launch Pilot from Axentis&lt;/a&gt; works, or read more &lt;a href="https://axentis.tech/blog/" rel="noopener noreferrer"&gt;product and engineering notes on the Axentis blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>mvp</category>
      <category>productivity</category>
      <category>startup</category>
      <category>agile</category>
    </item>
    <item>
      <title>How to Evaluate an India Software Development Partner: A CTO's Due-Diligence Checklist</title>
      <dc:creator>Kapil Singhal</dc:creator>
      <pubDate>Wed, 07 Oct 2026 06:35:53 +0000</pubDate>
      <link>https://dev.to/kapilaxentis/how-to-evaluate-an-india-software-development-partner-a-ctos-due-diligence-checklist-52l4</link>
      <guid>https://dev.to/kapilaxentis/how-to-evaluate-an-india-software-development-partner-a-ctos-due-diligence-checklist-52l4</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published at &lt;a href="https://axentis.tech/evaluate-india-software-development-partner/" rel="noopener noreferrer"&gt;https://axentis.tech/evaluate-india-software-development-partner/&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Choosing an India software development partner looks simple until delivery starts. Proposals read alike, and sales calls rarely show how ownership, communication and cadence will feel six weeks in. If you are a CTO, founder or VP of Engineering in the US, UK, Canada or Australia deciding &lt;strong&gt;how to choose an offshore software development company&lt;/strong&gt;, use one due-diligence scorecard on every shortlist candidate — including us.&lt;/p&gt;

&lt;p&gt;This checklist covers outcome definition, company and contract checks, team continuity, delivery cadence, IP and security, references, red flags, and why a pilot-first engagement beats a long commitment made on slides.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with the outcome, not the vendor
&lt;/h2&gt;

&lt;p&gt;Most evaluation processes start with vendor outreach. Flip that. Before you talk to anyone, write down:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;The outcome.&lt;/strong&gt; What should exist when the first engagement ends? A feature, an integration, a mobile MVP release slice, an assistive AI workflow with human approval, or a DevOps improvement?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The owner on your side.&lt;/strong&gt; Who will answer questions, accept work and make trade-off calls? Without a named product owner, even a strong partner will stall.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Success criteria.&lt;/strong&gt; How will you know the work is done? Prefer testable statements over vague quality language.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Constraints.&lt;/strong&gt; Stack preferences, compliance needs, time-zone overlap windows and hard dates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That brief becomes the filter. Vendors who cannot respond to a clear outcome with a clear scope are not ready for a serious evaluation. If you are still choosing between engagement models, read our guide on &lt;a href="https://axentis.tech/staff-augmentation-vs-project-outsourcing/" rel="noopener noreferrer"&gt;staff augmentation vs project outsourcing&lt;/a&gt; before you shortlist.&lt;/p&gt;

&lt;h2&gt;
  
  
  Company checks: entity, contract, IP and data handling
&lt;/h2&gt;

&lt;p&gt;Ask for paperwork early. You are buying a commercial relationship, not a portfolio of slides.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Legal entity.&lt;/strong&gt; Confirm the registered company name, jurisdiction and who signs the master agreement. Match invoice details to the contracting entity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;IP assignment.&lt;/strong&gt; The contract should assign work product and related IP to you on payment (or as otherwise agreed in writing). Resist any setup where the partner retains exclusive ownership of code written for your product.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Subcontracting.&lt;/strong&gt; Ask whether work can be subcontracted, and whether you get written notice and approval rights if it is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data handling.&lt;/strong&gt; How will they access your systems and data? Where do environments live? What happens to copies of data at the end of the engagement?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Confidentiality and security baselines.&lt;/strong&gt; NDAs, access logging, MFA on shared tools, and a clear rule that secrets never live in source code.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If a vendor postpones these topics until “after we kick off,” treat that as a signal, not a scheduling quirk.&lt;/p&gt;

&lt;h2&gt;
  
  
  Team checks: who actually writes the code
&lt;/h2&gt;

&lt;p&gt;Sales teams and delivery teams are not the same people. Your due diligence should find the people who will touch your product.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Named roles.&lt;/strong&gt; Ask for the roles on the proposed team (tech lead, engineers, QA, designer if needed) and how many hours of overlap they can commit to your time zone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Continuity plan.&lt;/strong&gt; What happens if someone leaves mid-engagement? How is knowledge documented, and how quickly is a replacement briefed?&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same people after the pilot.&lt;/strong&gt; If you start with a scoped pilot, confirm that the pilot team is the team you would scale with, not a temporary “best foot forward” cast.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Working style.&lt;/strong&gt; Prefer written updates, clear questions and demos of work in progress your product owner can follow — not résumé claims about fluency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For US, UK, Canadian and Australian teams working with India, agree the overlap window in writing. Morning IST often suits Australia; late afternoon and evening IST often cover UK and US East Coast mornings. Exact hours matter less than showing up for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Delivery checks: estimation, acceptance criteria and cadence
&lt;/h2&gt;

&lt;p&gt;Delivery due diligence is about how work becomes visible and how “done” is defined.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Estimation method.&lt;/strong&gt; Ask how they break work down, what assumptions they surface, and how they handle uncertainty. Vague ranges with no assumptions are a warning.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Acceptance criteria before code.&lt;/strong&gt; Insist on written, testable criteria and an explicit out-of-scope list. This is the same discipline we describe for a &lt;a href="https://axentis.tech/paid-pilot-project-software-development/" rel="noopener noreferrer"&gt;paid pilot project&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cadence.&lt;/strong&gt; Agree a weekly rhythm: planning, written progress notes, a demo of work in progress, and a short risk list. You should not need to chase status.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Visibility.&lt;/strong&gt; You should see the task board, repositories you control, and builds as they happen — not only a polished end-of-sprint show.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change control.&lt;/strong&gt; New ideas go to a backlog or swap against something else. Unlimited “while you’re in there” work destroys both schedule and trust.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Match the delivery shape to the outcome type. A &lt;a href="https://axentis.tech/custom-software-development/" rel="noopener noreferrer"&gt;custom software&lt;/a&gt; feature, a mobile &lt;a href="https://axentis.tech/mobile-app-development/" rel="noopener noreferrer"&gt;MVP release slice&lt;/a&gt;, an &lt;a href="https://axentis.tech/ai-ml-development/" rel="noopener noreferrer"&gt;assistive AI/ML&lt;/a&gt; workflow with human approval, or a &lt;a href="https://axentis.tech/devops-sre-services/" rel="noopener noreferrer"&gt;DevOps and SRE&lt;/a&gt; readiness improvement each needs different acceptance tests — but the same transparency rules apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ownership checks: repositories, clouds and credentials from day one
&lt;/h2&gt;

&lt;p&gt;Vendor lock-in rarely starts with a hostile clause. It starts with code sitting in accounts you do not control.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Client-owned repositories&lt;/strong&gt; from day one, with your organisation as the owner and the partner as collaborators.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloud and hosting accounts&lt;/strong&gt; in your name, or transferable with a documented process you have rehearsed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Credentials and secrets&lt;/strong&gt; stored in your vault or account, rotated on handover, and never shared in chat.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Documentation that travels.&lt;/strong&gt; Architecture notes, setup steps, runbooks and decision logs short enough that a new engineer on your side can continue the work.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A partner who is confident about handover will welcome this setup. A partner who resists it is telling you something important about the relationship they want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Security and references without theatre
&lt;/h2&gt;

&lt;p&gt;Security due diligence does not require a multi-day audit for a first engagement, but it does require basics you can verify:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who has access to production and staging, and how that access is revoked.&lt;/li&gt;
&lt;li&gt;Whether secrets are kept out of repositories and CI logs.&lt;/li&gt;
&lt;li&gt;How dependency updates and vulnerability triage are handled during the engagement.&lt;/li&gt;
&lt;li&gt;What happens to your data copies when the engagement ends.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On references, ask for buyers who ran a comparable engagement. Did the people on the call match the people who delivered? How did they handle bad news? Was ownership clean at the end? Treat vague praise as soft evidence; treat specific, mixed feedback as useful. Do not treat public code portfolios as proof of delivery quality — process and ownership under your acceptance criteria matter more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Red flags that should stop or slow a deal
&lt;/h2&gt;

&lt;p&gt;Walk carefully — or walk away — if you see several of these:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Refusal to put IP assignment, ownership of repositories or data-handling terms in writing before kickoff.&lt;/li&gt;
&lt;li&gt;A team that will not name who does the work, or that swaps people without notice.&lt;/li&gt;
&lt;li&gt;No willingness to write acceptance criteria or an out-of-scope list.&lt;/li&gt;
&lt;li&gt;Status only available in sales meetings, with no access to work in progress.&lt;/li&gt;
&lt;li&gt;Pressure for a long exclusive commitment before any shared delivery experience.&lt;/li&gt;
&lt;li&gt;Vague claims about AI acting without human approval. Prefer assistive designs where people review and approve external actions.&lt;/li&gt;
&lt;li&gt;Time-zone overlap promised in the pitch and missing in the first two weeks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One missed item can be fixed. A pattern of evasion usually cannot.&lt;/p&gt;

&lt;h2&gt;
  
  
  Test the relationship with a pilot-first engagement
&lt;/h2&gt;

&lt;p&gt;The highest-signal due-diligence step is simple: run a small, paid, scoped engagement before a long contract. A pilot lets you judge communication, estimation honesty, engineering hygiene and handover on real work — not on a pitch.&lt;/p&gt;

&lt;p&gt;At Axentis, that structure is &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;Launch Pilot&lt;/a&gt;: private scoping, written acceptance criteria, client-owned repositories from day one, agreed overlap for US, UK, Canadian and Australian teams, and a clean decision at the end (scale, adjust or stop). For AI work, use the same discipline as &lt;a href="https://axentis.tech/how-to-scope-an-ai-pilot/" rel="noopener noreferrer"&gt;how to scope an AI pilot&lt;/a&gt;: one workflow, a baseline, human approval and a go / extend / stop gate. Apply this checklist to Axentis the same way you apply it to anyone else.&lt;/p&gt;

&lt;h2&gt;
  
  
  FAQ
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What should I ask an offshore software development company first?
&lt;/h3&gt;

&lt;p&gt;Start with outcome, ownership and process: What exactly will be delivered, who owns the repositories and IP, how will acceptance criteria be written, and what overlap hours will the delivery team keep with your time zone?&lt;/p&gt;

&lt;h3&gt;
  
  
  How long should due diligence take before signing?
&lt;/h3&gt;

&lt;p&gt;Long enough to complete company, team, delivery and ownership checks, plus at least one reference conversation. Many teams then run a short paid pilot as the final filter rather than stretching paper diligence indefinitely.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is a paid pilot better than a long fixed contract for a first engagement?
&lt;/h3&gt;

&lt;p&gt;Usually yes, when you have not worked together before. A pilot bounds cost and risk while testing real collaboration. A longer contract makes more sense after you have seen delivery, not before.&lt;/p&gt;

&lt;h3&gt;
  
  
  What if the partner is in India and my team is in the US, UK, Canada or Australia?
&lt;/h3&gt;

&lt;p&gt;Agree overlap hours in writing, lean on async written updates and recorded walkthroughs for everything that does not need a live call, and judge the partner on whether blockers get raised early rather than overnight silence.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to run this checklist with Axentis?
&lt;/h2&gt;

&lt;p&gt;If you are shortlisting an India engineering partner and want a bounded first outcome rather than a leap of faith, &lt;a href="https://axentis.tech/talk-to-an-expert/" rel="noopener noreferrer"&gt;talk to an expert&lt;/a&gt;. We will walk through your brief against this same checklist and, if there is a fit, scope a Launch Pilot around your acceptance criteria and timeline.&lt;/p&gt;




&lt;p&gt;If you are planning a first engagement, see how a &lt;a href="https://axentis.tech/launch-pilot/" rel="noopener noreferrer"&gt;scoped Launch Pilot from Axentis&lt;/a&gt; works, or read more &lt;a href="https://axentis.tech/blog/" rel="noopener noreferrer"&gt;product and engineering notes on the Axentis blog&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>outsourcing</category>
      <category>career</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
