Back to blog
Development5 min readJanuary 15, 2025

When NOT to use the latest technologies

Pragmatism over hype: how to make technical decisions based on real project context and not on what's trendy.

ArchitectureDecisionsPragmatismTechnology
When NOT to use the latest technologies

The hype trap

Every week there's a new framework, a new tool, a new "correct" way of doing things. Twitter is full of threads explaining why you should migrate to X technology immediately.

After years of falling into that trap and learning from my mistakes, my position is now different: the best technology is the one that solves your problem with the least complexity possible. And many times, that's not the latest or most popular one.

Signs you're choosing based on hype

"All the big companies use it"

Google uses Kubernetes. That doesn't mean your 5-person startup needs Kubernetes. Google has problems you don't have. And they have dedicated teams to maintain that infrastructure.

What works for companies with thousands of engineers is probably overkill for your context.

"It's what job postings ask for"

Job postings ask for the technology of the moment because recruiters copy from other postings. That doesn't mean it's the best option for your project.

I've seen teams adopt technologies just because "it makes hiring easier", only to discover that nobody on the current team knows it and productivity tanks for months.

"The current stack is old"

Does old mean it doesn't work? Or does it mean it's not what's in the blogs?

There are systems in PHP, jQuery, and MySQL generating millions of dollars and working perfectly. Rewriting them in a modern stack won't automatically make them better.

When boring technologies are the best option

When the team already masters them

A productive team in Rails will deliver faster than the same team learning Go, even though Go is "faster". Development speed matters more than execution speed in most cases.

The cost of learning a new technology is enormous: beginner mistakes, poorly designed architectures, time researching basic problems. All of that translates to months of delay.

When the problem is well-known

Need a CRUD with authentication? That's been solved for 20 years. You don't need to invent anything new.

Need a payment system? Use Stripe's proven libraries. Don't implement your own solution with the latest technology.

Mature technologies have:

  • Complete documentation
  • Solutions to common problems on Stack Overflow
  • Known bugs and documented workarounds
  • Active communities that can help you

When stability is critical

In fintech, a bug can mean someone loses money. In healthcare, it can be worse. In these contexts, you want technologies proven in production for years, not the framework that came out 6 months ago.

Version 1.0 of any technology has bugs. You don't want to be the one who discovers them in production.

When it DOES make sense to adopt something new

When it solves a real problem you have

Not "it could be useful someday". A real problem, now, that you can't solve well with what you have.

If your application needs real-time and your current stack makes it difficult, it makes sense to evaluate something designed for that. If your application doesn't need real-time, don't adopt something just because "it supports real-time".

When the migration cost is low

Adopting a new component library is relatively cheap. You can do it incrementally, file by file.

Changing databases is very expensive. Changing programming languages is a project of months or years.

Evaluate the real adoption cost, including:

  • Team learning time
  • Rewriting existing code
  • New types of bugs that will appear
  • Tooling that needs to be configured again

When you have time to do it right

Adopting new technology during a deadline crunch is a recipe for disaster. If you're going to try something new, do it on a project with room for errors.

The worst thing you can do is adopt something new AND have to deliver in two weeks. You'll end up with a mediocre implementation nobody understands.

My framework for technical decisions

1. Define the problem first

Not "I want to use Rust". But "I need better performance in this specific process".

If you can't clearly define the problem, you probably don't need to change anything.

2. Evaluate if the current solution can solve it

Many times the solution isn't new technology, but using what you have better. A database index, a simple cache, refactoring inefficient code.

3. Consider the total cost

Not just the initial implementation time. Also:

  • Long-term maintenance
  • Onboarding new members
  • Integration with the rest of the system
  • Debugging when something fails

4. Start small

If you decide to adopt something new, do it in a non-critical part of the system first. Learn the gotchas before they affect what's important.

The technologies I use (and why)

After trying everything, my current stack is deliberately "boring":

  • Next.js/React: Not because it's the newest, but because I master it and it has a mature ecosystem
  • PostgreSQL: Works for 99% of cases. I don't need specialized databases
  • TypeScript: Typing saves me bugs. Worth the extra verbosity
  • Tailwind: Controversial, but it makes me productive. That's what matters

Is it the perfect stack? No. Is it the stack with which I deliver functional software fastest? Yes.

Conclusion

Technical maturity isn't knowing all the new technologies. It's knowing when to use them and when not to.

The most impressive code isn't the one using the latest technology. It's the one that solves the problem simply, maintainably, and that anyone on the team can understand.

The next time you feel the urge to adopt something new, ask yourself: am I solving a real problem or am I following the hype? The honest answer will save you a lot of time.

Fernando Briceño

Fernando Briceño

Full-Stack Developer | Fintech, iGaming & Gaming

Let's work together