Custom Software Delivery · Field Guide

From a conversation to a
quotable, deliverable project.

A practical playbook for planning, designing, building, testing, documenting and pricing custom software — for brand-new applications and for enhancements to systems already in production.

Plan · Design · Build · Test · Ship New builds & enhancements Estimation & quoting toolkit AI where it earns its place
00

Introduction & how to use this guide

This guide describes a repeatable way to take a software idea — a new product or a change to an existing one — through the full arc of planning, design, construction, testing, documentation and release, in a way that lets you quote the work accurately before you commit to it.

Purpose & audience

It is written to be used two ways at once. Internally, it is a methodology manual — a shared checklist so that any project, run by any team member, produces the same artifacts, hits the same quality bar, and can be estimated with the same discipline. Externally, it is a trust document: something you can hand a prospect (or paraphrase in a proposal) to show that their project will be run by professionals who define before they build. It applies equally to an independent developer quoting a one-person job and to a small firm coordinating several people.

Treat every phase as optional-but-deliberate. Small projects collapse several phases into a single short document; large or regulated projects keep them fully separate. What should never happen is a phase being skipped by accident.

The core principle

Principle

You cannot accurately price what you have not defined. One of the most common causes of unprofitable projects and unhappy clients is quoting from a conversation instead of from a specification. Every phase in this guide exists to convert vague intent into defined scope — and defined scope is what makes an estimate defensible.

This has a direct commercial consequence: the work of defining scope is itself billable. A fixed-price quote for an undefined project is a gamble you will usually lose. The professional move is to sell a small, paid discovery/design engagement first, and quote the build from its output (see Paid discovery).

New builds vs. enhancements to existing systems

The same phases apply to both, but the center of gravity shifts:

DimensionNew applicationEnhancement to an existing system
Biggest riskGetting requirements and architecture right from a blank pageUnintended impact on features already in production
Heaviest phaseRequirements & high-level designImpact analysis & regression testing
Key unknown to priceScope breadth & unfamiliar domainCondition of the existing codebase & data
Documentation focusFull document set from scratchDeltas: what changed, and updated user/release notes
Estimation dangerUnder-scoping the feature listUnder-scoping the "touch everything it connects to" tax
For enhancements, budget explicitly for reading and understanding code you did not write — it is real, estimable work, not overhead to absorb.
01

Engagement models & when to use them

How you price a project should follow how well the project is defined. Match the commercial model to the amount of uncertainty, not to what feels easiest to sell.

First: should you take it on?

Before discovery — before any number changes hands — decide whether the opportunity is worth pursuing at all. Qualification is a five-minute filter that saves weeks: it separates a real project with a sponsor and a budget from a conversation that will never close, or a job that doesn't fit what you do or can support.

Template · opportunity qualification record
Questions to answer
  • What business problem is driving this — and what is it worth solved?
  • Who feels the pain, and how often?
  • Is there a real decision-maker (sponsor) AND an operational expert (SME)?
  • Is there a budget, or at least a ceiling?
  • Is the timeline real, flexible, or event-driven?
  • Will the client pay for discovery & design?
  • Does it fit our skills, strategy, and capacity to support long-term?
  • Is the work customer-specific, reusable product value, or mixed?

One-page output
  problem · value · decision-makers · budget & timeline · fit · risks · next step
Say "ROM" out loud

Any figure you offer at this stage is a Rough Order of Magnitude (ROM) — a deliberately wide range to gauge interest, explicitly labelled as such. A ROM is not a quote. Naming it that way is a mark of professionalism, not weakness: it lets you be helpful about cost without being trapped by a number you gave before you understood the work.

The four common models

ModelBest when…Who carries the riskWatch for
Fixed priceScope is fully defined & stable (post-design)YouAny scope change must trigger a change order
Time & materialsScope is exploratory or fast-movingClientNeeds trust & transparent reporting
Capped T&MClient wants T&M flexibility with a ceilingSharedYou eat overruns above the cap
Retainer / supportOngoing enhancements & maintenanceSharedDefine what a "unit" of work is
Milestone / phasedLarge builds; reduces everyone's exposureSharedEach milestone needs its own acceptance criteria

Who benefits — and who should fund it

This distinction matters most when you both maintain a product and do custom work for individual clients. Some work benefits only the client in front of you; some builds reusable value you can sell again and again. Deciding up front who funds which protects your margin now and protects the product as an asset later.

Type of workWho typically funds it
Customer-specific configuration, reports, conversions, exceptionsThe customer
Reusable product foundation or features you can resellVendor investment (or shared)
Mixed benefitCost-share / discounted customer contribution
Experimental or future capabilitySeparate pilot / R&D budget
Watch out · giving away the product

Beware quietly funding reusable product value out of one customer's fixed-price budget. You lose margin on that job and hand over — often without a license conversation — an asset you could have sold many times. Name reusable work as reusable, and fund it as a deliberate investment, not an accident.

Sell discovery as its own paid phase

The cleanest way to de-risk a fixed-price build is to precede it with a small, fixed-price discovery & design engagement. Its deliverable is the requirements and design documents in this guide, plus a detailed build estimate. This gives the client a real artifact they own even if they walk away, and gives you a defined thing to quote.

Client-facing snippet · positioning discovery
Before we quote the build, we run a short paid discovery phase. In it we
document exactly what the software must do, how it will fit your existing
systems, and what it will cost to build — as a fixed set of deliverables you
own outright. It typically runs [1–2 weeks / $X]. If you decide to proceed,
that work feeds straight into the build; if you don't, you keep the
specification and can take it anywhere. It means the build quote you receive
is based on a real plan, not a guess.

Choosing a model quickly

  • Undefined idea → Paid discovery (fixed)
  • Defined build → Fixed price or milestones
  • Ongoing change → Retainer or capped T&M
  • Emergency / unknown code → T&M until scoped
02

The lifecycle at a glance

Every project moves through the same sequence of phases. On a small job several may be a single afternoon; on a large one each is a formal deliverable. The order matters because each phase's output is the next phase's input.

The phase map

