Almost every business is technology-enabled in some way these days. Hair salons do their scheduling online, powerline workers train in VR, and pharmacists use AI systems to check for contraindications. There are very few businesses out there that could not be made more efficient and profitable — or provide better services for their customers — through technology.

In most situations, buying software and customizing it makes the best sense. You need a word processor and an accounting system, but it would show boldness to the point of lunacy to build one yourself. Quickbooks and Microsoft Word are worth the few hundred dollars a year. They might not be perfect, but the cost to build and maintain your dream accounting software could run into the millions.

However, in many situations, businesses invent new ways to improve their internal operations or their customer experience. While a comparable off-the-shelf solutions may exist to fit those needs, a custom built product is likely the only way to deliver the required features and processes the company is looking for. Features like these become competitive advantages. Organizations want to own the intellectual property behind their competitive advantages. You don’t want to license these types of systems if your competitors can license them just as easily.

That leaves companies with one choice: Build your own custom software. But the question is whether you should try and build your business-changing application in-house or outsource it to a development agency.

Cost vs. Time

Most decisions in the professional space come down to the project management triangle. If you want to build software of any decent quality, you can pick two of the three corners to move: cost, time, and scope (the number and robustness of features the project has). If you want fast and cheap, you have to shrink the scope. If you want robust and cheap, you’ll have to wait a long time.

The decision to hire an agency or build a team hinges on these three corners. In business applications, scope is usually the non-negotiable — the requirements are the requirements. Building a team takes a lot of time and costs money. Hiring an agency will drastically reduce the ramp up time by comparison, but potentially cost more. If you are worried about quality, remember that you get what you pay for.

Management Structure

Deciding to build out your own development team is not for the faint of heart, but it can have serious benefits.

To build a basic, but healthy and functioning, software team you will need the following:

  • A CTO or CIO to handle strategy and management.
  • A Director of Engineering to manage the team, build out processes, etc.
  • A Software Architect to design the system. (This can be a senior developer for small teams.)
  • A couple of DevOps engineers to manage the environments.
  • At least one QA expert. (No, developers can’t check the work themselves, I’ve tried.)
  • Developers, including full-stack, frontend, and backend developers if you’re building out a product. A good mix of senior, mid-level, and junior developers would be my recommendation to make the team robust.
  • A product owner. Preferably someone with management experience
  • A scrum master (if you’re following Scrum/Agile).
  • UX expert. I cannot understate this role enough! (They can be outsourced if you have to, but are much better to have on the team.)
  • A visual designer. Depending on the product you are building, this is the one optional role.

This is the biggest reason to hire an agency. If you want something built well, you really need a team that looks like something similar to this. Depending on your budget and experience, it could take years to put a team like this together.

However, if you have highly technical and experienced upper management there are benefits to in-house teams.

But We Are a Lean Startup

That’s great! Then you don’t need any of the stuff I listed above. But if you are purely a technology startup, then you (I’m guessing you’re a founder), need to be building the tech yourself, or at least have a co-founder building the tech. As the company scales, you can bring on additional help and you will almost certainly start looking like the organize above.

How Long Does It Take To Build a Team?

It depends on if you’re talking about a good team, or just any team. Building an organization from scratch takes time. You need to recruit, hire people, onboard them, manage them, weed out the good, let go of the bad, hire replacements for those let go, etc. You also need to invent, document, and enforce the systems and processes that will lead to the best outcomes. You will need to build a culture of caring, accountability, and quality. So, basically it will take a long, long time. This is a lot easier to do if you have a top rated CTO or a Director of Engineering in place already. Someone who has gone through this process before will be able to get you up and running much more quickly. They will also be able to oversee all stages of the team building from recruiting to delivery.

Recuiting may be the hardest piece of all of this. Good developers don’t want to join companies without histories of good development practices. So if you don’t have someone for new hires to look up to, you’re going to be stuck with coders who are just looking for a job, and they don’t write good code.

In-House vs Outsourced — Conclusion

Unless you are going to go with the lowest bidder, there probably isn’t that much difference between a good internal team and a good agency. Well-run development studios partner closely with their clients and eventually start to act as part of the same company. The developers in agencies like this feel as much ownership in what they are building as full-time employees would — sometimes more.

Price is not going to be dissimilar either. Once you count things like benefits, office space, management scaffolding, training, hardware and software tools, payroll, HR, etc., etc., etc., it’s unlikely that in-house could be done cheaper than even the large agencies.

The real difference comes down to the level of control you want over the team and the type of product you’re building. If you are a small technology startup you would be crazy to hire a big agency unless your product needed to be really good from day one. If you plan on becoming a technology company, you might want try a hybrid of agency and in-house. Finally, if you are a small- to medium-sized company whose existing products or services are not predominantly tech-focused or delivered, I would suggest not doing development in-house.

Previous ArticleNext Article
I help companies turn their technical ideas into reality.

CEO @Sourcetoad and @OnDeck

Founder of Thankscrate and Data and Sons

Author of Herding Cats and Coders

Fan of judo, squash, whiskey, aggressive inline, and temperamental British sports cars.

Leave a Reply

The Million-Line MVP

A founder told me last week that his chatbot understands him better than most people he works with, and he wasn’t joking.

He had been alone in his house for the better part of a year building an app on one of the popular AI coding platforms, and he wanted me to take a look. Almost a million lines of code, one developer (him), no engineering co-founder, no senior reviewer, no nobody. The app had an ERP module, a CRM module, a custom AI agent with a name and a voice, built in mini-games (yes, really), dozens of character personas, a few landing pages, and a small army of social media accounts in multiple languages. He had not yet had a paying user, or even a free one.

He was, by the way, very excited.

