Developer invoices go wrong in two predictable ways: the client cannot tell what they are approving because every line is jargon, or a milestone gets invoiced before anyone agreed it was finished. Both are avoidable with a bit of structure.
Pick a billing model and make the invoice match it
Hourly. Show the period, the total hours, and the rate. Attach or reference a time log the client can open. Bill in small increments — 15 minutes is standard — and round consistently. Hourly is honest about uncertainty, but it caps your income at your available hours.
Fixed fee. One deliverable, one price, agreed before you start. The invoice can still list the components so the client sees the shape of the work, but the number does not move because you were fast or slow.
Milestone. A fixed-fee project cut into stages, each with its own acceptance criteria and its own payment. This is the model most worth defaulting to for anything longer than a couple of weeks: you are never more than one milestone out of pocket, and the client sees progress tied to money.
Retainer. A recurring block of capacity — hours or a scope of support — billed on a fixed date each month. State the cap, the overage rate, and the rollover rule.
Write outcomes, not tasks
The person approving your invoice is often not the person you talk to about code. Give them lines they can evaluate: "Checkout flow live in production", "Search returns results in under 200ms", "Admin can export a CSV of orders". Your branch names and pull requests hold the detail; the invoice holds the result.
Tie every milestone to an acceptance
For each milestone, the contract should say what has to be true for it to count as delivered — a feature demoable on staging, a test suite passing, a document signed off. When that condition is met, get a short written confirmation, then invoice with the milestone named and dated. If you invoice on your own say-so and the client disagrees, you are now negotiating with your own money on the table.
Handle expenses and third-party costs separately
Cloud bills, paid APIs, font or asset licences, and contractor time you are passing through belong on their own lines with documentation, not inside your fee. Mark clearly whether a cost is billed at face value or with a handling margin, and agree that in advance.
Set terms that fit a small shop's cash flow
Net 15 is a reasonable default for independent developers; net 30 is common with larger clients and worth pricing in. Whatever you choose, write it as a date, name any late fee, and for milestone projects consider requiring the previous milestone to be paid before the next one starts.
Working with overseas clients
Much contract development is cross-border. Agree the invoicing currency up front and stick to it, so exchange-rate movement is the client's concern and not a monthly renegotiation. Put the bank details an international transfer needs on the invoice — IBAN and BIC, or an ACH and wire routing, plus your address as the account holder — and state who absorbs the transfer fee. If both you and a client in the same tax area are registered for VAT or GST, check whether a reverse-charge note and both registration numbers belong on the invoice. Sales-tax and VAT rules shift with each country and with your registration status, so take this as background and not tax or legal advice for your specific case.
When hours are questioned
If a client disputes a timesheet, the fix is not to argue over the total but to have the detail ready before they ask. Keep your time log in a tool the client can see, note what each block of hours produced, and reference the log on the invoice. A dispute over "40 hours" is hard; a dispute over a logged, described list of tasks rarely gets started.
Before you send
- Your name or company, address, and tax number
- The client's entity name and a billing contact
- A unique invoice number and both dates
- Billing model reflected in the lines: hours and rate, fixed fee, or named milestone
- Each milestone referenced to its accepted deliverable
- Pass-through costs itemised with documentation
- Payment terms, methods, and any late fee
Set your lines above and download the PDF. A free NeatDue account keeps client records and invoice numbers in order between projects.