03
Requirements
What it must do, and why
04
High-Level Design
Shape of the solution
05
Technical Design
Exactly how it's built
06
Estimate & Quote
Cost, timeline, terms
07
Development
Build it in slices
08
Testing & QA
Prove it works
09
Beta
Real users, real data
10
Documentation
User & technical docs
11
Release
Deploy, migrate, go live
12
Support
Warranty & maintenance

Documentation is shown late for numbering, but in practice it is written continuously — user docs during testing, release notes during release, technical docs during design and build.

Phase gates

A phase gate is a short, explicit checkpoint between phases: is the previous deliverable complete and signed off before the next one starts? Gates are where scope creep is caught early and where the client re-confirms they are buying what you are building. Even a one-line email — "Design approved, proceeding to build against this document, dated X" — is a valid gate and a valuable paper trail.

Watch out

Skipping the gate between design and estimate is the most expensive mistake in the whole lifecycle. If you estimate before the design is settled, you are pricing a moving target — and you will own the difference.

03

Deployment models: what stays the same, what shifts

One question arrives the moment a prospect hears "custom software": does this still apply if it runs in a browser instead of on my PC — or the other way round? Yes. This framework is deployment-agnostic. Every phase, every document, the estimation maths and the change-control discipline apply whether the solution runs locally on a specific operating system or in a browser against a cloud server.

Same process, different weight

Web, cloud, mobile and desktop builds run the same lifecycle. What changes is not the steps but the weight inside a few of them — and, more importantly, who is responsible for running the software once it is live. That second point is the deepest difference, and it is commercial, not technical:

  • Desktop / local. The customer's machine is the runtime. You ship a build; their environment runs it. Your operational responsibility largely ends at delivery.
  • Web / cloud. You — or your host — run the single production instance. Uptime, internet-facing security, scaling, monitoring, backups and hosting cost move permanently into your world, for as long as the software exists.

What stays the same, what shifts

PhaseIdentical everywhereWhat a web / cloud build adds or intensifies
RequirementsFunctional behavior & business rulesConcurrency/load, browser & device matrix, responsive layout, latency & offline behavior, uptime / SLA, multi-tenancy
DesignData model, module logicExplicit client/server split, API contracts, session & state management, auth model (tokens / OAuth / SSO), caching
SecurityAccess control & auditA far larger, internet-facing surface: injection / XSS / CSRF, transport encryption, secrets management, dependency & supply-chain risk
TestingUnit → integration → system → regression → UATCross-browser / device testing, load & performance testing, security / penetration testing
ReleaseTested migration, rehearsed rollbackDev / staging / prod environments, CI/CD, zero-downtime strategies — and one bad deploy hits every user at once, so rollback discipline matters more
Support & commercialWarranty, backlog, change controlHosting + subscription (recurring), monitoring, and you now own backups & uptime — versus desktop's license + optional maintenance
The estimation method never changes. What changes is which line items appear and how heavy each one is.

The recurring-cost trap

Watch out · you agreed to run it

The most common web/cloud mistake is quoting the project like a desktop project and forgetting you have just agreed to run it indefinitely. A local app is mostly a one-time build plus optional maintenance. A hosted app carries cost every month it exists: hosting, monitoring, backups, security patching, and your time keeping it healthy. Price the operating model, not just the build — usually as a subscription or managed-service fee — or a successful project quietly becomes an unpaid liability.

This is the same "who benefits, who funds" logic from the engagement-models section, applied over time instead of across features: someone must fund the running of the software, not only its construction.

04

Discovery & requirements

The goal of this phase is a written, agreed answer to one question: what must this software do, for whom, and why? Everything downstream — design, estimate, tests, docs — is traceable back to a requirement stated here.

What you produce

The headline deliverable is a Software Requirements Specification (SRS). It separates three things that are easy to blur:

  • Business requirements — the outcome the client wants (reduce order-entry time, cut errors, enter a new market).
  • Functional requirements — specific behaviors the system must exhibit ("the system shall validate a purchase order against the price list before saving").
  • Non-functional requirements — qualities: performance, security, availability, supported platforms, data volumes, compliance. These are routinely forgotten and routinely expensive.

Equally important are the boundaries: assumptions, constraints, dependencies, and an explicit out-of-scope list. The out-of-scope list is your single best defense against scope creep — write down what you are not doing.

Template · SRS outline

Template · Software Requirements Specification
1.  Introduction
    1.1  Purpose & business objective
    1.2  Stakeholders & intended users (roles)
    1.3  Definitions & glossary
2.  Scope
    2.1  In scope  (bulleted, specific)
    2.2  Out of scope  (bulleted, specific)
    2.3  Assumptions & constraints
    2.4  Dependencies (systems, data, third parties, people)
3.  Current state  (for enhancements: how it works today)
4.  Functional requirements
    FR-1  [Actor] shall be able to [action] so that [outcome]
    FR-2  …  (each numbered & individually testable)
5.  Non-functional requirements
    5.1  Performance & expected data volumes
    5.2  Security, access control & audit
    5.3  Availability, backup & recovery
    5.4  Platforms, browsers, devices, integrations
    5.5  Compliance / regulatory