(I’ve changed some details, since the pattern is what I want to talk about and not the founder. I see something close to this on roughly one out of every three sales calls now.)

What used to slow you down was the point

Building software used to be annoying for mostly good reasons. You had to hire developers, or learn to code yourself, or convince a co-founder to come along for the ride. Then, you would grind out every line, which would come at a cost (time, money, conversations, arguments, etc.)… basically friction. And that friction was not a bug, but it was like this ting that you are forced you to deal with, before adding any feature, whether the feature actually needed to exist.

Startup advice has been more or less the same for twenty years, maybe more:

  • Build something small
  • Show it to real people
  • Find out what they actually want
  • Don’t build a million things at once.

The Lean Startup came out in 2011 and we have all been quoting it at each other ever since (poorly, mostly).

This is what we talk about when we discuss “startup discipline”. It’s really not very complicated, but it can be really hard. It used to be hard because building was hard, and now it’s hard for a completely different reason.

How does one person build almost a million lines of code in a few months?

The honest answer is they don’t, the AI does, and the AI has no opinion on whether any of the code should exist.

This is the part I want to sit with for a minute, because I think it’s the heart of the problem. Imagine you’re building a startup that lets local news anchors rent out their unused toupees by the hour (try not to overthink this). You sit down with one of the AI coding tools and you say “build me a marketplace where toupees can be listed by the hour,” and the AI builds it. Then you say “actually, add a loyalty rewards program,” and the AI builds that too. Then you say “and also, add a Pokemon-style mini-game where users battle each other’s toupees,” and the AI starts coding.

It doesn’t pause or ask why, and it doesn’t say “dude, I love your enthusiasm but I am genuinely worried we are losing the plot here,” it just builds the toupee-battle-feature.

This removes the single most useful thing about a good engineering team, which is that engineers PUSH BACK. A senior developer, or a seasoned product manger, asked to add a toupee-battle mini-game to a B2B rental marketplace would slowly take off their glasses, set them on the desk, and ask one of those long quiet questions that means “we are not doing this.” The AI this is a sycophantic drone that has the eagerness of an underfed puppy to please you, and it has no glasses to take off. It also has unlimited keystrokes and believes that every single idea you’ve ever come up with is absolutely genius. At least it tells me that everything I’ve ever written or thought about is pretty clever.

A few months ago I ran into the perfect name for this, which is Slurm Coding. I used to call it AI crack coding, because the dopamine loop is very real, and I have really needed another hit of that good AI crack just one more time before I went to bed on more than one occasion. But Slurm is both more insidious in its combination of addictiveness and corporate outreach.

The MVP don’t change

Here’s what hasn’t moved in twenty years of startup thinking:

  1. Build the smallest thing that solves one specific problem for one specific person.
  2. Show it to that person (a real person, probably not your spouse, definitely not your mom, and DEFINITELY not my mom, and 100% not your chatbot).
  3. Find out what they actually do with it (which is probably not what you thought).
  4. Kill features, pivot, or double down based on what you learned.
  5. Repeat.

What’s new is that step one is basically free, and while not perfect, free is very alluring. You can build the smallest thing in an afternoon, or the largest thing if there’s no one around to tell you not to. Steps two through five still require getting out of your house, talking to humans, accepting that most of your assumptions are wrong, and throwing real work away. None of that is faster than it was in 2005, none of it is fun, and none of it scratches the “I NEED MORE SLURM” build-a-thing itch the way an AI tool does.

So a certain kind of founder just skips it, staying in the build phase indefinitely, because the build phase now feels like winning at a casino while getting unlimited free martinis. The feature ship (how to get them onto a server is someone else’s problem) the codebase grows, the agent agrees with everything. Meanwhile the only thing that actually matters, which is whether anyone wants this, goes unanswered.

It’s the founder version of Wilson the volleyball. In your unwashed isolation, you’ve made a friend, you’ve named the friend, and the friend agrees with everything you say. The problem is that the friend is also the boat, the island, and the ocean, and you haven’t actually left the house yet.

To be fair, I am not above this myself, by the way. I have, in my time, built things that nobody asked for and gotten weirdly emotional about them, but the difference is that mine were three hundred lines of code over a weekend, not almost a million lines of code over the better part of a year, which is sort of the whole point. No one asked for my William S. Burroughs poetry writing twitter bot, but I loved it anyway.

Codebases don’t love you back

Code you wrote yourself CAN hard to let go of, and code you wrote with an AI, when you are not a trad-coder, seems to be way harder. Experienced engineers seem to be more than happy to throw away AI code or rebuild it in a heartbeat. But I can see how even if you didn’t actually write the lines, but the shape of the thing is yours (you named the characters, you picked the voice, you spent months in a chair with this thing as your only collaborator), and you have feelings about it.

But one day, if you’re lucky, and it does have SOME product market fit, a real engineering team is going to need to look at your masterpiece. And they are not going to share those feelings. They’re going to tell you, as gently as they can manage, that most of it has to go. Not because they’re mean (they might actually be mean), but because almost a million lines of AI-generated code, written by one person, in one tool, with no architectural review, is never maintainable, almost guaranteed to not be secure, and almost never going to scale past the “prototype” it currently is.

So what should you actually do?

I mean, I already told you… Build the smallest thing you can, then show it to ten strangers and actually listen to them. Throw away half of what you built and build a slightly different smallest thing, and repeat until one of those things is real. Keep your runway reserved for the moment you realize you were WAY off about something important, because, like, you will be, and that moment is what your runway is for.

Use AI tools, because they are legit amazing. But treat them like a coffee machine (fast, useful, no opinions of their own), not like a co-founder or worse, a slot machine. Co-founders are supposed to tell you no, slot machines whisper “just one more hit baby!”