Yashveer Singh
Connect
<- All posts
Startup Failure Postmortems and Fear12 min read

The Wrong Tech Stack Decision That Compounded for Three Years

A wrong tech stack decision is a choice made at the beginning of a product's life that fits the team's current knowledge, the current problem, and the current scale, but turns out to be misaligned with the direction the product takes. The compounding is the part founders do not anticipate. Every new feature is harder. Every new hire takes longer to onboard. Every performance problem is more expensive to fix than it would have been with a different choice.

Written by Yashveer Singh, founder of Yashveer Labs.

What you actually need to know

  • A wrong tech stack decision is not immediately painful. The pain arrives gradually, compounding with every new hire, every new feature, and every scaling event.
  • The most common compounding pressure is hiring: a stack with a small talent pool becomes a recruiting problem by year two.
  • Optimizing for founding engineer comfort is not the same as optimizing for product fit. These overlap sometimes and diverge badly at others.
  • A stack decision that was right for a team of two becomes wrong for a team of twelve if the hiring market does not support it.
  • A full rewrite is rarely the answer. Incremental replacement is slower and usually the right call.
Tech Stack Decision TypeYear 1 CostYear 2 CostYear 3 Cost
Wrong framework for product typeLow frictionMedium friction, some hacksHigh friction, workarounds everywhere
Thin hiring market languageInvisibleLonger hiring cycles2x salary premium or project delays
Wrong database for access patternsMinor query complexitySlow queries, index hacksPerformance ceiling, migration required
Premature microservicesOperational overheadDeployment complexityTalent mismatch, debugging debt
ORM that fights the schemaOccasional manual queriesGrowing raw SQL surfaceORM abandoned in practice, two query paths

The core argument

I have watched this one play out in slow motion enough times that I can describe the trajectory before the team can see it. The founding engineer is good. They know one stack well. They choose it. The product ships. The first version is fine. The second version is fine. Somewhere in the third or fourth major version, things start taking longer than they should.

The team calls it complexity. The codebase is getting complex. Features that used to take a sprint now take two. Nobody can quite explain why. The answer is usually not complexity in the abstract. It is the stack fighting back.

The framework was chosen because the founding engineer had used it before. It was a productivity choice for a team of one. The product turned out to need something the framework handles poorly. Not impossibly, just poorly. Every feature in that area requires a workaround. The workarounds accumulate. Engineers onboarding to the codebase ask why things work this way. The answer is always some version of "that's just how we do it here."

Year three is when the real cost arrives. The team is trying to hire. The stack is niche enough that candidates with strong experience are rare. The team ends up training people or paying a premium. The velocity penalty is now visible in sprint velocity and product roadmap timelines. Someone proposes a rewrite. Someone else says it would take six months the company does not have. The conversation gets tabled. The stack stays. The cost continues.

The compounding mechanics

The compounding is not random. It follows a predictable pattern with four stages.

Stage one: invisible friction

In the first year, the founding team is moving fast and the friction from a suboptimal stack is invisible against the background noise of everything being uncertain. The ORM makes a few queries ugly. The framework has one category of feature it handles awkwardly. Nobody notices because they are solving fifty other problems.

Stage two: workarounds

By year two, the awkward category has grown. The workarounds are now a pattern. New engineers learn the workarounds as part of onboarding, which means the workarounds become institutional knowledge rather than temporary hacks. The codebase has two layers: the intended architecture and the workaround layer that exists because the stack could not support the intended architecture cleanly.

Stage three: hiring pressure

Year two to three is when hiring starts reflecting the stack decision. If the stack has a thin talent market, the team discovers it now. Candidates with three years of experience in the stack are expensive and rare. Candidates who are willing to learn it are available but require training time the team does not budget for. Some good engineers pass on the role because they do not want to work in that stack. The team does not always know they are losing candidates for this reason.

Stage four: velocity ceiling

By year three, the team has hit a velocity ceiling. Not because of bad engineers, but because of accumulated friction. Features take longer. The test suite is slow because the framework makes certain patterns hard to test cleanly. The deployment pipeline has custom steps that exist because the stack does not integrate cleanly with standard tooling. The team is doing real work but producing less than a similar team with a better-matched stack would produce.

What it requires

Recovery PathTime CostTeam DisruptionRisk
Full rewrite6-18 monthsHighVery high: two products to maintain during transition
Strangler fig replacement12-24 monthsMediumMedium: incremental, feature delivery continues
Targeted refactor of worst areas2-4 months per areaLowLow: narrow scope, reversible
Accept and document the constraintsOngoing maintenance costNoneLow short-term, compounds long-term

