<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Flaviu Z</title>
    <description>The latest articles on DEV Community by Flaviu Z (@ioan_flaviuzsoldos_a3bf4).</description>
    <link>https://dev.to/ioan_flaviuzsoldos_a3bf4</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4155999%2F1db6e93c-bace-4712-a605-aadcba70de4c.png</url>
      <title>DEV Community: Flaviu Z</title>
      <link>https://dev.to/ioan_flaviuzsoldos_a3bf4</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ioan_flaviuzsoldos_a3bf4"/>
    <language>en</language>
    <item>
      <title>Your Database Is Small. That Doesn’t Mean Your Queries Are Fast</title>
      <dc:creator>Flaviu Z</dc:creator>
      <pubDate>Sun, 04 Oct 2026 20:43:38 +0000</pubDate>
      <link>https://dev.to/ioan_flaviuzsoldos_a3bf4/your-database-is-small-that-doesnt-mean-your-queries-are-fast-1130</link>
      <guid>https://dev.to/ioan_flaviuzsoldos_a3bf4/your-database-is-small-that-doesnt-mean-your-queries-are-fast-1130</guid>
      <description>&lt;p&gt;“My database is only 50 MB. Why is my API slow?”&lt;/p&gt;

&lt;p&gt;It's an easy assumption to make.&lt;/p&gt;

&lt;p&gt;Small database = fast database.&lt;/p&gt;

&lt;p&gt;Unfortunately, database size tells you surprisingly little about how quickly a particular request will execute.&lt;/p&gt;

&lt;p&gt;You can have gigabytes of data and extremely fast queries.&lt;/p&gt;

&lt;p&gt;You can also have a tiny database and an endpoint that takes two seconds.&lt;/p&gt;

&lt;p&gt;The interesting question isn't:&lt;/p&gt;

&lt;p&gt;How big is the database?&lt;/p&gt;

&lt;p&gt;It's:&lt;/p&gt;

&lt;p&gt;What are you asking the database to do?&lt;/p&gt;

&lt;p&gt;One request might actually be 50 queries&lt;/p&gt;

&lt;p&gt;Imagine loading a page containing 50 products.&lt;/p&gt;

&lt;p&gt;You query the products:&lt;/p&gt;

&lt;p&gt;SELECT * FROM products LIMIT 50;&lt;/p&gt;

&lt;p&gt;Fast.&lt;/p&gt;

&lt;p&gt;Then, for every product, your application separately requests the seller.&lt;/p&gt;

&lt;p&gt;Suddenly:&lt;/p&gt;

&lt;p&gt;1 query for products&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;50 queries for sellers
= 51 queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You haven't got a large database.&lt;/p&gt;

&lt;p&gt;You've got an inefficient access pattern.&lt;/p&gt;

&lt;p&gt;This is the classic N+1 query problem.&lt;/p&gt;

&lt;p&gt;Depending on your ORM, it can also be surprisingly easy to create without noticing.&lt;/p&gt;

&lt;p&gt;Indexes matter&lt;/p&gt;

&lt;p&gt;Suppose you frequently search users by email:&lt;/p&gt;

&lt;p&gt;SELECT * FROM users WHERE email = ?;&lt;/p&gt;

&lt;p&gt;With a suitable index, the database can locate matching records efficiently.&lt;/p&gt;

&lt;p&gt;Without one, it may need to examine far more data.&lt;/p&gt;

&lt;p&gt;As your dataset grows, the difference becomes increasingly noticeable.&lt;/p&gt;

&lt;p&gt;But adding indexes everywhere isn't the solution either.&lt;/p&gt;

&lt;p&gt;Indexes consume storage and have a cost when writing data.&lt;/p&gt;

&lt;p&gt;The goal is to index based on actual query patterns.&lt;/p&gt;

&lt;p&gt;Your database may not even be the bottleneck&lt;/p&gt;

&lt;p&gt;Let's say an API endpoint takes 800ms.&lt;/p&gt;

&lt;p&gt;It's tempting to blame PostgreSQL or MySQL.&lt;/p&gt;

&lt;p&gt;But maybe the query takes 40ms.&lt;/p&gt;

&lt;p&gt;The rest could be:&lt;/p&gt;

&lt;p&gt;authentication,&lt;/p&gt;

&lt;p&gt;external API calls,&lt;/p&gt;

&lt;p&gt;serialization,&lt;/p&gt;

&lt;p&gt;application logic,&lt;/p&gt;

&lt;p&gt;network latency,&lt;/p&gt;

&lt;p&gt;file operations,&lt;/p&gt;

&lt;p&gt;or several sequential operations.&lt;/p&gt;

&lt;p&gt;Optimizing a 40ms database query down to 20ms won't fix an 800ms endpoint.&lt;/p&gt;

&lt;p&gt;Measure before optimizing.&lt;/p&gt;

&lt;p&gt;Sequential requests add up&lt;/p&gt;

&lt;p&gt;Consider:&lt;/p&gt;

&lt;p&gt;Get user        100ms&lt;br&gt;
Get orders      150ms&lt;br&gt;
Get messages    200ms&lt;br&gt;
Get statistics  180ms&lt;/p&gt;

&lt;p&gt;If these operations unnecessarily run sequentially, the user could wait around 630ms.&lt;/p&gt;

&lt;p&gt;If independent operations can safely run concurrently, the experience may be very different.&lt;/p&gt;

&lt;p&gt;The individual operations weren't necessarily slow.&lt;/p&gt;

&lt;p&gt;The architecture made them slow together.&lt;/p&gt;

&lt;p&gt;Location matters too&lt;/p&gt;

&lt;p&gt;Imagine:&lt;/p&gt;

&lt;p&gt;User → US&lt;/p&gt;

&lt;p&gt;Application server → Europe&lt;/p&gt;

&lt;p&gt;Database → Europe&lt;/p&gt;