6.  Data requirements  (entities, sources, retention, migration)
7.  Interfaces  (users, other systems, files, APIs)
8.  Acceptance criteria  (how we agree it's "done")
9.  Open questions & risks
10. Sign-off
Rule of thumb · a good requirement

Every functional requirement should be numbered, atomic, and testable. If you cannot write a pass/fail test for it, it is not yet a requirement — it is a wish. "Fast" is a wish; "returns search results in under 2 seconds for up to 100,000 records" is a requirement.

AI assist · requirements

AI assist

AI is strong at turning messy meeting notes into a structured first draft, surfacing missing non-functional requirements, and generating clarifying questions you should ask the client before quoting. Treat the output as a checklist to interrogate, never as agreed scope.

# Prompt: draft SRS + gaps from raw notes
You are a senior business analyst. Below are raw notes from a client
call about [a new / an enhancement to an existing] application.

1. Draft a structured requirements outline (functional & non-functional).
2. List every ASSUMPTION you had to make to fill gaps.
3. List the 10 highest-value clarifying questions I must ask before
   I can quote this accurately, ranked by how much each could change cost.

Notes:
"""[paste notes]"""

Worked example

Worked example · an enhancement request

Client says: "We need the order screen to handle commodity pricing — prices change daily and vary by source."

Turned into requirements:

  • FR-1 — A user shall record a daily price per commodity, per source, with an effective date.
  • FR-2 — When an order line references a commodity, the system shall apply the price effective on the order date.
  • FR-3 — A user shall be able to view price history for any commodity/source.
  • NFR-1 — Price lookups shall not add more than 200 ms to order-line save.
  • Out of scope — Automated import of external market feeds (noted as a likely phase 2).
  • Open question — What happens to an order priced before a same-day price correction? (Cost driver — must resolve before quoting.)

Notice how one sentence became six testable statements plus a scope boundary plus a pricing-relevant open question. That expansion is the phase's entire value.

05

High-level design (solution architecture)

High-level design answers "what is the shape of the solution?" — the major components, how they fit together, the technology choices, and how the new work connects to anything that already exists. It is deliberately above the code.

What an HLD covers

  • Architecture — the major building blocks and how they communicate (client app, database, services, reporting, integrations).
  • Technology stack — languages, frameworks, database engine, deployment target, and why each was chosen (or is fixed by an existing system).
  • Data model overview — the main entities and relationships, not yet every field.
  • Integration points — every external system, file exchange, or interface, each a known risk and cost.
  • Cross-cutting concerns — security model, error handling, logging/audit, backup and recovery.
  • Key decisions & alternatives — record what you chose and what you rejected, so the choice can be defended later.

For an enhancement, the HLD is mostly about fit: which existing modules, tables and screens are affected, and how the change respects the current architecture rather than fighting it.

Template · HLD outline

Template · High-Level Design
1.  Overview & design goals
2.  Architecture diagram & component summary
3.  Technology stack & rationale
4.  Data model overview (main entities & relationships)
5.  Integration & interface inventory
6.  Security & access model
7.  Non-functional strategy (performance, availability, backup)
8.  Key design decisions & rejected alternatives
9.  Impact on existing system  (enhancements only)
10. Risks & assumptions carried into technical design

AI assist · high-level design

AI assist

Use AI to pressure-test an architecture, not to choose one blindly. Ask it to critique your proposed design, enumerate trade-offs, and generate diagram source (e.g. a text-based diagram description) you can refine. Because model advice varies, cross-checking the same design question across more than one assistant is a cheap way to catch blind spots.

# Prompt: architecture critique
Here is a proposed high-level design for [system]:
"""[paste your component list, stack & data model overview]"""

Constraints that are FIXED and non-negotiable:
- [existing database engine / language / deployment target]

Critique this design. Identify: (1) the top 3 technical risks,
(2) anything that will be expensive to change later, (3) integration
points I may have under-estimated, (4) two alternative approaches with
their trade-offs. Do not suggest changing the fixed constraints.
06

Technical design (detailed design)

Technical design answers "exactly how is each part built?" It is detailed enough that construction becomes largely mechanical — and, crucially, detailed enough to estimate task by task.

What detailed design contains

  • Data schema — every table/entity, field, type, key, index and relationship. This is where a four-table idea becomes an exact set of columns and constraints.
  • Module & procedure specs — for each unit of work: inputs, outputs, logic, and error handling.
  • Interface & API contracts — exact request/response shapes, file layouts, message formats.
  • UI specification — screens, fields, validations, navigation, and states.
  • Security detail — who can do what, at the level of specific actions.
  • Migration & data conversion — how existing data is mapped and moved (a frequent hidden cost).

Template · technical design outline

Template · Technical Design Document
1.  Traceability  (map each section back to requirement IDs)
2.  Data design
    2.1  Schema: tables/entities, fields, types, keys, indexes
    2.2  Relationships & referential integrity rules
    2.3  Migration / conversion mapping (source → target)
3.  Module design  (one block per module)
    - Purpose · Inputs · Outputs · Logic · Errors · Dependencies
4.  Interface design  (screens, reports, files, APIs — exact contracts)
5.  Security & permissions (action-level)
6.  Validation & business rules
7.  Logging, audit & error-handling strategy
8.  Build/task breakdown  (feeds directly into the estimate)
Why this phase is the estimator's best friend

Section 8 above — the task breakdown — is not busywork. A technical design that lists concrete build tasks converts directly into a work breakdown structure. Projects that are hard to estimate are almost always projects whose technical design was never finished.

Enhancement · impact analysis

For changes to a live system, the technical design must include an explicit impact analysis: every existing table, screen, report, and integration the change touches — directly or by side effect. Each touched item is a candidate for regression testing, and each is a line in the estimate.

Watch out · the ripple tax

A "small" change to a shared table or a widely-used routine is rarely small. The change itself may be trivial; verifying that everything else which relies on it still works is the real cost. Estimate the ripple, not just the edit.

07

Estimation & quoting

This is where design becomes a number you are willing to stand behind. Good estimation is not guessing well — it is decomposing the work small enough that the guesses become small, then adding structured allowances for everything that isn't raw coding.

Start with a work breakdown structure

A work breakdown structure (WBS) decomposes the project into tasks small enough to estimate confidently — a useful target is no task larger than one to two days. If a task is bigger than that, break it down further; large tasks hide large errors. The technical design's task list is your starting WBS.

Estimation techniques

TechniqueHow it worksUse when
AnalogousBase the estimate on a similar past projectEarly, ballpark, or a familiar job type
Bottom-upEstimate every WBS task, then sumYou have a technical design — most accurate
Three-point (PERT)Combine optimistic / likely / pessimisticAny task with uncertainty (i.e. most)
Wideband DelphiSeveral people estimate independently, then reconcileHigh-stakes quotes; reduces individual bias
The three-point formula

For each task, capture three numbers: O (optimistic), M (most likely), P (pessimistic). The expected estimate is a weighted average that leans on the likely case but respects the tails:

Estimate = (O + 4M + P) ÷ 6   ·   Uncertainty (σ) = (P − O) ÷ 6

A wide spread between O and P is a signal to reduce risk before quoting — usually by finishing the design of that task.

Coding is only part of the effort

The most common under-estimate treats the developer-hours to write the feature as the whole cost. In reality, construction is often only 40–50% of total effort. A realistic project spreads across the full lifecycle:

ActivityTypical share of effort*Notes
Requirements & design15–20%Higher for new builds & unfamiliar domains
Construction (coding)40–50%The part people mistake for the whole
Testing & QA20–25%Higher for enhancements (regression)
Documentation5–10%User, release & technical docs
Project mgmt & client comms10–15%Meetings, reporting, coordination
Deployment & release3–7%Migration, go-live, rollback prep
*Illustrative planning ratios, not a law of nature — calibrate against your own completed projects over time. They rarely sum tidily; overlap and iteration are normal.

On top of the summed effort, add a contingency/risk reserve sized to the project's uncertainty — a well-defined enhancement might carry 10%, a novel build 25–40%. Contingency is not padding you hope to keep; it is the priced expectation that some tasks will hit their pessimistic case.

The work everyone forgets to price

These tasks rarely appear in a first-draft estimate and routinely blow it. Run the list against every estimate before you send it:

  • · Customer meetings & clarifications
  • · Data cleanup, conversion & migration
  • · Error handling, validation & security
  • · Regression testing & test-data creation
  • · Reports & exports
  • · Environment setup, deployment & rollback
  • · Documentation & training
  • · Beta feedback & rework
  • · Post-release stabilization

Worksheet · estimation

Worksheet · task-level estimate (three-point)
#TaskCxOMPEst (O+4M+P)/6σ
1Data schema & migration for new tablesM6101810.72.0
2Pricing lookup logic & validationM8122213.02.3
3Order-screen UI changesS46106.31.0
4Price-history screen & reportM69169.71.7
5Regression on affected order featuresM58148.51.5
Construction & test subtotal (hrs)48.2

Then build up to the quote:

Construction & test subtotal48.2 h
+ Requirements & design (already partly done in discovery)10.0 h
+ Documentation (user + release notes)5.0 h
+ PM & client communication (~12%)7.6 h
+ Deployment & migration run4.0 h
Base effort74.8 h
+ Contingency @ 20% (defined enhancement)15.0 h
Quoted effort≈ 90 h
× Blended rate ($/h)× $R
Quoted price90 × $R

Rate note: your effective rate must cover non-billable time, tools, and margin — not just an hourly wage. If you want a target profit, price the outcome, then check it against effort; don't let cost-plus be your only lens.

Building the quote / statement of work

The estimate is internal; the quote or Statement of Work (SOW) is what the client signs. A defensible SOW always includes:

Template · Statement of Work
1.  Scope of work        (what's included — reference requirement IDs)
2.  Deliverables         (documents, software, migration, training)
3.  Assumptions          (what must be true for this price to hold)
4.  Exclusions           (explicitly NOT included — mirrors out-of-scope)
5.  Timeline & milestones
6.  Price & payment schedule  (tied to milestones/acceptance)
7.  Acceptance criteria  (how each deliverable is approved)
8.  Change control       (how new scope is priced & approved)
9.  Warranty & support   (what's covered after go-live, for how long)
10. Assumptions on client responsibilities (access, data, test users, sign-off)
Watch out

The exclusions and change control sections protect your margin more than the price does. A clear change-control clause turns "can you just also…" from an argument into a routine, priced add-on.

AI assist · estimation

AI assist

AI is useful for generating a first-draft WBS from a design, for spotting tasks you forgot (migration, error handling, permissions, training), and for drafting SOW prose. It should never set the numbers — your calibrated experience does that. Its value is completeness of the list, not accuracy of the hours.

# Prompt: WBS completeness check
Here is my technical design and my draft task list with hour estimates:
"""[paste design + tasks]"""

Act as a skeptical delivery lead. List every task that is commonly
required but MISSING from my list (e.g. data migration, permissions,
error handling, regression, documentation, deployment, UAT support).
For each, say why it's needed. Do NOT re-estimate my hours — only find gaps.
08

Development

With a signed design and quote, construction should be the most predictable phase. The practices below keep it that way and keep the client confident while it happens.

Practices & cadence

  • Build in slices. Deliver working, demonstrable increments rather than disappearing for weeks. Each slice is a chance for the client to confirm you are on track — and a natural milestone.
  • Version control, always. Every change tracked, with meaningful commit messages tied back to a requirement or task ID. This is your audit trail and your safety net.
  • Coding standards. A short, enforced standard (naming, structure, UI conventions) keeps a codebase maintainable and makes AI-generated code consistent with the rest.
  • Code review. Even a solo developer benefits from a structured self-review or a second-pass tool. For AI-generated code, review is not optional — it is the step that makes the code yours.
  • Progress reporting. A brief, regular status note (done / in progress / blocked / next) prevents the anxiety that drives clients to interrupt.

AI-assisted coding

AI code generation can dramatically accelerate construction, but it changes where the effort goes rather than removing it. The developer's job shifts toward precise specification, review, integration, and testing. The estimate should reflect that shift — less typing, but no less verification.

AI assist · disciplined generation

Give the model the specification, the constraints, and the standards — then treat everything it returns as a draft to be read, tested and understood, never as trusted output to be pasted.

# Prompt: generate against spec + standards
Implement the following module exactly to this specification. Do not add
features beyond the spec. Follow the coding & UI standards provided.
Target platform/language: [fixed stack].

Spec:
"""[paste module spec: inputs, outputs, logic, errors]"""
Standards:
"""[paste your naming / structure / UI conventions]"""

After the code, list: (1) assumptions you made, (2) edge cases I should
test, (3) anything in the spec that was ambiguous.
Watch out

Never paste confidential client code, credentials, or regulated data into a tool whose data-handling terms you have not confirmed the client has agreed to. Confidentiality is a contractual obligation, not a preference.

09

Testing & quality assurance

Testing is how a requirement earns the word "done." A test plan traces each requirement to at least one test; a passing test suite is your evidence — to yourself and the client — that the software does what was agreed.

Levels of testing

LevelQuestion it answersWho runs it
UnitDoes each small piece work in isolation?Developer
IntegrationDo the pieces work together?Developer
SystemDoes the whole system meet the requirements?You / QA
RegressionDid this change break anything that worked before?You / QA
User acceptance (UAT)Does it satisfy the client, on their terms?Client

For enhancements, regression is the headline. The change may be small; the surface it could disturb is not. Your impact analysis is the map of what to regression-test.

Template · test procedure

Template · test case & procedure
Test Plan
  - Scope, requirements covered, environments, test data, entry/exit criteria

Test Case  (one per behavior)
  ID:            TC-014
  Requirement:   FR-2 (apply effective price on order date)
  Precondition:  Prices exist for commodity X on 3 dates
  Steps:         1. Create order dated [D]
                 2. Add line for commodity X
  Expected:      Line price = price effective on [D]
  Actual:        [filled at run time]
  Result:        Pass / Fail
  Notes/defect:  [link to defect if failed]
Entry & exit criteria

Define, in advance, what must be true to start a test cycle (build deployed, data loaded) and to declare it passed (e.g. 100% of critical cases pass, no open severity-1 defects). Without exit criteria, "tested" is an opinion; with them, it is a fact both sides can check.

AI assist · testing

AI assist

AI is excellent at generating test cases from a requirement or a function — especially the edge cases and negative paths a tired human skips. It can also draft test data. Verify that generated tests actually assert the right behavior; a test that passes for the wrong reason is worse than no test.

# Prompt: generate test cases from a requirement
Given this requirement and its logic:
"""[paste FR + relevant rules]"""

Produce a table of test cases covering: the happy path, boundary values,
invalid inputs, and at least 3 edge cases likely to be missed. For each:
ID, precondition, steps, expected result. Flag which cases are most
likely to reveal a defect.
10

Beta testing

Beta is the controlled exposure of the software to real users doing real work, before general release. It catches the problems that only appear with genuine data, genuine workflows, and genuine human behavior.

Template · beta plan

A beta needs a plan, not just an audience. Define who is in it, what "success" looks like, and how feedback flows back to you.

Template · Beta plan
1.  Objectives          (what the beta must prove)
2.  Participants         (roles, count, environment)
3.  Duration & schedule
4.  Entry criteria       (what must be true to start)
5.  Scope of use         (what testers should exercise)
6.  Feedback channel     (how issues are reported & triaged)
7.  Severity definitions (blocker / major / minor / cosmetic)
8.  Exit criteria        (e.g. no open blockers, X% tasks completed)
9.  Support during beta  (response times, known-issues list)
10. Go / no-go decision  (who decides, on what evidence)
Watch out

A beta without exit criteria becomes permanent. Decide up front what result lets you move to release, or the beta will quietly absorb unbudgeted weeks.

Client-facing · beta invite

Client-facing snippet · inviting beta users
Subject: You're invited to the [feature] beta

We've completed and tested the new [feature] and would like a small group
of your team to use it with real work for [duration] before we roll it out
to everyone.

What we'd ask of you:
 • Use it as you normally would for [these tasks].
 • Report anything odd via [channel] — even small things help.
 • Know that this is a controlled test: we're watching closely and can
   step in quickly.

What you can expect from us:
 • [Response time] on anything blocking your work.
 • A short list of known items we're already aware of.
 • A clear decision point at the end on moving to full release.

Your feedback here directly shapes the final version. Thank you.
11

Documentation

Documentation is a deliverable, not an afterthought — and it is a line item in the quote. Different readers need different documents; conflating them serves none of them well.

The document set

DocumentReaderAnswers
User guideEnd usersHow do I do my job with this?
Admin guideAdministratorsHow do I configure & manage it?
Release notesEveryoneWhat changed in this version?
Technical / maintenance docFuture developers (incl. you)How is it built & how do I safely change it?
API / interface docIntegratorsHow does another system talk to it?
Install / deployment docWhoever deploysHow do I stand it up correctly?

Write user-facing docs during testing (you are exercising the features anyway) and technical docs during design and build (the knowledge is freshest then). Release notes are assembled at release from the change log.

AI assist · documentation

AI assist

Documentation is one of AI's highest-value uses: drafting user guides from a feature list, turning a change log into readable release notes, generating first-pass technical docs from code, and rewriting your terse notes into clear end-user language. You still own accuracy — verify every instruction against the actual software.

# Prompt: user-guide section from a feature
Write a user-guide section for the feature below, for a non-technical
end user. Use plain language, numbered steps, and name things the way the
user sees them on screen (not by internal component names). Include a short
"what this is for" intro and a "common questions" list.

Feature spec / screenshots described:
"""[paste]"""
12

Release & deployment

Release is the moment of highest risk and highest visibility. A written, rehearsed release procedure turns a nerve-wracking event into a routine one — and gives you a way back if something goes wrong.

Template · release checklist

Template · Release & deployment checklist
Pre-release
  [ ] All exit criteria met; no open blockers
  [ ] Release notes finalised & user docs updated
  [ ] Version tagged in source control
  [ ] Full backup of current system & data taken
  [ ] Rollback plan written & understood
  [ ] Deployment window agreed with client
  [ ] Data migration script tested on a copy of production

Deployment
  [ ] Notify users of window / downtime
  [ ] Deploy build to production
  [ ] Run migration; verify record counts & spot-check data
  [ ] Smoke-test critical paths in production

Post-release
  [ ] Confirm with client that key workflows work
  [ ] Monitor for [period]; keep rollback ready
  [ ] Log go-live; open the warranty/support period
  [ ] Short retrospective: what to improve next time
Watch out · migration & rollback

Two things sink go-lives: a data migration that was never tested against a real production copy, and the discovery — mid-incident — that there is no rollback. Test the migration on a copy, and never deploy without a written way back.

Client-facing · go-live communication

Client-facing snippet · go-live notice
Subject: [System] update — going live [date/time]

We're ready to release [feature/version]. Here's what to expect:

 • When: [date], starting [time]. Expected downtime: [duration].
 • During the window: please [save work / log out / avoid X].
 • After: you'll see [brief description of what's new]; the release notes
   are attached.
 • If anything looks wrong: contact [channel]. We'll be monitoring closely
   for [period] and can respond quickly.

We've backed everything up and tested the update thoroughly, including a
rehearsal on a copy of your live data. Thank you — we'll confirm here once
it's done.
13

Support & maintenance

Go-live is not the end of the relationship — it is the start of the next one. Defining support and change terms up front turns "the app has a problem" from a dispute into a process.

Warranty & support tiers

  • Stabilization period. The first days or weeks after go-live are their own phase, not "done." Watch errors, performance and real user behavior closely, fix production defects ahead of everything else, and confirm users are actually following the intended workflow before you consider the project closed.
  • Warranty period. A defined window after go-live in which defects against the agreed spec are fixed at no charge. Be precise: a warranty covers defects (it doesn't do what was agreed), not new wishes (it should also do this).
  • Support tiers. Distinguish break/fix support from enhancement work, and define response expectations by severity. A retainer or support agreement is the natural home for ongoing small changes.
  • Backlog. Capture everything that surfaces — deferred ideas, "phase 2" items, minor requests — in one visible list. It becomes both a roadmap and a source of future quotes.

Change control

Every request that goes beyond the signed scope enters change control: it is written down, assessed for impact, estimated, and approved before work begins — exactly like a mini version of the whole lifecycle. This is not bureaucracy; it is what protects both the client's budget and your margin, and it keeps the original project's success from being diluted by unpriced additions.

The change-control reflex

When you hear "can you also just…", the professional response is warm and structured: "Good idea — let me scope that as a small change so you can see the cost and we don't disturb the current timeline." You have said yes to the relationship and no to unpriced scope, in one sentence.

14

AI across the lifecycle

AI tools can add value in nearly every phase — but the value is in speed and completeness of drafts, not in delegated judgement. Used well, AI lets a small team produce the artifact quality of a much larger one; used carelessly, it produces confident, plausible errors at scale.

Phase-by-phase map

PhaseHigh-value AI usesYou must still own…
RequirementsStructure raw notes; surface missing NFRs; generate clarifying questionsWhat the client actually agreed to
High-level designCritique architecture; enumerate trade-offs; draft diagramsThe chosen architecture & its risks
Technical designDraft schemas & module specs; find edge casesCorrectness against requirements
EstimationDraft WBS; find forgotten tasks; draft SOW proseThe hours & the price
DevelopmentGenerate code to spec; explain unfamiliar code; refactorReview, testing, integration
TestingGenerate test cases & data; find negative pathsWhether tests assert the right thing
DocumentationDraft user guides & release notes; simplify languageAccuracy vs. the real software
Enhancement analysisSummarise legacy code; map dependencies for impact analysisVerifying the map is complete

Ground rules

  • Human-in-the-loop, always. Every AI output is a draft that a person reviews, tests, and takes responsibility for. Accountability cannot be delegated to a tool.
  • Verify, then trust. Code must be tested; facts must be checked; documentation must be validated against the running software. Cross-checking a critical answer across more than one assistant is a cheap way to catch confident errors.
  • Confidentiality is contractual. Do not put client code, data, or credentials into tools whose terms the client hasn't accepted. When in doubt, generalise the problem before asking.
  • Specification in, quality out. AI amplifies the clarity of your input. A precise spec and explicit standards produce usable drafts; vague prompts produce plausible mistakes.
  • Estimate the review, not just the generation. AI shifts effort from typing to specifying and verifying — it rarely removes the verification. Price accordingly.
15

Deliverables matrix

A single view of what each phase produces, who approves it, and the gate it feeds. Use it as a project checklist and as the backbone of a proposal's "what you receive" section.

Documents by phase

PhasePrimary deliverable(s)Approved byGate it opens
RequirementsSRS; scope & out-of-scope; open questionsClientBegin design
High-level designHLD; architecture & stack decisionsYou (client informed)Begin technical design
Technical designTDD; schema; task breakdown; impact analysisYouProduce estimate
Estimate & quoteWBS; estimate; SOW / quoteClientBegin build
DevelopmentWorking increments; change log; codeYou (client demos)Begin formal testing
Testing & QATest plan; test results; defect logYouBegin beta / UAT
BetaBeta plan; feedback log; go/no-goYou + clientRelease
DocumentationUser, admin, release & technical docsClient accepts user docsRelease
ReleaseRelease checklist; deployment; migration; rollback planClient (go-live)Support period
SupportWarranty terms; support agreement; backlogClientNext change / project
16

Communicating with clients & prospects

Most project failures are communication failures wearing a technical costume. The phases above give you the substance; this section gives you the language to set expectations, protect scope, and keep trust.

Setting expectations early

  • Lead with the process, not the price. A prospect who understands how you work will trust the number more. "Here is how we define and build" beats "here is a figure."
  • Name the unknowns. Saying "we can't price the build accurately until we've defined it — that's what discovery is for" is more credible than a confident guess, and it usually wins the work.
  • Make scope a shared object. Refer to the requirements and SOW as "our agreement," a thing you both maintain — not a document you imposed.
  • Report rhythmically. Predictable short updates reduce anxiety and interruptions far more than occasional long ones.

Reusable snippets

Client-facing snippet · responding to "roughly what will it cost?"
Great question — and the honest answer is that a reliable number needs a
little definition first. What I can do right now is give you a ballpark
range based on similar work, and propose a short paid discovery step that
pins the scope down and produces a firm, fixed quote you can decide on.
That way the figure you commit to is based on a real plan rather than an
optimistic guess — which protects your budget as much as it does my time.
Client-facing snippet · handling a mid-project scope request
That's a sensible addition and I'd like to include it properly. Because it
goes a little beyond what we scoped, let me write it up as a small change:
you'll get a quick estimate of cost and any timeline impact, and once you're
happy we'll fold it in. That keeps the current work on track and makes sure
nothing gets added without you seeing the cost first.
Client-facing snippet · proposal "how we work" paragraph
Every project we take on follows the same disciplined path: we define the
requirements in writing, design the solution before we build it, quote from
that design rather than a conversation, then build in reviewable increments,
test against the agreed requirements, and release with a tested migration and
a way back if needed. You receive documented deliverables at each stage — so
you always know what you're getting, what it costs, and why.

Prospect red flags to price carefully

  • · "It should be simple"
  • · No one can describe the current process
  • · "Just like X, but…"
  • · Undocumented legacy system
  • · Many stakeholders, no decision-maker
  • · Hard deadline, soft requirements
  • · "We'll figure out the details later"

None of these are reasons to walk away — they are reasons to insist on paid discovery and to size contingency generously. Each is a signal that the gap between what's said and what's needed is wide.

17

Governance, roles & risk

Someone must own each decision, and every project carries the same handful of predictable risks. Naming owners and pre-loading controls turns governance from overhead into cheap insurance.

Who owns what

RoleOwns
Executive sponsorThe outcome, the budget, and the project's priority
Product / business ownerRequirement and scope decisions
Subject-matter expertOperational rules and scenario validation
Project leadScope, schedule, risks, actions, communication
Technical leadArchitecture, implementation quality, technical risk
Test / UAT leadTest preparation, evidence, and acceptance
Release ownerDeployment, rollback, verification, support readiness
On a solo or two-person project one person wears every hat — but the hats still exist. Naming them stops a responsibility from silently going unowned.

Control artifacts

Keep these lightweight — a shared document or a few tabs in a spreadsheet is enough for most jobs. The point is not ceremony; it is that each one exists and stays current.

  • · SOW / charter
  • · Milestone plan
  • · Responsibility matrix
  • · Risk & issue log
  • · Decision log
  • · Change-request log
  • · Environment plan
  • · Communication plan
  • · Acceptance plan

Risk register

Most project risk is not exotic — it repeats. Carry a standing register so each risk has a warning sign you can watch for and a control you already know you'll apply.

RiskWarning signControl
Incomplete requirements"We forgot…" / "That's not what we meant"Paid discovery, written scenarios, sign-off
Optimistic estimateQuote made before design & testing understoodWBS, three-point estimate, stated assumptions
Scope creepRequests added informally, in passingChange log + commercial approval
Client delayLate answers, data, testing, or approvalsNamed owners, due dates, schedule-impact notes
Poor data qualityDuplicates, missing keys, inconsistent valuesEarly data sample, conversion plan, cleanup budget
Integration surpriseUndocumented external system or interfaceInterface spike, confirm the contract, add contingency
Key-person dependencyOne person holds critical knowledgeDocumentation, cross-review, recorded decisions

Acceptance & sign-off

Each major deliverable ends with an explicit, recorded acceptance against its acceptance criteria — a signed page, or even a dated email that says "approved, proceeding against this." Sign-off is not a formality: it is the moment scope is frozen for that stage, and the paper trail that protects both sides if memory later diverges.

18

Toolkit: agendas & review

Reusable agendas keep meetings short and complete; a disciplined post-project review is how your estimates get more accurate every year.

Meeting & review agendas

Agenda · discovery meeting
□ Business objective & urgency
□ Current process — live demonstration
□ Users & responsibilities
□ Inputs, outputs, data & documents
□ Rules, calculations & exceptions
□ Volume, timing, performance, security
□ Reports & integrations
□ Examples to collect · follow-up actions & owners
Agenda · design review
□ Confirm scope & exclusions
□ Walk the future workflow
□ Review components & data flow
□ Review rules & error handling
□ Review security & audit behavior
□ Review acceptance criteria
□ Confirm open decisions & owners
Checklist · release readiness
□ Test status & open defects reviewed
□ Data conversion verified on a production copy
□ Documentation & training ready
□ Deployment & rollback rehearsed
□ Support coverage in place
□ Go / no-go decision recorded, with owner

Post-project review & the estimating library

The single highest-return habit in estimation is closing the loop. After each project, spend half an hour comparing your estimate to what actually happened, and feed what you learn into a private estimating library — your own record of what this kind of task really costs. Over a handful of projects, that library beats any generic ratio, including the ones in this guide.

Template · post-project review
• What did we estimate accurately?
• What work did we miss entirely?
• Which assumptions turned out false?
• Where did scope change, and why?
• Which AI uses actually saved time?
• What should we templatize or reuse next time?
• What ACTUAL effort should we add to the estimating library?
19

Quick-start playbook

The whole guide compressed to a single screen. When a new opportunity lands, this is the path — expand any step by jumping to its section above.

The twelve moves
  1. Qualify — sponsor, budget, fit? Offer a ROM range only, never a quote.
  2. Sell discovery — a small paid step that produces the specification.
  3. Define — the SRS: requirements, boundaries, explicit out-of-scope.
  4. Designhigh-level then technical, detailed enough to estimate and build.
  5. EstimateWBS + three-point + overhead + contingency → quote / SOW.
  6. Agree — signed scope, price, acceptance criteria, change control.
  7. Build — reviewable slices, version control, standards, AI to spec.
  8. Test — unit → integration → system → regression → UAT, against the requirements.
  9. Beta — real users, real data, exit criteria, go/no-go.
  10. Documentuser, release & technical docs.
  11. Release — tested migration, rehearsed rollback, go-live comms.
  12. Stabilize & support — warranty, backlog, post-project review.
20

Tech stacks: the landscape & how to choose

A "stack" is the combined set of tools a solution is built from — language, framework, database and runtime. Everything else in this guide is stack-neutral, but the stack you choose (or inherit) shapes cost, speed, hiring, longevity and risk. This section maps the main families and the trade-offs that matter when you scope and quote.

What a stack is

Most solutions layer the same way: a presentation layer (what the user sees), an application/logic layer (the rules), a data layer (where information lives) and a runtime/hosting layer (where it all executes). A stack is one concrete choice at each layer. For an enhancement, the stack is usually fixed by the existing system — you work with it. For a new build, it is a decision with long consequences, because the data layer in particular is the hardest thing to change later.

The main families

FamilyRepresentative toolsBest-fit workTrade-offs to price in
Desktop / nativeC#/.NET (WPF, WinForms, MAUI); template-driven 4GL / RAD tools; Delphi; C++/Qt; JavaData-heavy internal business apps; high local performance; offline; tight OS integrationUpdate distribution is manual; per-machine environment variance; some mature RAD/4GL tools have smaller hiring pools — weigh maintainability & succession
Server-rendered webASP.NET Core; Java/Spring; Python/Django; Ruby on Rails; PHP/Laravel; Node/ExpressBrowser-delivered business apps; central deployment; broad reach; no installYou now operate a server: security surface, hosting & ongoing ops cost
Single-page / modern front-endReact, Angular or Vue over an API backendRich, app-like interfaces; interactive dashboardsTwo codebases (client + API); API-contract discipline; more testing
MobileNative: Swift (iOS), Kotlin (Android). Cross-platform: Flutter, React Native, .NET MAUIOn-the-go use; camera, GPS, notifications, offlineApp-store review & policies; device fragmentation; release cadence tied to stores
Cloud & backend servicesAzure, AWS, GCP; managed databases; containers; serverless functionsScale, elasticity, managed operations, global reachOngoing spend; some vendor lock-in; requires ops/DevOps skills
Data layer (cross-cutting)SQL Server, PostgreSQL, MySQL, SQLite; ISAM / file-based stores; NoSQLEvery application above sits on one of theseOften the most durable, hardest-to-change decision — treat it as architecture, not a detail
Low-code / rapid platformsVendor app builders & workflow toolsSimple internal tools built fastTrades flexibility & portability for speed; watch lock-in and ceilings

How to choose (or justify) a stack

There is no universally "best" stack — only the best fit for this work, this team, and this time horizon. Weigh these factors, roughly in order:

  • Constraint first. Enhancements inherit the existing stack. Work with it, not against it — fighting the platform is a hidden cost few estimates survive.
  • Fit for the work. Data-heavy business CRUD, rich interactive UI, mobile-first, and internet-scale are genuinely different problems that favor different families.
  • Team skills. The best stack you can't staff is the wrong stack. A mature tool the team already knows often beats a fashionable one they'd have to learn on the client's budget.
  • Longevity & hiring pool. Who maintains this in five to ten years? Smaller ecosystems can build faster but are harder to hand over — a real factor for succession, or if the business may be sold.
  • Total cost of ownership. Licenses, hosting and operations — not just build hours. A "cheaper" build on an expensive-to-run platform is not cheaper.
  • Integration reality. What must it talk to, and does the stack make that easy or painful?
  • Exit / hand-over. If the business or product might change hands, a mainstream stack is materially easier — and more valuable — to transfer.
The honest rule

Match the stack to the job and to whoever must live with it. Speed of building matters at the start; ease of maintaining, staffing and handing over matters for the entire life of the software — which is almost always longer than the project that created it.

21

Glossary

Plain-language definitions of the terms used in this guide. Useful as a shared vocabulary internally, and as a reference you can share with less technical clients.

TermDefinition
Acceptance criteriaThe specific, agreed conditions under which a deliverable is considered complete and approved by the client.
Beta testingA controlled release to a small group of real users doing real work, before general availability, to catch issues that only appear in genuine use.
Change controlThe process of documenting, assessing, estimating and approving any work that falls outside the agreed scope, before it is done.
Contingency (reserve)An amount added to an estimate to cover the expected reality that some tasks will take longer than their most-likely case; sized to project uncertainty.
DiscoveryAn early, usually paid, phase whose purpose is to define requirements and design well enough to produce a firm build quote.
Estimating libraryA private, growing record of how long particular kinds of task actually took on past projects, used to calibrate future estimates against reality rather than generic ratios.
Functional requirement (FR)A specific behavior the system must exhibit, written so it can be individually tested.
High-level design (HLD)The overall shape of the solution — components, technology, data model overview and integrations — above the level of code.
Impact analysisFor enhancements, the identification of every existing part of a system a change could affect, directly or as a side effect.
MilestoneA defined, verifiable point in a project, often tied to a deliverable, an acceptance step, and a payment.
Non-functional requirement (NFR)A quality the system must have — performance, security, availability, supported platforms, compliance — rather than a specific behavior.
Opportunity qualificationAn early filter, before discovery, that decides whether a request is worth pursuing at all — assessing sponsor, budget, timeline, fit, and whether the client will pay for discovery.
Phase gateA checkpoint between phases where the previous deliverable is confirmed complete and approved before the next phase begins.
Regression testingRe-testing existing functionality to confirm that a change has not broken anything that previously worked.
Release notesA concise, reader-facing summary of what changed in a given version of the software.
Responsibility matrix (RACI)A grid mapping each role to what they are Responsible for, Accountable for, Consulted on, or Informed about — so no decision or task is left unowned.
Risk registerA standing list of a project's likely risks, each paired with a warning sign to watch for and a control to apply.
Rollback planA pre-defined way to return a system to its previous working state if a release goes wrong.
Rough Order of Magnitude (ROM)A deliberately wide, early cost range given to gauge interest before the work is defined — explicitly not a quote or a commitment.
Software Requirements Specification (SRS)The primary requirements document, separating business, functional and non-functional requirements plus scope and boundaries.
Stabilization periodThe initial window immediately after go-live, treated as its own phase, in which production defects are prioritized and real-world use is monitored before the project is considered closed.
Statement of Work (SOW)The client-facing agreement defining scope, deliverables, timeline, price, acceptance, exclusions and change control.
Technical design (TDD)The detailed design that specifies exactly how each part is built — schema, module specs, interfaces — detailed enough to estimate and construct from.
Three-point estimate (PERT)An estimate combining optimistic, most-likely and pessimistic values as (O + 4M + P) ÷ 6 to account for uncertainty.
User acceptance testing (UAT)Testing performed by the client to confirm the software meets their needs on their terms, typically the final gate before release.
Warranty periodA defined window after go-live during which defects against the agreed specification are corrected at no additional charge.
Work breakdown structure (WBS)A decomposition of a project into tasks small enough to estimate confidently — typically no larger than one to two days each.
↑ Top