What to look for before committing to a stack

  • The hiring market: how many engineers in your region and remote pool list this stack as their primary experience
  • Framework fitness: whether the framework's opinionated areas match the areas your product spends most of its complexity budget
  • Query pattern alignment: whether the database paradigm fits the way your product reads and writes data at scale, not just at launch scale
  • Operational complexity: whether the stack can be run by a team of your size without dedicated platform engineering
  • Migration story: what it looks like to move away from the stack if it turns out to be wrong, and whether that migration is a month or a year

Expert opinion

The wrong tech stack decision rarely looks wrong in year one. It looks like a confident choice by a team that knows what they are doing. The wrongness appears in the gap between the problem the product is solving and the problems the stack was designed to solve. When those two things diverge, the cost compounds quietly. Every sprint, a little slower. Every hire, a little harder. The team adapts. The adaptation becomes the codebase. And then you have to explain to a new engineer why nothing works the way the documentation says it should.

>

Yashveer Singh, founder of Yashveer Labs

How this played out on a real project

A product team I know chose a PHP framework for a data-heavy analytics product in 2021 because the founding engineer had ten years of PHP experience. The choice was not unreasonable. PHP can build analytics products. But the product grew into a workload that required complex join queries, real-time aggregations, and a reporting engine. PHP's ORM ecosystem was not built for that. The team ended up writing raw SQL for almost every reporting query, which meant the ORM layer was providing abstractions the product did not use and failing to abstract the queries the product actually needed.

By year two, onboarding a new engineer took three weeks instead of one, because the codebase had two query systems: the ORM for CRUD operations and raw SQL for everything analytical. Candidates with PHP experience were unfamiliar with the raw SQL patterns. Candidates with SQL experience were uncomfortable with the PHP application layer. The hiring funnel stalled. The team eventually executed a strangler fig migration to a Python-based backend over fourteen months, keeping the PHP layer alive for CRUD operations while rebuilding the analytical layer. It worked, but it consumed engineering capacity that should have been building features.

The lesson was not "never choose PHP." It was that the stack decision should have been made against the product's access patterns, not the founding engineer's prior experience. If they had asked what hiring for scale looks like before committing, they might have caught the mismatch earlier.

Common mistakes

  1. Choosing the stack because the founding engineer is comfortable with it rather than because it fits the product's dominant workload.
  2. Not modeling the hiring market before committing. A stack that is great to work in but has five thousand engineers globally will slow hiring from year two onward.
  3. Over-engineering for a scale the product never reaches. A team that chose a distributed event-sourcing architecture for a SaaS with two hundred users spent two years maintaining complexity they never needed.
  4. Choosing a database paradigm because it is trendy rather than because the access patterns require it. Graph databases, document stores, and time-series databases all have appropriate use cases. They are expensive mistakes when applied to workloads they were not designed for.
  5. Not revisiting the stack decision at year one. A retrospective at twelve months, before the compounding is severe, is the right time to identify whether the choice is working.
  6. Assuming a rewrite is the only way out. Incremental replacement is slower and harder to fund, but it does not require stopping feature development for a year.
  7. Not documenting why the stack was chosen and what the team knew at the time. Future engineers who inherit a suboptimal stack are better equipped to improve it if they understand the original reasoning.
  8. Confusing familiarity with fit. A stack a team knows deeply is not necessarily the right stack for the product.

A 12-month plan to address a compounding stack decision

  1. Run a stack audit in the first month. Document every area where the current stack creates friction: hiring, performance, testing, deployment, and onboarding. Score each area by cost to the team.
  2. Identify the highest-cost friction area. Do not try to fix everything. Find the one area where the wrong choice is costing the most sprint time or the most hiring difficulty.
  3. Evaluate the two most realistic remediation paths for that area: targeted refactor or incremental replacement. Estimate the engineering time for each.
  4. Build the business case for the chosen path. Time spent on a stack migration is time not spent on features. The case needs to show that the migration pays back in velocity within six to twelve months.
  5. Start the migration in isolation. Pick one service, one module, or one query layer. Migrate it completely before touching anything else.
  6. Measure the velocity change after the first migration. If the target module is shipping faster and onboarding is easier, the migration is working. If not, stop and investigate why.
  7. Extend the migration incrementally while keeping feature development running. The strangler fig pattern is the mechanism. Patience is the requirement.
  8. At twelve months, run the stack audit again. Compare the friction scores to the baseline. The migration should be measurably reducing the compounding cost. If it is not, the migration strategy needs to change, not just the execution pace.

The hardest part of this is not the technical work. It is convincing a team that has adapted to the friction that there is a better way to work. The adaptation becomes invisible. What feels normal after three years of workarounds can still be costing the team a significant fraction of their velocity.

FAQ

Frequently asked

Author

My approach to this kind of work

I approach this kind of work the way I would want someone to approach a system I depended on. With care, with rigor, with a sense that the next person who touches it should be able to understand it without my help. Yashveer Singh, founder of Yashveer Labs. That is the standard. If it is the standard you are looking for, I am the engineer to hire.

Related reading