&lt;p&gt;Even if your database query is extremely fast, the user still has to communicate with infrastructure thousands of kilometers away.&lt;/p&gt;

&lt;p&gt;Now imagine the frontend makes several sequential requests.&lt;/p&gt;

&lt;p&gt;Network latency gets multiplied by application design.&lt;/p&gt;

&lt;p&gt;This is one reason a site can feel fast for the developer and slow for users elsewhere.&lt;/p&gt;

&lt;p&gt;Cache what makes sense&lt;/p&gt;

&lt;p&gt;Not everything needs to hit the database every time.&lt;/p&gt;

&lt;p&gt;Some information changes constantly.&lt;/p&gt;

&lt;p&gt;Other information might remain identical for hours.&lt;/p&gt;

&lt;p&gt;If something is expensive to calculate and frequently requested, caching may help significantly.&lt;/p&gt;

&lt;p&gt;But caching everything introduces its own problems.&lt;/p&gt;

&lt;p&gt;Now you have to think about invalidation and stale data.&lt;/p&gt;

&lt;p&gt;As usual, the answer isn't:&lt;/p&gt;

&lt;p&gt;“Use caching.”&lt;/p&gt;

&lt;p&gt;It's:&lt;/p&gt;

&lt;p&gt;“Understand what you're caching and why.”&lt;/p&gt;

&lt;p&gt;Look at the query plan&lt;/p&gt;

&lt;p&gt;When a query becomes suspicious, don't immediately start rewriting your entire backend.&lt;/p&gt;

&lt;p&gt;Ask the database what it's doing.&lt;/p&gt;

&lt;p&gt;For PostgreSQL, EXPLAIN and EXPLAIN ANALYZE can show how the database plans and executes a query.&lt;/p&gt;

&lt;p&gt;That can reveal things like sequential scans, expensive joins, unexpected row counts, and inefficient execution plans.&lt;/p&gt;

&lt;p&gt;It's much better than optimizing based on intuition.&lt;/p&gt;

&lt;p&gt;Measure first&lt;/p&gt;

&lt;p&gt;Before changing infrastructure, collect some basic numbers:&lt;/p&gt;

&lt;p&gt;Request duration: 920ms&lt;br&gt;
Database: 85ms&lt;br&gt;
External API: 610ms&lt;br&gt;
Application logic: 40ms&lt;br&gt;
Other/network: 185ms&lt;/p&gt;

&lt;p&gt;Now the problem is obvious.&lt;/p&gt;

&lt;p&gt;Changing database providers probably won't save you.&lt;/p&gt;

&lt;p&gt;That 610ms external request deserves your attention.&lt;/p&gt;

&lt;p&gt;Small doesn't mean fast&lt;/p&gt;

&lt;p&gt;Performance isn't determined by how many megabytes your database consumes.&lt;/p&gt;

&lt;p&gt;It depends on:&lt;/p&gt;

&lt;p&gt;queries + indexes + application logic + network + architecture + workload&lt;/p&gt;

&lt;p&gt;So the next time an API feels slow, don't start with:&lt;/p&gt;

&lt;p&gt;“Do I need a bigger server?”&lt;/p&gt;

&lt;p&gt;Start with:&lt;/p&gt;

&lt;p&gt;“Where are those milliseconds actually going?”&lt;/p&gt;

&lt;p&gt;That question will usually save you a lot more time — and potentially a lot more money.&lt;/p&gt;

</description>
      <category>database</category>
      <category>backend</category>
      <category>webdev</category>
      <category>performance</category>
    </item>
    <item>
      <title>Why More Traffic Won’t Fix a Product People Don’t Understand</title>
      <dc:creator>Flaviu Z</dc:creator>
      <pubDate>Sun, 04 Oct 2026 20:39:34 +0000</pubDate>
      <link>https://dev.to/ioan_flaviuzsoldos_a3bf4/why-more-traffic-wont-fix-a-product-people-dont-understand-4me8</link>
      <guid>https://dev.to/ioan_flaviuzsoldos_a3bf4/why-more-traffic-wont-fix-a-product-people-dont-understand-4me8</guid>
      <description>&lt;p&gt;When you're building an online product, low traffic feels like the obvious problem.&lt;/p&gt;

&lt;p&gt;You check analytics and see 30 visitors.&lt;/p&gt;

&lt;p&gt;The natural reaction is:&lt;/p&gt;

&lt;p&gt;“I need more traffic.”&lt;/p&gt;

&lt;p&gt;So you start thinking about SEO, ads, social media, backlinks, content, and every possible acquisition channel.&lt;/p&gt;

&lt;p&gt;But there's a problem.&lt;/p&gt;

&lt;p&gt;If 30 people visit your product and none of them understand what they're supposed to do, sending another 3,000 people probably won't solve much.&lt;/p&gt;

&lt;p&gt;It will just help more people become confused.&lt;/p&gt;

&lt;p&gt;Traffic amplifies what already exists&lt;/p&gt;

&lt;p&gt;Imagine two landing pages.&lt;/p&gt;

&lt;p&gt;The first converts 1% of visitors.&lt;/p&gt;

&lt;p&gt;The second converts 5%.&lt;/p&gt;

&lt;p&gt;Send 10,000 visitors to each:&lt;/p&gt;

&lt;p&gt;Product A gets 100 conversions.&lt;/p&gt;

&lt;p&gt;Product B gets 500.&lt;/p&gt;

&lt;p&gt;Same traffic.&lt;/p&gt;

&lt;p&gt;Completely different result.&lt;/p&gt;

&lt;p&gt;That's why acquisition and product experience shouldn't be treated as separate problems.&lt;/p&gt;

&lt;p&gt;Traffic is a multiplier.&lt;/p&gt;

&lt;p&gt;If the underlying experience is weak, you're multiplying something weak.&lt;/p&gt;

