Freelancing and Consulting Practice
Freelancing and consulting give developers control over their work, clients, and income — and make them responsible for everything an employer usually handles: finding work, scoping it, pricing it, writing contracts, managing changes, getting paid, protecting client data, and leaving behind systems the client can maintain. Technical skill gets you hired; these practices keep engagements profitable and relationships healthy.
Most freelance problems trace back to a few root causes: vague scope, prices that ignore risk, missing change processes, poor communication, and handovers that leave clients dependent or confused. The fixes are well understood and mostly written down before work starts.
TL;DR
- Position around a problem you solve for a specific kind of client; referrals and visible work bring better clients than job boards.
- Run paid or bounded discovery before committing to large fixed scopes.
- Write a statement of work: deliverables, acceptance criteria, assumptions, exclusions, timeline, and change process.
- Choose pricing models deliberately — hourly or daily, fixed fee, retainer, or value-based — and price risk in.
- Use contracts covering IP, confidentiality, liability limits, payment terms, and termination; get local legal and tax advice.
- Communicate weekly, manage change requests formally, protect client data, and hand over documented, accessible work.
Quick Example
A statement of work skeleton that prevents most scope disputes:
A change request log shared with the client:
Core Concepts
Positioning and Finding Work
Clients buy solutions to problems, not hours of a programming language. Positioning around a domain or outcome ("payment integrations for e-commerce", "performance rescues for Rails apps") makes you easier to recommend and supports higher rates. Most good work comes from referrals, former colleagues, communities, open source contributions, and writing or speaking that shows expertise.
Discovery and Scoping
For anything beyond a small, clear task, start with discovery — a short, paid engagement to understand the problem, systems, constraints, and stakeholders, producing a plan and estimate. Scoping should map change impact across code, data, integrations, and people; see Software Estimation and Change Impact.
Pricing Models
Price risk into fixed fees (unknowns, client dependencies, revisions), set minimum engagement sizes, and remember that your rate covers non-billable time, tools, insurance, taxes, and gaps between projects. See Salary Negotiation for negotiation principles.
Contracts
A master services agreement plus statements of work is common for ongoing clients. Key terms include intellectual property ownership and licensing (including your pre-existing tools and any open source components; see Open Source Licensing), confidentiality, warranties, limitation of liability, payment terms and late fees, termination, and dispute resolution. Laws, taxes, insurance, and contractor classification rules differ by country — use templates reviewed by a local lawyer and get tax advice.
Change Requests
Scope changes are normal; unmanaged ones destroy margins and relationships. Every change gets a written request, an estimate of time and cost impact, and written approval before work starts. Keep a visible change log.
Communication
Send a short weekly update: progress, next steps, risks, decisions needed, and budget or timeline status. Raise problems early, with options. Agree on response times and availability up front.
Security and Handover
- Use client-owned accounts for repositories, cloud resources, and services wherever possible; avoid hosting client systems on personal accounts.
- Keep client data and credentials separate, encrypted, and accessed only as needed; never store secrets in code. See Secrets Management.
- Hand over with documentation (setup, architecture, operations, known issues), a README that lets another developer run the project, transferred access and credentials, and a walkthrough with the client's team.
- Offer an optional support or maintenance agreement with defined terms instead of open-ended favors.
Best Practices
Write It Down Before You Start
Scope, assumptions, exclusions, acceptance criteria, and change processes belong in the statement of work.
Price for Risk and Overhead
Account for unknowns, non-billable work, and business costs in every quote.
Communicate on a Rhythm
Weekly updates and early warnings build trust and prevent surprises.
Leave Clients Independent
Build in client-owned accounts and hand over complete documentation and access.
Common Mistakes
Fixed Price on Vague Scope
Informal Changes
Handover by Disappearing
FAQ
How should a freelance developer price work?
Choose a model that fits the scope's certainty — time-based for unclear work, fixed fee for well-defined deliverables, retainers for ongoing availability — and include risk, overhead, taxes, and non-billable time in the price.
What should a statement of work include?
Objectives, deliverables, acceptance criteria, assumptions, exclusions, timeline, price and payment schedule, and the change request process.
How do I handle scope creep?
Treat every change as a change request: write it down, estimate its time and cost impact, get written approval, and log it.
Who owns the code in a freelance project?
It depends on the contract and local law. Commonly the client receives ownership or a license to the deliverables on payment, while the freelancer keeps pre-existing tools. Define it explicitly in the contract.
How do I hand over a project well?
Use client-owned accounts from the start, document setup and operations, transfer all access and credentials, record known issues, and walk the client's team through the system.
Related Topics
- Developer Career — Growing as a software developer
- Software Estimation and Change Impact — Scoping and estimating work
- Salary Negotiation — Negotiating rates and terms
- Open Source Licensing — Licenses in client deliverables
- Secrets Management — Handling client credentials
- READMEs — Documentation for handover