When a Freelancer Tries to Turn One Client's Tool Into a Product
A solo developer who builds a custom tool for one client often assumes productizing it for others is just a matter of selling it again. The contract usually says otherwise.
The Tool Already Works. The Contract Might Not
A solo developer spends eight months building a scheduling and inventory system for a ten-location veterinary clinic chain. The work started as a fix for a specific problem: the chain's practice management software couldn't handle multi-location vaccine inventory without someone manually reconciling spreadsheets every week. The developer built something better, got paid by the hour, and delivered a tool the clinic now depends on daily.
Then a second veterinary group hears about it, maybe through a shared vendor or a regional trade group, and asks if they can buy something similar. The developer says yes before checking two things that should have come first: what the original contract actually says about ownership, and whether the tool was ever built to be anything other than one client's internal system.
This is a common moment for independent contractors and small dev shops. It feels like the natural next step: you solved a real problem once, so solve it again for money, repeatedly, with less marginal effort each time. The mechanics of getting there are less forgiving than they look.
Who Owns What You Built
Most standard contracting agreements include a work-for-hire clause or an IP assignment clause, and the two are not identical. A true work-for-hire arrangement often means the client owns the code outright, as if they'd written it themselves. An IP assignment clause has the developer retain authorship but transfer ownership rights to the client. Either way, the practical result for a developer eyeing a second buyer is usually the same: you don't own the thing you built, so you have nothing to resell.
The complicating detail is that most custom builds aren't pure. A developer who built a scheduling tool for one veterinary chain likely also built, or reused, pieces that aren't specific to that client: a generic authentication module, a reporting library, scheduling logic that could serve any multi-location service business. If the original contract assigned "all work product" to the client without distinguishing between client-specific code and general-purpose components, the developer may have unknowingly signed away the reusable parts along with the custom parts.
This is worth sorting out before pitching anyone else, not after. A developer who wants to productize needs to go back to the original agreement and determine, specifically, what was assigned, what (if anything) was licensed rather than assigned, and whether there's language granting the developer a right to reuse general components in future work. If the contract is silent or ambiguous, that's a conversation to have with the first client directly, ideally framed as a request for a narrow license to reuse non-proprietary pieces, not as a request to compete with them.
The Client Who Paid for It Didn't Sign Up to Fund a Competitor's Software
Even when ownership is clean, there's a second problem that has nothing to do with contract law and everything to do with how the first client will feel. A veterinary chain that spent real money funding custom development reasonably expects some return on that investment beyond just owning the tool. Sometimes that expectation is written into the contract as exclusivity. Often it isn't written anywhere, but it's there anyway, and it surfaces the moment the client finds out the same tool (or a close cousin of it) is being sold to a group two states over.
The instinct many developers have is to offer the first client a permanent discount or a free upgrade path as a kind of informal apology for commercializing the thing they funded. That instinct is understandable, but it creates a pricing anchor that follows the product indefinitely. The first buyer becomes the cheapest buyer forever, and every negotiation with every subsequent client gets shaped by a number that was never meant to be a market price. This same dynamic plays out almost identically in legal software, where the first firm's custom-rate deal quietly becomes the template every later deal gets measured against. The better move is usually to negotiate a one-time buyout of exclusivity rights with the first client, clearly scoped and clearly priced, rather than letting an open-ended discount calcify into the product's permanent floor.
From Billing Hours to Billing Subscriptions
The pricing model has to change in a way that's easy to underestimate. Hourly billing works because the developer is being paid for time spent solving one client's problem, and the client absorbs the full cost of that time. A product sold to multiple veterinary clinics can't work that way. The economics only function if the engineering, hosting, and support cost gets spread across many customers paying a smaller, recurring amount each.
That's a different business, not just a different invoice format. It means thinking about churn, support load per customer, infrastructure costs that scale with the number of clinics using the system simultaneously, and a pricing structure that holds up whether the developer lands three customers or thirty. Making that jump from hourly billing to an actual subscription is its own exercise, and developers who skip it tend to underprice badly, because their instinct is still to estimate hours rather than estimate the value of solving the same problem repeatedly.
What Has to Change in the Code, Not Just the Contract
The part that's easiest to miss while sorting out IP and pricing is that the software itself probably isn't a product yet. A tool built for one veterinary chain likely has that chain's specific workflow baked into it: the exact integration with their particular practice management platform, assumptions about their location count, maybe hardcoded references to their vaccine protocols or their vendor list. None of that is a flaw in the original build. It's a sign the tool was built correctly for the job it was hired to do.
Turning it into something sellable to a second and third clinic group means pulling those assumptions out and replacing them with configuration. That's real engineering work, not repackaging, and it has a cost that needs to be priced into the first few sales rather than treated as free because "the hard part is already built."
The Practical Test
Before pitching client number two, a developer should be able to answer one question honestly: could a third, unrelated veterinary group buy this tool and get real value from it by changing configuration settings alone, without the developer rewriting core logic or violating anything promised to client number one? If the honest answer involves a custom rebuild for each new buyer, there's no product yet, just a consulting practice with a reusable starting point. That's not a failure. It's useful information about which business you're actually running, and it should decide how the next contract gets written before any code changes hands.
Comments
Join the discussionThe vet clinic example is painfully common. Eight months of hourly work, a tool that solves a real problem across ten locations, and then the freelancer learns that "all work product" in the contract covered the reusable pieces too.
What I take from it is that ownership is a scoping question. If a developer expects to reuse a component, that has to be written down before the work starts, along with what the client gets, such as a perpetual licence or a discount. Raising it after the tool works feels like a grab, even when the request is fair.
Hourly billing makes this harder because nobody ever defines the deliverable, so nobody defines what sits outside it.
At Ascendra Ventures we agree one defined outcome at a fixed price and list what the client owns as part of that scope. Did the clinic chain end up open to a licence deal, or was the product idea dropped?