&lt;p&gt;The five-second test&lt;/p&gt;

&lt;p&gt;Open your homepage and pretend you've never seen it before.&lt;/p&gt;

&lt;p&gt;Within roughly five seconds, can you answer:&lt;/p&gt;

&lt;p&gt;What is this?&lt;/p&gt;

&lt;p&gt;Who is it for?&lt;/p&gt;

&lt;p&gt;What can I do here?&lt;/p&gt;

&lt;p&gt;This sounds ridiculously simple.&lt;/p&gt;

&lt;p&gt;But when you've spent months building something, you already know how everything works.&lt;/p&gt;

&lt;p&gt;Your visitors don't.&lt;/p&gt;

&lt;p&gt;Terms that seem obvious to you might mean nothing to them.&lt;/p&gt;

&lt;p&gt;Buttons you notice immediately might be invisible to someone visiting for the first time.&lt;/p&gt;

&lt;p&gt;Features aren't positioning&lt;/p&gt;

&lt;p&gt;This is something I've had to think about while building &lt;a href="https://nexorush.com" rel="noopener noreferrer"&gt;NexoRush&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A marketplace can have payments, profiles, search, messaging, recommendations, dashboards, reviews, and dozens of other features.&lt;/p&gt;

&lt;p&gt;But listing all of those features doesn't necessarily explain why someone should use the product.&lt;/p&gt;

&lt;p&gt;Users aren't looking for dashboards.&lt;/p&gt;

&lt;p&gt;They're looking for outcomes.&lt;/p&gt;

&lt;p&gt;A buyer doesn't wake up thinking:&lt;/p&gt;

&lt;p&gt;“I really need a marketplace with advanced filtering today.”&lt;/p&gt;

&lt;p&gt;They're thinking:&lt;/p&gt;

&lt;p&gt;“I need someone to fix my website.”&lt;/p&gt;

&lt;p&gt;That's a completely different way of looking at the product.&lt;/p&gt;

&lt;p&gt;Watch what users do, not what you expect them to do&lt;/p&gt;

&lt;p&gt;As developers, we design flows logically.&lt;/p&gt;

&lt;p&gt;Homepage → Search → Profile → Checkout.&lt;/p&gt;

&lt;p&gt;Then a real user arrives.&lt;/p&gt;

&lt;p&gt;Homepage → About → Back → Random category → Homepage → Leave.&lt;/p&gt;

&lt;p&gt;The user isn't wrong.&lt;/p&gt;

&lt;p&gt;Your assumptions were wrong.&lt;/p&gt;

&lt;p&gt;Analytics become much more useful when you stop asking only:&lt;/p&gt;

&lt;p&gt;“How many visitors did I get?”&lt;/p&gt;

&lt;p&gt;and start asking:&lt;/p&gt;

&lt;p&gt;“What did those visitors actually do?”&lt;/p&gt;

&lt;p&gt;Where did they leave?&lt;/p&gt;

&lt;p&gt;Which pages did they visit?&lt;/p&gt;

&lt;p&gt;Did they start the main workflow?&lt;/p&gt;

&lt;p&gt;Did they complete it?&lt;/p&gt;

&lt;p&gt;Fix leaks before opening the faucet&lt;/p&gt;

&lt;p&gt;This doesn't mean you should wait for a perfect product before getting traffic.&lt;/p&gt;

&lt;p&gt;You need visitors to learn.&lt;/p&gt;

&lt;p&gt;But there's a difference between getting enough traffic to discover problems and spending heavily to scale traffic before fixing them.&lt;/p&gt;

&lt;p&gt;Think of acquisition like opening a faucet.&lt;/p&gt;

&lt;p&gt;If the bucket has holes, increasing the water pressure isn't the first problem to solve.&lt;/p&gt;

&lt;p&gt;Fix the biggest holes.&lt;/p&gt;

&lt;p&gt;Then increase the flow.&lt;/p&gt;

&lt;p&gt;A useful metric isn't always visitor count&lt;/p&gt;

&lt;p&gt;Early products often don't need millions of pageviews.&lt;/p&gt;

&lt;p&gt;Sometimes 100 relevant visitors teach you more than 10,000 random ones.&lt;/p&gt;

&lt;p&gt;I'd rather know:&lt;/p&gt;

&lt;p&gt;how many people understood the product,&lt;/p&gt;

&lt;p&gt;how many started the primary workflow,&lt;/p&gt;

&lt;p&gt;where they stopped,&lt;/p&gt;

&lt;p&gt;whether they returned,&lt;/p&gt;

&lt;p&gt;and whether they achieved what they came for.&lt;/p&gt;

&lt;p&gt;Those numbers tell you something about the product.&lt;/p&gt;

&lt;p&gt;Traffic alone mostly tells you that someone managed to find it.&lt;/p&gt;

&lt;p&gt;Distribution still matters&lt;/p&gt;

&lt;p&gt;Of course, you eventually need distribution.&lt;/p&gt;

&lt;p&gt;A great product nobody discovers isn't much better.&lt;/p&gt;

&lt;p&gt;But acquisition becomes significantly more valuable once visitors understand the product and can reach its core outcome without unnecessary friction.&lt;/p&gt;

&lt;p&gt;So before asking:&lt;/p&gt;

&lt;p&gt;“How do I get 10x more traffic?”&lt;/p&gt;

&lt;p&gt;it may be worth asking:&lt;/p&gt;

&lt;p&gt;“What would happen if I actually got it?”&lt;/p&gt;

&lt;p&gt;If the answer is “most visitors would leave,” you probably already know what to work on next.&lt;/p&gt;

