From the FinishLine AI Blog

Owning Your Codebase: What That Actually Means

You paid for custom software. But do you actually own it? Can you take it to another developer tomorrow? Do you even know where your code lives? These questions matter more than most founders realize, and the wrong answers can cost you months and tens of thousands of dollars.

The Problem: What “Ownership” Usually Looks Like

Most founders assume that when they pay a developer to build custom software, they automatically own it. That assumption gets expensive fast.

Here's what actually happens in many development relationships:

  • The code sits in the developer's GitHub account, not yours
  • Your hosting runs through their AWS or Vercel account
  • The database credentials are stored in their password manager
  • API keys and third-party service accounts are in their name
  • The contract says nothing specific about IP assignment

This setup works fine until it doesn't. When you want to make a change, fix a bug, or add a feature, you're dependent on that developer's availability and pricing. If they disappear, get busy with other projects, or decide to hold your code hostage, you're stuck.

You don't have vendor lock-in by design. You have it by default.

What Real Code Ownership Includes

True ownership of your custom software means you control every layer of the stack. Here's the complete checklist:

Repository Access

You should have admin access to a repository under your own GitHub, GitLab, or Bitbucket organization. Not read access. Not contributor access. Admin access.

This means:

  • The repo exists in your organization from day one
  • You can add or remove collaborators without asking permission
  • You can download the entire codebase at any time
  • You own the commit history and all branches
  • The developer is a guest in your repo, not the other way around

Hosting and Infrastructure

Your application should run on infrastructure you control. That typically means:

  • A Vercel, Netlify, or AWS account in your name or company name
  • Database hosting (Supabase, PlanetScale, RDS) under your account
  • Domain registration and DNS management in your registrar account
  • SSL certificates issued to your domain

The developer should help you set these up and may need temporary admin access during development, but the accounts must be yours. When the project ends, you simply revoke their access.

Environment Variables and Secrets

All API keys, database credentials, authentication secrets, and environment variables should be stored in systems you control. This includes:

  • Environment variables in your hosting dashboard
  • API keys for Stripe, SendGrid, OpenAI, or other services in your accounts
  • OAuth credentials registered to your domain
  • Database passwords that you can rotate independently

If a developer says they need to “manage this for you”, that's a red flag. They can have access. They shouldn't have ownership.

Third-Party Service Accounts

Every external service your app uses should have an account in your name:

  • Payment processing (Stripe, PayPal)
  • Email services (SendGrid, Postmark, Resend)
  • Authentication providers (Auth0, Clerk)
  • Analytics and monitoring (PostHog, Sentry)
  • AI APIs (OpenAI, Anthropic)

The developer can be an admin on these accounts during development, but you should be the owner. When you part ways, you remove their access and nothing breaks.

Intellectual Property Assignment

Your contract should explicitly state that all code, designs, documentation, and related intellectual property are assigned to you upon payment. This should be in writing before work begins.

Standard language includes:

  • Work-for-hire clauses that assign ownership automatically
  • IP assignment that covers code, documentation, designs, and configurations
  • Clear statements that you can use, modify, and redistribute the code
  • No ongoing royalties or usage restrictions

Why Developers Sometimes Resist This

Not every developer who pushes back on full ownership transfer is acting in bad faith. There are legitimate reasons some developers structure things differently:

  • Billing complexity: Managing infrastructure under their own accounts simplifies invoicing and credit card management
  • Support obligations: Keeping control makes it easier to jump in and fix issues without waiting for credential sharing
  • Reusable components: They may have built internal tools or libraries they don't want to license away
  • Maintenance contracts: Some developers assume ongoing maintenance and structure access accordingly

These are solvable problems, not deal-breakers. A good developer will work with you to structure ownership properly while addressing their operational needs. A developer who refuses to give you full control is telling you something important about the relationship.

Red Flags That You Don't Really Own Your Code

