In-house vs outsourced engineering: what to keep and what to give to others

The question comes up in almost every first conversation we have with a founder or a new head of engineering. Should we build our own engineering team, or should we hire an outside team to do it? People treat it as a choice between two options, and they want us to tell them which one is right. But the honest answer is that the question itself is wrong. It is rarely all-or-nothing. The teams that get the most out of their money and their time do not pick a side. They split the work, keeping some of it in-house on purpose and handing the rest to an outside team on purpose, and they know exactly why each part is where it is.
Here is how we think about making that division.
The real question is ownership, not location
Forget for a moment where people sit. The thing that actually decides whether work belongs in-house is ownership over the long run. Some parts of your product are the reason customers choose you, and you are going to keep changing those parts every week for years. The knowledge of how they work, why they work that way, and what breaks when you touch them has to stay inside your company. If that knowledge leaves with the people who have it, you are in trouble. That is the definition of in-house work: it is the stuff you must own forever.
Other parts of the product are real work but not that. They might be common problems that many teams have already solved. They might be one-time builds you will rarely touch again. They might need a skill your team does not have and will not need every day. That work does not have to stay inside your company. It can be done by an outside team who has done it before, and done well, without weakening you at all.
So the first step is not "in-house or outsource." It is to go through your product part by part and ask a simple pair of questions about each one. Is this the thing that makes us different from everyone else? And are we going to keep changing it for years? When both answers are yes, that part belongs to your own people. When they are not, an outside team is often the faster and smarter choice. This is the same instinct we wrote about in build vs buy custom software: the goal is to spend your own limited attention only on the part that is truly yours.
What an outside team does genuinely well
Many people believe that an outside team is a compromise, something you accept when you cannot hire fast enough. That is not true, and believing it leads to bad decisions. A good external team is better than an in-house team at a few specific things, and pretending otherwise costs you.
The first is speed to start. When you hire in-house from scratch, you spend months finding people, and then those people spend more months learning your problem before they release anything real. An outside team that has built similar products starts already knowing what the work involves. They start producing in weeks, not quarters. When the point is to get a first version in front of real users quickly, that early start is what matters most. We wrote about doing exactly this with a small team in how to launch a product with minimal resources.
The second is specialist skill. You do not need a full-time expert in every technology your product will ever touch. If you need a hard machine learning system built once, or a difficult payments integration done right, hiring a permanent person for it is expensive and often wasteful, because the need for that deep skill ends. An outside team brings that skill exactly when you need it and is not on your payroll after.
The third is changing the team size. The amount of product work goes up and down. Some months you need three extra engineers for a big release, and other months you do not. An in-house team is a fixed cost that is painful to grow and worse to shrink. An outside team grows and shrinks with the work, which lets you match your spending to the actual demand instead of guessing a headcount a year in advance.
What must stay in-house
The other side matters just as much. Some work should never leave the company, and getting this wrong is one of the most expensive mistakes we see.
Keep the core that is your advantage in-house. If a system is the reason your product succeeds, and you will change it constantly, your own people need to have the deep knowledge of it. Not because an outside team could not build it, but because the understanding of it is now a permanent asset of your company, and permanent assets belong to permanent people. When only a team you do not control has that knowledge, you have made your main advantage depend on someone else's roadmap and someone else's staffing decisions.
Keep the decisions that set direction in-house too. What to build next, what to say no to, how the parts fit the larger plan: those are judgment decisions that depend on knowing your business well, and they should belong to people who are fully committed to that business. A good outside team will inform those decisions and argue with you about them, which you want. But the final decision stays with you.
The mistake to avoid is easy to miss. It is not usually that a company outsources too much. It is that it outsources the one thing it should have kept, the small core that is its whole reason to exist, because that part was hard and an outside team offered to take the difficult work. Give away the difficult work on the common parts. Never on the part that makes your company what it is.
Why quality does not depend on the label
One worry is behind all of this: that outside work is lower quality by nature. It is worth saying plainly that it is not. Quality comes from the skill and the seniority of the people doing the work and from how they work, not from whether their desk is in your office.
A small team of senior engineers, wherever they work, will often build more than a large team you hired in a hurry. We have watched this happen many times, and we wrote about why in a small senior team builds more than a big one. The size and the location are not the causes. The causes are how good the people are, how well they release in small safe steps, and how honestly they talk to you about what is hard. Judge an outside team by those things, the same way you would judge a person you were about to hire, and the "in-house is safer" assumption stops being true.
If you want the checklist for judging an outside team well, we laid it out in how to choose the right external development team. The short version is that you are hiring judgment as well as people to do tasks, and you can see judgment in how a team talks about the hard parts before any work starts.
Giving the knowledge back to your team is the whole point
The best outsourced engineering does not leave you with a system only the outside team understands. It makes your own team stronger and leaves you able to continue without the outside team when the time comes. That is the difference between a partner and a supplier you cannot leave.
When we build the core of a product for a client, we build it so their people can take it over. The code stays readable. The documentation explains what the system does and why it is built that way. Where it helps, our engineers work side by side with theirs so the understanding is shared while the work happens, instead of being put in a handover document at the end. If a team cannot explain how to run the system without them, or if they avoid answering when you ask, that is a warning sign that they are protecting their position instead of serving you.
This is why the in-house versus outsourced choice is not permanent. Work changes over time. Something an outside team built to get you started can become core and permanent, and that is exactly the moment to move it in-house, hire people to own it, and transfer the knowledge over. Done right, the outside team is the thing that got you to that point faster and left you ready for it. The point of a good partner is to make itself unnecessary on the parts that became yours, while staying useful on the parts that never needed to be.
Put it all together and the question at the start no longer applies. You are not choosing a side. You are deciding, part by part, what your company must own forever and what an outside team can do better right now, and then building a plan that uses both on purpose.
Handover deserves more attention now than it used to get, for a reason specific to generated code. When a person writes a system, they understand it automatically and can pass that understanding on in conversation. When it is generated, that understanding only exists if someone deliberately created it by reading the code and writing down the intent. This is why we treat the specification as a deliverable rather than an internal working document: it is the only artifact that explains why the system does what it does. A build you cannot give to your own engineers is not a product, it is a dependency.
If you are choosing between suppliers right now rather than reading about the options, the side-by-side version of this is Reveneau vs hiring your own engineers, which lays the options out in a table with the sources labelled.