</description>
      <category>startup</category>
      <category>webdev</category>
      <category>productivity</category>
      <category>seo</category>
    </item>
    <item>
      <title>Your Next.js App Feels Slow, but Lighthouse Says It’s Fast. Why?</title>
      <dc:creator>Flaviu Z</dc:creator>
      <pubDate>Sat, 03 Oct 2026 02:27:16 +0000</pubDate>
      <link>https://dev.to/ioan_flaviuzsoldos_a3bf4/your-nextjs-app-feels-slow-but-lighthouse-says-its-fast-why-39ci</link>
      <guid>https://dev.to/ioan_flaviuzsoldos_a3bf4/your-nextjs-app-feels-slow-but-lighthouse-says-its-fast-why-39ci</guid>
      <description>&lt;p&gt;You run Lighthouse.&lt;/p&gt;

&lt;p&gt;Performance: 95.&lt;/p&gt;

&lt;p&gt;Everything looks great.&lt;/p&gt;

&lt;p&gt;Then you actually use the application.&lt;/p&gt;

&lt;p&gt;You click a button.&lt;/p&gt;

&lt;p&gt;Wait.&lt;/p&gt;

&lt;p&gt;Open a dashboard.&lt;/p&gt;

&lt;p&gt;Wait.&lt;/p&gt;

&lt;p&gt;Submit a form.&lt;/p&gt;

&lt;p&gt;Wait again.&lt;/p&gt;

&lt;p&gt;Technically, your website is “fast.”&lt;/p&gt;

&lt;p&gt;But it doesn't feel fast.&lt;/p&gt;

&lt;p&gt;This is something that can be confusing when optimizing modern web applications, especially with frameworks like Next.js.&lt;/p&gt;

&lt;p&gt;The reason is simple:&lt;/p&gt;

&lt;p&gt;Page speed and perceived performance aren't exactly the same thing.&lt;/p&gt;

&lt;p&gt;Lighthouse doesn't experience your app like a user&lt;/p&gt;

&lt;p&gt;Performance tools are incredibly useful.&lt;/p&gt;

&lt;p&gt;They can identify problems with things like:&lt;/p&gt;

&lt;p&gt;Largest Contentful Paint&lt;/p&gt;

&lt;p&gt;Cumulative Layout Shift&lt;/p&gt;

&lt;p&gt;blocking resources&lt;/p&gt;

&lt;p&gt;image optimization&lt;/p&gt;

&lt;p&gt;JavaScript execution&lt;/p&gt;

&lt;p&gt;caching&lt;/p&gt;

&lt;p&gt;But users don't care about performance scores.&lt;/p&gt;

&lt;p&gt;They care about what happens after they click something.&lt;/p&gt;

&lt;p&gt;A page can load extremely quickly and still have interactions that feel slow.&lt;/p&gt;

&lt;p&gt;The first load isn't the entire experience&lt;/p&gt;

&lt;p&gt;Imagine a dashboard.&lt;/p&gt;

&lt;p&gt;The initial page loads in 800ms.&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;Then the user clicks Orders.&lt;/p&gt;

&lt;p&gt;Your application sends an API request.&lt;/p&gt;

&lt;p&gt;The API queries the database.&lt;/p&gt;

&lt;p&gt;The database takes 600ms.&lt;/p&gt;

&lt;p&gt;The server processes the response.&lt;/p&gt;

&lt;p&gt;The browser receives it.&lt;/p&gt;

&lt;p&gt;React renders the result.&lt;/p&gt;

&lt;p&gt;Suddenly the user has been waiting more than a second.&lt;/p&gt;

&lt;p&gt;Your homepage performance score didn't tell you much about that experience.&lt;/p&gt;

&lt;p&gt;For applications, you have to think about the entire chain:&lt;/p&gt;

&lt;p&gt;User → Browser → Server → Database → Server → Browser → UI&lt;/p&gt;

&lt;p&gt;Every step can introduce latency.&lt;/p&gt;

&lt;p&gt;Loading states change how speed feels&lt;/p&gt;

&lt;p&gt;Consider two applications.&lt;/p&gt;

&lt;p&gt;Application A:&lt;/p&gt;

&lt;p&gt;User clicks a button.&lt;/p&gt;

&lt;p&gt;Nothing happens for 900ms.&lt;/p&gt;

&lt;p&gt;Then the new page appears.&lt;/p&gt;

&lt;p&gt;Application B:&lt;/p&gt;

&lt;p&gt;User clicks a button.&lt;/p&gt;

&lt;p&gt;The interface immediately shows that something is happening.&lt;/p&gt;

&lt;p&gt;The new page appears after the same 900ms.&lt;/p&gt;

&lt;p&gt;Technically, both took the same amount of time.&lt;/p&gt;

&lt;p&gt;But Application B usually feels faster.&lt;/p&gt;

&lt;p&gt;That's why loading states, skeletons, optimistic updates, and immediate visual feedback matter.&lt;/p&gt;

&lt;p&gt;Performance isn't only about reducing milliseconds.&lt;/p&gt;

&lt;p&gt;It's also about communicating what's happening during those milliseconds.&lt;/p&gt;

&lt;p&gt;Don't fetch everything immediately&lt;/p&gt;

&lt;p&gt;Another common problem is loading information that the user hasn't requested yet.&lt;/p&gt;

&lt;p&gt;Imagine a dashboard containing:&lt;/p&gt;

&lt;p&gt;profile information&lt;/p&gt;

&lt;p&gt;notifications&lt;/p&gt;

&lt;p&gt;messages&lt;/p&gt;

&lt;p&gt;analytics&lt;/p&gt;

&lt;p&gt;recent transactions&lt;/p&gt;

&lt;p&gt;recommendations&lt;/p&gt;

&lt;p&gt;It's tempting to fetch everything when the dashboard opens.&lt;/p&gt;

&lt;p&gt;But does the user need everything immediately?&lt;/p&gt;

&lt;p&gt;Probably not.&lt;/p&gt;

&lt;p&gt;Prioritize what is visible and important.&lt;/p&gt;

&lt;p&gt;Load secondary information later when appropriate.&lt;/p&gt;