Here are the warning signs that you're in a locked-in situation:

  • You can't access the repository without asking the developer
  • The developer says they'll “send you the code when it's done”
  • Your app's domain points to infrastructure you don't control
  • You don't know what hosting provider or database you're using
  • Making updates requires going through the original developer
  • You've never seen an invoice from Vercel, AWS, or your database provider
  • The contract has no IP assignment language
  • The developer is evasive when you ask about access

If three or more of these apply to your project, you have a problem. The longer you wait to fix it, the more expensive and complicated the fix becomes.

What to Do If You're Already Locked In

If you're reading this and realizing you don't actually own your codebase, here's the path forward:

1. Document What You Have

Start by listing every service, account, and access point related to your application:

  • What URL does your app run on?
  • What third-party services does it use?
  • Where is the repository hosted?
  • What database does it use?
  • What hosting platform runs it?

2. Request Transfer

Contact your developer and request full admin access to all relevant systems. Most will comply without issue, especially if you approach it as standard business practice rather than an accusation.

Be specific about what you need:

  • Admin access to the code repository under your organization
  • Transfer of hosting accounts or creation of new accounts you control
  • All environment variables and API keys
  • Documentation of how to deploy and maintain the application

3. Set a Deadline

Give a reasonable timeframe for transfer. Two weeks is usually enough. If the developer is slow to respond or makes excuses, that tells you this will be adversarial.

4. Consider Migration

If the developer refuses, you may need to migrate to new infrastructure. This means:

  • Exporting your database to a new host you control
  • Setting up new hosting and deploying from your own repository
  • Updating DNS to point to your new infrastructure
  • Re-creating accounts for third-party services

This process can take a few hours to a few days depending on complexity. It's painful but finite. The alternative is staying locked in indefinitely.

How to Structure Ownership From Day One

If you're starting a new project, you can avoid all of this by setting up ownership correctly from the beginning:

Before You Hire

  • Create your own GitHub organization or request one be created in your name
  • Set up accounts for hosting platforms you'll likely use (Vercel is a good default)
  • Register your domain in your own registrar account
  • Make sure your contract includes explicit IP assignment language

During Development

  • The developer creates the repository in your organization
  • They deploy to your hosting accounts (you can grant them admin access)
  • They create API keys and integrations under accounts you own
  • They document everything in the repository README
  • You have read access throughout the project, not just at the end

After Launch

  • You maintain owner access to all systems
  • The developer remains a collaborator only if you want ongoing support
  • You can hire someone else to maintain or extend the code without asking permission
  • You can shut down services, change providers, or modify the stack as needed

This model gives the developer everything they need to do good work while ensuring you're never locked in.

How FinishLine AI Handles This

Every FinishLine AI engagement structures ownership the right way from day one. We don't hold code hostage, and we don't make you jump through hoops to access systems you paid for.

Here's what that looks like in practice:

  • All repositories are created in your GitHub organization before we write a single line of code
  • We deploy to hosting accounts you control (we'll help you set them up if needed)
  • Environment variables and API keys live in your dashboards, not ours
  • You get admin access to everything from day one, not after launch
  • Our contracts include clear IP assignment that gives you full ownership
  • We document how to deploy, maintain, and extend your application

When our engagement ends, you keep everything. You can hire another developer, maintain it yourself, or bring us back for updates. Your choice. No permission needed.

If you're not sure whether you own your current codebase, our $100 Quick Audit will assess your situation and give you a clear action plan. We'll review your repository access, hosting setup, and contracts, then tell you exactly what's missing and how to fix it.

If you need help migrating away from a locked-in situation, our Fix & Finish package handles the technical work of transferring code, setting up new infrastructure, and documenting everything properly. Pricing starts at $5k depending on complexity.

Ready to get your app launch-ready?

Book a free intro call. We will look at where you are stuck, tell you what needs to happen, and give you an honest assessment of what it will take.

Book a Free Intro Call
M

Written by Matthew at FinishLine AI

FinishLine AI builds custom software, websites, and apps, and fixes broken AI-built projects so founders can ship.