How We Make Technology Decisions That Last
by Luka Horvat, Founder & Lead Engineer
1. Start With the Problem, Not the Technology
The most common mistake we see is choosing a tech stack based on what's trending rather than what the project actually requires. A real-time collaborative editor has fundamentally different needs than an internal reporting dashboard. The stack should serve the problem, not the other way around.
We start every project by mapping out the core technical requirements: What kind of data are we working with? How many concurrent users do we expect? What are the performance requirements? Does the application need real-time capabilities? What are the security and compliance constraints?

These questions usually narrow the field significantly. A project with complex relational data and strict consistency requirements points toward PostgreSQL, not MongoDB. An application that needs server-side rendering for SEO points toward Next.js, not a pure SPA. Let the requirements drive the decision.
2. Team Familiarity Is a Multiplier
A team that knows their tools deeply will outperform a team using cutting-edge technology they're still learning. This isn't an argument against learning new things — it's an argument for being honest about the cost.
When we evaluate a new technology for a client project, we ask: does this tool solve a problem that our current stack genuinely can't handle? If the answer is yes, the learning curve is an investment worth making. If the answer is "it's newer and has better marketing," we stick with what we know.

Our default stack — TypeScript, React, Next.js, Node.js, PostgreSQL — isn't the most exciting choice in every category. But we know it deeply, we can move fast with it, and we can predict exactly how it will behave under load. That predictability is worth more than novelty on a production project with real deadlines.
3. Long-Term Maintenance and Hiring
The tech stack decision doesn't end at launch. You need to maintain this system for years, and you need to be able to hire people who can work on it. These are the considerations that get overlooked in the initial excitement of a new project.
We bias toward technologies with large, active communities, strong documentation, and a clear upgrade path. This means the next developer who joins the team can get productive quickly, dependencies stay maintained, and security patches are available when you need them.

We also think about the operational footprint. Every additional service in your architecture is another thing that can fail, another thing that needs monitoring, and another thing that someone needs to understand. We aim for the simplest architecture that meets the requirements — and resist the temptation to add complexity for problems we don't actually have yet.