&lt;p&gt;A smaller initial workload can make the interface feel significantly more responsive.&lt;/p&gt;

&lt;p&gt;Database latency becomes frontend latency&lt;/p&gt;

&lt;p&gt;Frontend developers sometimes optimize everything in the browser while ignoring what happens behind the API.&lt;/p&gt;

&lt;p&gt;Suppose your API request takes 1.5 seconds.&lt;/p&gt;

&lt;p&gt;Removing 30ms of JavaScript isn't going to fix the experience.&lt;/p&gt;

&lt;p&gt;Look at the entire request.&lt;/p&gt;

&lt;p&gt;Maybe you're making multiple database queries when one would work.&lt;/p&gt;

&lt;p&gt;Maybe a column isn't indexed.&lt;/p&gt;

&lt;p&gt;Maybe you're repeatedly requesting information that could be cached.&lt;/p&gt;

&lt;p&gt;Maybe your application server and database are geographically far apart.&lt;/p&gt;

&lt;p&gt;Maybe you're performing expensive operations synchronously.&lt;/p&gt;

&lt;p&gt;The bottleneck might have nothing to do with React.&lt;/p&gt;

&lt;p&gt;Geography matters more than you think&lt;/p&gt;

&lt;p&gt;If your server is in Europe and your user is also in Europe, network latency may barely be noticeable.&lt;/p&gt;

&lt;p&gt;Now put the user in California.&lt;/p&gt;

&lt;p&gt;Every request has to travel significantly farther.&lt;/p&gt;

&lt;p&gt;And applications rarely make just one request.&lt;/p&gt;

&lt;p&gt;A small amount of additional latency multiplied across many sequential operations can create a noticeably slower experience.&lt;/p&gt;

&lt;p&gt;This is where CDNs, caching, edge infrastructure, and good server placement become important.&lt;/p&gt;

&lt;p&gt;But that doesn't automatically mean you need servers everywhere.&lt;/p&gt;

&lt;p&gt;Sometimes fixing unnecessary requests gives you a bigger improvement than adding infrastructure.&lt;/p&gt;

&lt;p&gt;Be careful with premature infrastructure&lt;/p&gt;

&lt;p&gt;When developers discover latency, it's easy to jump immediately to:&lt;/p&gt;

&lt;p&gt;“We need multi-region infrastructure.”&lt;/p&gt;

&lt;p&gt;Maybe.&lt;/p&gt;

&lt;p&gt;But first ask why the application is making those requests.&lt;/p&gt;

&lt;p&gt;If one interaction triggers eight sequential API calls, deploying the same inefficient architecture to five regions doesn't solve the underlying problem.&lt;/p&gt;

&lt;p&gt;Measure first.&lt;/p&gt;

&lt;p&gt;Optimize second.&lt;/p&gt;

&lt;p&gt;Scale infrastructure when the measurements justify it.&lt;/p&gt;

&lt;p&gt;Measure what users actually do&lt;/p&gt;

&lt;p&gt;Instead of only testing the homepage, test workflows.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;Login → Dashboard → Open item → Edit → Save&lt;/p&gt;

&lt;p&gt;Measure how long each step takes.&lt;/p&gt;

&lt;p&gt;You may discover something interesting.&lt;/p&gt;

&lt;p&gt;Perhaps the initial page load is excellent, but saving an item takes two seconds.&lt;/p&gt;

&lt;p&gt;That's probably where optimization will have the greatest impact.&lt;/p&gt;

&lt;p&gt;The &lt;a href="https://nextjs.org/docs" rel="noopener noreferrer"&gt;Next.js documentation&lt;/a&gt; is a good starting point for understanding the framework's caching, rendering, and optimization options, but architecture still depends heavily on your application's actual behavior.&lt;/p&gt;

&lt;p&gt;Performance is a system problem&lt;/p&gt;

&lt;p&gt;Modern web performance isn't just:&lt;/p&gt;

&lt;p&gt;“How quickly does my HTML load?”&lt;/p&gt;

&lt;p&gt;It's the combined result of:&lt;/p&gt;

&lt;p&gt;Frontend + API + Database + Network + Infrastructure + UX&lt;/p&gt;

&lt;p&gt;That's why chasing a perfect Lighthouse score can sometimes send developers in the wrong direction.&lt;/p&gt;

&lt;p&gt;A 100/100 score is nice.&lt;/p&gt;

&lt;p&gt;But I'd rather have an application scoring 90 that feels instantaneous during real workflows than one scoring 100 whose users stare at frozen buttons after every click.&lt;/p&gt;

&lt;p&gt;Measure the experience, not just the score.&lt;/p&gt;

</description>
      <category>nextjs</category>
      <category>performance</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Stopped Asking “What Feature Should I Build Next?”</title>
      <dc:creator>Flaviu Z</dc:creator>
      <pubDate>Sat, 03 Oct 2026 02:20:20 +0000</pubDate>
      <link>https://dev.to/ioan_flaviuzsoldos_a3bf4/i-stopped-asking-what-feature-should-i-build-next-2oja</link>
      <guid>https://dev.to/ioan_flaviuzsoldos_a3bf4/i-stopped-asking-what-feature-should-i-build-next-2oja</guid>
      <description>&lt;p&gt;When you're building a product, adding features feels like progress.&lt;/p&gt;

&lt;p&gt;New dashboard.&lt;/p&gt;

&lt;p&gt;Better search.&lt;/p&gt;

&lt;p&gt;More filters.&lt;/p&gt;

&lt;p&gt;Notifications.&lt;/p&gt;

&lt;p&gt;AI integration.&lt;/p&gt;

&lt;p&gt;Analytics.&lt;/p&gt;

&lt;p&gt;Every new feature makes the product look more complete.&lt;/p&gt;

&lt;p&gt;But at some point, I realized I was asking the wrong question.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;“What feature should I build next?”&lt;/p&gt;

&lt;p&gt;I started asking:&lt;/p&gt;

&lt;p&gt;“What is stopping someone from completing what they came here to do?”&lt;/p&gt;

&lt;p&gt;Those two questions lead to very different products.&lt;/p&gt;

&lt;p&gt;Developers naturally see missing features&lt;/p&gt;

&lt;p&gt;When you spend hours looking at your own application, it's easy to notice everything it doesn't have.&lt;/p&gt;

&lt;p&gt;Competitor A has advanced filters.&lt;/p&gt;

&lt;p&gt;Competitor B has a better dashboard.&lt;/p&gt;

&lt;p&gt;Competitor C has AI recommendations.&lt;/p&gt;

&lt;p&gt;Suddenly, your backlog contains 40 things.&lt;/p&gt;

&lt;p&gt;The problem is that users don't experience your product as a feature checklist.&lt;/p&gt;

&lt;p&gt;They arrive because they want something.&lt;/p&gt;

&lt;p&gt;For a project management tool, they want to organize work.&lt;/p&gt;

&lt;p&gt;For an e-commerce platform, they want to sell something.&lt;/p&gt;

&lt;p&gt;For a freelance platform, they want to find someone who can solve a problem.&lt;/p&gt;

&lt;p&gt;Everything between the user and that outcome is friction.&lt;/p&gt;

&lt;p&gt;A feature can actually create more friction&lt;/p&gt;

&lt;p&gt;This sounds obvious, but it's surprisingly easy to forget.&lt;/p&gt;

&lt;p&gt;Imagine a search page with 15 filters.&lt;/p&gt;

&lt;p&gt;From a development perspective, that's powerful.&lt;/p&gt;

&lt;p&gt;Users can filter by:&lt;/p&gt;

&lt;p&gt;location&lt;/p&gt;

&lt;p&gt;experience&lt;/p&gt;

&lt;p&gt;price&lt;/p&gt;

&lt;p&gt;rating&lt;/p&gt;

&lt;p&gt;availability&lt;/p&gt;

&lt;p&gt;language&lt;/p&gt;

&lt;p&gt;technology&lt;/p&gt;

&lt;p&gt;category&lt;/p&gt;

&lt;p&gt;delivery time&lt;/p&gt;

&lt;p&gt;More control should mean better search.&lt;/p&gt;

&lt;p&gt;But now imagine someone who doesn't know exactly what they need.&lt;/p&gt;

&lt;p&gt;They don't know whether their project requires React, Next.js, Vue, or something else.&lt;/p&gt;

&lt;p&gt;You've given them more functionality while making their decision harder.&lt;/p&gt;

&lt;p&gt;Sometimes the better interface isn't another filter.&lt;/p&gt;

&lt;p&gt;It's a text box asking:&lt;/p&gt;

&lt;p&gt;“What are you trying to build?”&lt;/p&gt;

&lt;p&gt;Complexity often hides behind flexibility&lt;/p&gt;

&lt;p&gt;Developers love flexibility.&lt;/p&gt;

&lt;p&gt;Give users options.&lt;/p&gt;

&lt;p&gt;Let them customize everything.&lt;/p&gt;

&lt;p&gt;Make every workflow configurable.&lt;/p&gt;

&lt;p&gt;But every option creates another decision.&lt;/p&gt;

&lt;p&gt;And every decision has a cost.&lt;/p&gt;

&lt;p&gt;This is especially noticeable with onboarding.&lt;/p&gt;

&lt;p&gt;You can ask users for 15 pieces of information because all of them could theoretically improve their experience.&lt;/p&gt;

&lt;p&gt;Or you can ask for three things and let them start using the product.&lt;/p&gt;

&lt;p&gt;The second version may technically know less about the user.&lt;/p&gt;

&lt;p&gt;But the user actually reaches the product.&lt;/p&gt;

&lt;p&gt;That's usually more valuable.&lt;/p&gt;

&lt;p&gt;I've run into this problem while working on &lt;a href="https://nexorush.com" rel="noopener noreferrer"&gt;NexoRush&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;A freelance marketplace can become complicated very quickly.&lt;/p&gt;

&lt;p&gt;You can add increasingly sophisticated categories, filters, seller information, service options, search tools, dashboards, and recommendation systems.&lt;/p&gt;

&lt;p&gt;All of those things can be useful.&lt;/p&gt;

&lt;p&gt;But the buyer's actual goal remains surprisingly simple:&lt;/p&gt;

&lt;p&gt;“I need someone who can solve this problem.”&lt;/p&gt;

&lt;p&gt;That changed how I started thinking about features.&lt;/p&gt;

&lt;p&gt;A feature isn't valuable because it exists.&lt;/p&gt;

&lt;p&gt;It's valuable if it reduces the distance between the user and that outcome.&lt;/p&gt;

&lt;p&gt;This also changed how I think about AI features&lt;/p&gt;

&lt;p&gt;AI makes the feature problem even more interesting.&lt;/p&gt;

&lt;p&gt;Right now, adding “AI-powered” functionality to a product is relatively easy.&lt;/p&gt;

&lt;p&gt;But there's a big difference between:&lt;/p&gt;

&lt;p&gt;adding AI&lt;/p&gt;

&lt;p&gt;and&lt;/p&gt;

&lt;p&gt;removing work from the user.&lt;/p&gt;

&lt;p&gt;An AI chatbot that users don't need is still friction.&lt;/p&gt;

&lt;p&gt;An AI system that turns:&lt;/p&gt;

&lt;p&gt;“My Shopify store is slow and I don't know why.”&lt;/p&gt;

&lt;p&gt;into:&lt;/p&gt;

&lt;p&gt;“You probably need someone experienced with Shopify performance optimization, Liquid, JavaScript, and Core Web Vitals.”&lt;/p&gt;

&lt;p&gt;actually removed work.&lt;/p&gt;

&lt;p&gt;That's the kind of AI feature I find interesting.&lt;/p&gt;

&lt;p&gt;The technology becomes almost invisible.&lt;/p&gt;

&lt;p&gt;The outcome is what matters.&lt;/p&gt;

&lt;p&gt;The boring improvements are often the important ones&lt;/p&gt;

&lt;p&gt;Some of the most valuable changes don't make good launch announcements.&lt;/p&gt;

&lt;p&gt;Reducing a form from eight fields to four.&lt;/p&gt;

&lt;p&gt;Making an error message understandable.&lt;/p&gt;

&lt;p&gt;Removing an unnecessary confirmation screen.&lt;/p&gt;

&lt;p&gt;Improving page speed.&lt;/p&gt;

&lt;p&gt;Changing confusing button text.&lt;/p&gt;

&lt;p&gt;Making search results more relevant.&lt;/p&gt;

&lt;p&gt;None of these sound as exciting as launching a major new feature.&lt;/p&gt;

&lt;p&gt;But if 20% more users complete a workflow because of them, they're probably more valuable.&lt;/p&gt;

&lt;p&gt;A simple test&lt;/p&gt;

&lt;p&gt;Before building something new, I've started asking three questions:&lt;/p&gt;

&lt;p&gt;What user problem does this solve?&lt;/p&gt;

&lt;p&gt;What happens if I don't build it?&lt;/p&gt;

&lt;p&gt;Can I solve the same problem by removing something instead?&lt;/p&gt;

&lt;p&gt;The third question is surprisingly powerful.&lt;/p&gt;

&lt;p&gt;Sometimes the best new feature is deleting an old one.&lt;/p&gt;

&lt;p&gt;Products don't win by having the longest feature list&lt;/p&gt;

&lt;p&gt;It's easy to look at established products and assume you need to recreate everything they have.&lt;/p&gt;

&lt;p&gt;But mature products have accumulated features over years.&lt;/p&gt;

&lt;p&gt;They also have users with very different requirements.&lt;/p&gt;

&lt;p&gt;A small product doesn't necessarily need to compete on the number of things it can do.&lt;/p&gt;

&lt;p&gt;It can compete on how quickly someone gets from:&lt;/p&gt;

&lt;p&gt;“I have a problem.”&lt;/p&gt;

&lt;p&gt;to:&lt;/p&gt;

&lt;p&gt;“It's solved.”&lt;/p&gt;

&lt;p&gt;That's a much more useful metric than the number of items in a changelog.&lt;/p&gt;

&lt;p&gt;And lately, it's the question I try to keep coming back to:&lt;/p&gt;

&lt;p&gt;Does this feature help the user move forward, or does it just make the product bigger?&lt;/p&gt;

</description>
      <category>product</category>
      <category>startup</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why Hiring a Developer Is Still Hard When There Are Thousands Available</title>
      <dc:creator>Flaviu Z</dc:creator>
      <pubDate>Fri, 02 Oct 2026 00:14:38 +0000</pubDate>
      <link>https://dev.to/ioan_flaviuzsoldos_a3bf4/why-hiring-a-developer-is-still-hard-when-there-are-thousands-available-2l3d</link>
      <guid>https://dev.to/ioan_flaviuzsoldos_a3bf4/why-hiring-a-developer-is-still-hard-when-there-are-thousands-available-2l3d</guid>
      <description>&lt;p&gt;There are more developers available online than ever before.&lt;/p&gt;

&lt;p&gt;You can find frontend developers, backend engineers, WordPress specialists, AI developers, DevOps engineers, and entire development teams within minutes.&lt;/p&gt;

&lt;p&gt;So hiring a developer should be easy.&lt;/p&gt;

&lt;p&gt;Strangely, it isn't.&lt;/p&gt;

&lt;p&gt;The problem is no longer access to talent.&lt;/p&gt;

&lt;p&gt;The problem is figuring out which talent is actually right for the job.&lt;/p&gt;

&lt;p&gt;A tech stack isn't a job description&lt;/p&gt;

&lt;p&gt;Imagine a startup needs someone to work on an application built with:&lt;/p&gt;

&lt;p&gt;Next.js&lt;/p&gt;

&lt;p&gt;TypeScript&lt;/p&gt;

&lt;p&gt;PostgreSQL&lt;/p&gt;

&lt;p&gt;Stripe&lt;/p&gt;

&lt;p&gt;AWS&lt;/p&gt;

&lt;p&gt;Searching for developers who know these technologies could produce hundreds or thousands of candidates.&lt;/p&gt;

&lt;p&gt;But knowing Next.js doesn't necessarily mean someone can maintain a production application.&lt;/p&gt;

&lt;p&gt;Knowing Stripe doesn't mean they've built complex payment flows.&lt;/p&gt;

&lt;p&gt;And listing AWS on a profile tells you almost nothing about what they've actually done with it.&lt;/p&gt;

&lt;p&gt;Skills are useful filters, but they're weak signals when used alone.&lt;/p&gt;

&lt;p&gt;Years of experience can be misleading&lt;/p&gt;

&lt;p&gt;Another common shortcut is filtering candidates by years of experience.&lt;/p&gt;

&lt;p&gt;Need a senior developer?&lt;/p&gt;

&lt;p&gt;Set the requirement to five years.&lt;/p&gt;

&lt;p&gt;Problem solved.&lt;/p&gt;

&lt;p&gt;Except software development doesn't work like that.&lt;/p&gt;

&lt;p&gt;One developer might spend five years maintaining similar WordPress websites.&lt;/p&gt;

&lt;p&gt;Another might spend three years building APIs, debugging production systems, deploying applications, integrating payment providers, and making architectural decisions.&lt;/p&gt;

&lt;p&gt;The second developer technically has less experience.&lt;/p&gt;

&lt;p&gt;But which one would you want debugging your SaaS application at 2 AM?&lt;/p&gt;

&lt;p&gt;Context matters more than the number.&lt;/p&gt;

&lt;p&gt;Portfolios don't tell the entire story either&lt;/p&gt;

&lt;p&gt;Portfolios are useful, but there's another problem.&lt;/p&gt;

&lt;p&gt;You usually see the final result.&lt;/p&gt;

&lt;p&gt;You don't see the starting point.&lt;/p&gt;

&lt;p&gt;Was the developer responsible for the entire application?&lt;/p&gt;

&lt;p&gt;Did they only implement the frontend?&lt;/p&gt;

&lt;p&gt;Were they part of a team of 15 engineers?&lt;/p&gt;

&lt;p&gt;Did they make the architectural decisions?&lt;/p&gt;

&lt;p&gt;Did they inherit an existing codebase?&lt;/p&gt;

&lt;p&gt;A beautiful final product doesn't necessarily tell you what the person actually contributed.&lt;/p&gt;

&lt;p&gt;This is why good technical hiring requires questions about decisions, not just outcomes.&lt;/p&gt;

&lt;p&gt;Instead of:&lt;/p&gt;

&lt;p&gt;"Did you build this?"&lt;/p&gt;

&lt;p&gt;Ask:&lt;/p&gt;

&lt;p&gt;"What was the hardest technical problem you encountered while building this, and how did you solve it?"&lt;/p&gt;

&lt;p&gt;The second question reveals much more.&lt;/p&gt;

&lt;p&gt;Communication is a technical skill&lt;/p&gt;

&lt;p&gt;This is especially important when working remotely.&lt;/p&gt;

&lt;p&gt;A developer can be excellent technically and still be extremely difficult to work with.&lt;/p&gt;

&lt;p&gt;Imagine receiving this update:&lt;/p&gt;

&lt;p&gt;"Backend almost done."&lt;/p&gt;

&lt;p&gt;What does that mean?&lt;/p&gt;

&lt;p&gt;Compare it with:&lt;/p&gt;

&lt;p&gt;"Authentication and the user API are complete. I'm currently working on Stripe webhooks. I found an issue with failed-payment handling, so I expect to finish that tomorrow."&lt;/p&gt;

&lt;p&gt;Both developers may have written exactly the same amount of code.&lt;/p&gt;

&lt;p&gt;But one gives the client significantly more visibility.&lt;/p&gt;

&lt;p&gt;Good communication reduces uncertainty.&lt;/p&gt;

&lt;p&gt;And reducing uncertainty is incredibly valuable when someone is working remotely on your product.&lt;/p&gt;

&lt;p&gt;The best developer isn't always the right developer&lt;/p&gt;

&lt;p&gt;This is probably the most overlooked part of hiring.&lt;/p&gt;

&lt;p&gt;Suppose you're building a simple MVP.&lt;/p&gt;

&lt;p&gt;You probably don't need someone designing an architecture capable of handling 50 million users.&lt;/p&gt;

&lt;p&gt;You need someone who understands that:&lt;/p&gt;

&lt;p&gt;shipping a good product today can be more valuable than designing the perfect system for three years from now.&lt;/p&gt;

&lt;p&gt;The opposite is also true.&lt;/p&gt;

&lt;p&gt;If you're processing thousands of transactions, hiring someone whose experience consists entirely of small landing pages probably isn't a good idea.&lt;/p&gt;

&lt;p&gt;Hiring should be about matching the complexity of the problem with the experience of the person.&lt;/p&gt;

&lt;p&gt;Search is becoming the interesting problem&lt;/p&gt;

&lt;p&gt;This is something I've been thinking about while working on &lt;a href="https://nexorush.com" rel="noopener noreferrer"&gt;NexoRush&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Traditional freelance search is largely based on categories, keywords, ratings, and filters.&lt;/p&gt;

&lt;p&gt;But a buyer doesn't really want to search for:&lt;/p&gt;

&lt;p&gt;React + Node.js + PostgreSQL&lt;/p&gt;

&lt;p&gt;They want to say:&lt;/p&gt;

&lt;p&gt;"I have a SaaS application with a slow dashboard and I need someone to figure out what's causing it."&lt;/p&gt;

&lt;p&gt;The interesting problem is translating that request into the skills and experience required to solve it.&lt;/p&gt;

&lt;p&gt;That starts looking less like keyword search and more like a recommendation problem.&lt;/p&gt;

&lt;p&gt;Maybe we have enough filters&lt;/p&gt;

&lt;p&gt;Freelance platforms have spent years adding filters.&lt;/p&gt;

&lt;p&gt;Technology.&lt;/p&gt;

&lt;p&gt;Location.&lt;/p&gt;

&lt;p&gt;Hourly rate.&lt;/p&gt;

&lt;p&gt;Experience.&lt;/p&gt;

&lt;p&gt;Rating.&lt;/p&gt;

&lt;p&gt;Availability.&lt;/p&gt;

&lt;p&gt;Language.&lt;/p&gt;

&lt;p&gt;All of these are useful.&lt;/p&gt;

&lt;p&gt;But adding another filter probably won't fundamentally improve hiring.&lt;/p&gt;

&lt;p&gt;The bigger opportunity may be understanding the problem first and finding people based on that understanding.&lt;/p&gt;

&lt;p&gt;In other words:&lt;/p&gt;

&lt;p&gt;Don't start with the developer. Start with the problem.&lt;/p&gt;

&lt;p&gt;That's something I'm increasingly convinced will shape how online hiring evolves.&lt;/p&gt;

&lt;p&gt;What do you think?&lt;/p&gt;

&lt;p&gt;Would you rather search through developer profiles yourself, or describe your problem and let a system recommend the most relevant people?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>freelance</category>
      <category>ai</category>
      <category>startup</category>
    </item>
  </channel>
</rss>
