<?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: Adejuwon Oshadipe</title>
    <description>The latest articles on DEV Community by Adejuwon Oshadipe (@bezzy_j).</description>
    <link>https://dev.to/bezzy_j</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%2F329294%2Ff713319b-881b-4feb-9461-3b161ae8489a.jpg</url>
      <title>DEV Community: Adejuwon Oshadipe</title>
      <link>https://dev.to/bezzy_j</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bezzy_j"/>
    <language>en</language>
    <item>
      <title>Lessons Learned Building Fintech Frontends: Things Nobody Teaches You About Handling Money, State, and User Trust</title>
      <dc:creator>Adejuwon Oshadipe</dc:creator>
      <pubDate>Mon, 15 Jun 2026 06:05:13 +0000</pubDate>
      <link>https://dev.to/bezzy_j/lessons-learned-building-fintech-frontends-things-nobody-teaches-you-about-handling-money-state-27p1</link>
      <guid>https://dev.to/bezzy_j/lessons-learned-building-fintech-frontends-things-nobody-teaches-you-about-handling-money-state-27p1</guid>
      <description>&lt;p&gt;When people think about fintech engineering, they often focus on the backend.&lt;/p&gt;

&lt;p&gt;Payments.&lt;br&gt;
Bank integrations.&lt;br&gt;
Ledgers.&lt;br&gt;
Settlement systems.&lt;/p&gt;

&lt;p&gt;And rightly so—those systems carry enormous responsibility.&lt;/p&gt;

&lt;p&gt;But after spending time building frontend experiences around financial products, I've learned that the frontend carries a different kind of responsibility:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;User trust.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In many cases, users don't see your backend architecture.&lt;/p&gt;

&lt;p&gt;They don't know about your microservices.&lt;/p&gt;

&lt;p&gt;They don't care about your event-driven infrastructure.&lt;/p&gt;

&lt;p&gt;What they see is the interface.&lt;/p&gt;

&lt;p&gt;And when money is involved, every button, loading state, error message, and transaction status affects confidence.&lt;/p&gt;

&lt;p&gt;Here are some of the most important lessons I've learned while building fintech frontends.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Money Is Different From Every Other Type of Data
&lt;/h2&gt;

&lt;p&gt;In many applications, a small display bug is annoying.&lt;/p&gt;

&lt;p&gt;In fintech, it can be terrifying.&lt;/p&gt;

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

&lt;p&gt;₦100,000 become ₦10,000&lt;/p&gt;

&lt;p&gt;or&lt;/p&gt;

&lt;p&gt;$1,000.00 become $999.99&lt;/p&gt;

&lt;p&gt;even temporarily.&lt;/p&gt;

&lt;p&gt;Users immediately assume something is wrong.&lt;/p&gt;

&lt;p&gt;That's why money should never be treated like ordinary numbers.&lt;/p&gt;

&lt;p&gt;Frontend engineers must understand:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formatting&lt;/li&gt;
&lt;li&gt;Precision&lt;/li&gt;
&lt;li&gt;Decimal handling&lt;/li&gt;
&lt;li&gt;Currency conversion&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A simple rounding mistake can create support tickets and damage trust.&lt;/p&gt;

&lt;p&gt;The lesson:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Treat money as a first-class concern, not a display concern.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  2. Loading States Matter More Than You Think
&lt;/h2&gt;

&lt;p&gt;One of the fastest ways to create anxiety is silence.&lt;/p&gt;

&lt;p&gt;Imagine a user clicks "Send Money."&lt;/p&gt;

&lt;p&gt;Nothing happens.&lt;/p&gt;

&lt;p&gt;No spinner.&lt;/p&gt;

&lt;p&gt;No feedback.&lt;/p&gt;

&lt;p&gt;No status update.&lt;/p&gt;

&lt;p&gt;Within seconds, they begin asking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Did it go through?&lt;/li&gt;
&lt;li&gt;Should I click again?&lt;/li&gt;
&lt;li&gt;Was I charged twice?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Good loading states reduce uncertainty.&lt;/p&gt;

&lt;p&gt;Great loading states communicate progress.&lt;/p&gt;

&lt;p&gt;When dealing with financial transactions, feedback is not just UX.&lt;/p&gt;

&lt;p&gt;It's reassurance.&lt;/p&gt;




&lt;h2&gt;
  
  
  3. Every Transaction Has More States Than You Expect
&lt;/h2&gt;

&lt;p&gt;Many developers think a transaction is either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Successful&lt;/li&gt;
&lt;li&gt;Failed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Reality is far more complicated.&lt;/p&gt;

&lt;p&gt;Transactions often move through states like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pending&lt;/li&gt;
&lt;li&gt;Processing&lt;/li&gt;
&lt;li&gt;Awaiting confirmation&lt;/li&gt;
&lt;li&gt;Successful&lt;/li&gt;
&lt;li&gt;Reversed&lt;/li&gt;
&lt;li&gt;Failed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frontend systems must be designed to handle every possibility.&lt;/p&gt;

&lt;p&gt;The worst bugs often happen when we only design for the happy path.&lt;/p&gt;




&lt;h2&gt;
  
  
  4. Error Messages Should Build Confidence
&lt;/h2&gt;

&lt;p&gt;Generic errors create frustration.&lt;/p&gt;

&lt;p&gt;Messages like:&lt;/p&gt;

&lt;p&gt;"Something went wrong"&lt;/p&gt;

&lt;p&gt;tell users almost nothing.&lt;/p&gt;

&lt;p&gt;Financial applications should aim for clarity.&lt;/p&gt;

&lt;p&gt;Users need to know:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happened&lt;/li&gt;
&lt;li&gt;What it means&lt;/li&gt;
&lt;li&gt;What they should do next&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A good error message reduces support requests.&lt;/p&gt;

&lt;p&gt;A great error message preserves trust.&lt;/p&gt;




&lt;h2&gt;
  
  
  5. Users Care About Outcomes, Not APIs
&lt;/h2&gt;

&lt;p&gt;As engineers, we often think in requests and responses.&lt;/p&gt;

&lt;p&gt;Users think in goals.&lt;/p&gt;

&lt;p&gt;They don't care that an endpoint returned a 200 status.&lt;/p&gt;

&lt;p&gt;They care that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The transfer arrived&lt;/li&gt;
&lt;li&gt;The payment succeeded&lt;/li&gt;
&lt;li&gt;The account was funded&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Designing around outcomes rather than technical events creates better user experiences.&lt;/p&gt;




&lt;h2&gt;
  
  
  6. Consistency Builds Trust
&lt;/h2&gt;

&lt;p&gt;One of the most underrated qualities in fintech products is consistency.&lt;/p&gt;

&lt;p&gt;The same action should behave the same way every time.&lt;/p&gt;

&lt;p&gt;The same status should mean the same thing everywhere.&lt;/p&gt;

&lt;p&gt;The same currency should be formatted consistently across the application.&lt;/p&gt;

&lt;p&gt;Inconsistency creates doubt.&lt;/p&gt;

&lt;p&gt;And doubt is expensive in financial products.&lt;/p&gt;




&lt;h2&gt;
  
  
  7. Frontend Engineers Are Trust Engineers
&lt;/h2&gt;

&lt;p&gt;This is probably the biggest lesson I've learned.&lt;/p&gt;

&lt;p&gt;When building financial products, your job is not simply to render data.&lt;/p&gt;

&lt;p&gt;Your job is to help users feel confident about what is happening to their money.&lt;/p&gt;

&lt;p&gt;Every interaction contributes to that feeling.&lt;/p&gt;

&lt;p&gt;Every loading state.&lt;/p&gt;

&lt;p&gt;Every confirmation screen.&lt;/p&gt;

&lt;p&gt;Every receipt.&lt;/p&gt;

&lt;p&gt;Every transaction history page.&lt;/p&gt;

&lt;p&gt;Trust is built through thousands of small decisions.&lt;/p&gt;

&lt;p&gt;And frontend engineers play a much larger role in that than most people realise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Final Thoughts
&lt;/h2&gt;

&lt;p&gt;Building fintech frontends has changed the way I think about software.&lt;/p&gt;

&lt;p&gt;I've learned that technical correctness is only part of the equation.&lt;/p&gt;

&lt;p&gt;A transaction can be perfectly processed by the backend and still create anxiety if the frontend fails to communicate clearly.&lt;/p&gt;

&lt;p&gt;The best financial products don't just move money.&lt;/p&gt;

&lt;p&gt;They help users understand what is happening every step of the way.&lt;/p&gt;

&lt;p&gt;And that responsibility belongs to all of us who build the experiences people interact with every day.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>ux</category>
      <category>fintech</category>
    </item>
    <item>
      <title>30 Vue Nuggets from Production Experience 💚</title>
      <dc:creator>Adejuwon Oshadipe</dc:creator>
      <pubDate>Wed, 13 May 2026 17:31:17 +0000</pubDate>
      <link>https://dev.to/bezzy_j/30-vue-nuggets-from-production-experience-44lo</link>
      <guid>https://dev.to/bezzy_j/30-vue-nuggets-from-production-experience-44lo</guid>
      <description>&lt;p&gt;Most Vue tutorials teach you how to use Vue.&lt;br&gt;
Very few teach you how Vue behaves in real production systems.&lt;/p&gt;

&lt;p&gt;After working on large-scale frontend applications — especially in fintech products where state, performance, and maintainability matter — I’ve realised that the biggest difference between beginner and senior Vue developers is not syntax.&lt;/p&gt;

&lt;p&gt;It’s how they think about:&lt;/p&gt;

&lt;p&gt;Reactivity&lt;br&gt;
State ownership&lt;br&gt;
Component boundaries&lt;br&gt;
Data flow&lt;br&gt;
Architecture&lt;/p&gt;

&lt;p&gt;So I decided to compile 30 practical Vue nuggets pulled from real-world experience building production applications with Vue and Nuxt.&lt;/p&gt;

&lt;p&gt;Not theory.&lt;br&gt;
Not tutorial fluff.&lt;br&gt;
Just lessons that consistently matter when applications grow.&lt;/p&gt;

&lt;p&gt;🟢 1. ref vs reactive — they solve different problems&lt;/p&gt;

&lt;p&gt;One of the earliest Vue mistakes is using reactive for everything.&lt;/p&gt;

&lt;p&gt;The mental model is simple:&lt;/p&gt;

&lt;p&gt;Use ref for single values&lt;br&gt;
Use reactive for structured objects&lt;/p&gt;

&lt;p&gt;ref exists because primitives cannot be proxied like objects. Understanding this distinction early prevents a lot of confusion later in large applications.&lt;/p&gt;

&lt;p&gt;🟢 2. v-if and v-show are not interchangeable&lt;/p&gt;

&lt;p&gt;They may look similar, but they behave differently.&lt;/p&gt;

&lt;p&gt;v-if creates and destroys DOM nodes&lt;br&gt;
v-show only toggles visibility&lt;/p&gt;

&lt;p&gt;The real question is:&lt;/p&gt;

&lt;p&gt;How often will this element change visibility?&lt;/p&gt;

&lt;p&gt;That answer determines which directive you should use.&lt;/p&gt;

&lt;p&gt;🟢 3. Props are read-only for a reason&lt;/p&gt;

&lt;p&gt;Mutating props breaks predictable data flow.&lt;/p&gt;

&lt;p&gt;Vue’s architecture is intentionally directional:&lt;/p&gt;

&lt;p&gt;Props go down&lt;br&gt;
Events go up&lt;/p&gt;

&lt;p&gt;Once both parent and child can modify the same state, debugging becomes painful.&lt;/p&gt;

&lt;p&gt;🟢 4. computed is about caching, not convenience&lt;/p&gt;

&lt;p&gt;A method recalculates every render.&lt;/p&gt;

&lt;p&gt;A computed property recalculates only when dependencies change.&lt;/p&gt;

&lt;p&gt;In small apps, you won’t notice the difference.&lt;br&gt;
In large systems, you absolutely will.&lt;/p&gt;

&lt;p&gt;🟢 5. key in v-for is about identity&lt;/p&gt;

&lt;p&gt;Vue doesn’t use key to silence warnings.&lt;/p&gt;

&lt;p&gt;It uses a key to track identity.&lt;/p&gt;

&lt;p&gt;Without proper keys:&lt;/p&gt;

&lt;p&gt;DOM reuse becomes incorrect&lt;br&gt;
Component state leaks&lt;br&gt;
Animations break&lt;/p&gt;

&lt;p&gt;Using an index as a key is often a hidden bug waiting to happen.&lt;/p&gt;

&lt;p&gt;🟢 6. Events scale better than passing functions as props&lt;/p&gt;

&lt;p&gt;Passing functions deeply into child components creates coupling.&lt;/p&gt;

&lt;p&gt;Events keep communication directional and predictable.&lt;/p&gt;

&lt;p&gt;A reusable component should communicate intent — not know parent implementation details.&lt;/p&gt;

&lt;p&gt;🟢 7. Most watch usage is unnecessary&lt;/p&gt;

&lt;p&gt;A surprising number of watchers should actually be computed properties.&lt;/p&gt;

&lt;p&gt;Use:&lt;/p&gt;

&lt;p&gt;computed for the derived state&lt;br&gt;
Watch for side effects&lt;/p&gt;

&lt;p&gt;That distinction keeps logic cleaner and easier to reason about.&lt;/p&gt;

&lt;p&gt;🟢 8. Too many props usually means poor component design&lt;/p&gt;

&lt;p&gt;When components need 7–10 props, they’re often doing too much.&lt;/p&gt;

&lt;p&gt;A good component accepts meaningful concepts, not scattered fragments of state.&lt;/p&gt;

&lt;p&gt;🟢 9. Components re-render more than most developers realise&lt;/p&gt;

&lt;p&gt;Every reactive dependency exposed to the template becomes something Vue must track.&lt;/p&gt;

&lt;p&gt;The larger the reactive surface area, the more expensive the rendering becomes.&lt;/p&gt;

&lt;p&gt;Being intentional with reactivity matters.&lt;/p&gt;

&lt;p&gt;🟢 10. Duplicate state creates synchronisation bugs&lt;/p&gt;

&lt;p&gt;If the same state exists:&lt;/p&gt;

&lt;p&gt;In Pinia&lt;br&gt;
In local refs&lt;br&gt;
In props&lt;/p&gt;

&lt;p&gt;…you eventually create inconsistency.&lt;/p&gt;

&lt;p&gt;A strong Vue architecture has a clear source of truth.&lt;/p&gt;

&lt;p&gt;🟢 11. watch vs watchEffect&lt;/p&gt;

&lt;p&gt;The difference is precision.&lt;/p&gt;

&lt;p&gt;Watch tracks explicit dependencies&lt;br&gt;
watchEffect tracks everything accessed during execution&lt;/p&gt;

&lt;p&gt;Convenience is nice. Precision scales better.&lt;/p&gt;

&lt;p&gt;🟢 12. Watchers should be rare&lt;/p&gt;

&lt;p&gt;If a watcher is simply updating another reactive value, it’s often a sign that computed properties were misunderstood.&lt;/p&gt;

&lt;p&gt;Watchers are not state management tools.&lt;/p&gt;

&lt;p&gt;🟢 13. Composables should encapsulate logic, not become hidden stores&lt;/p&gt;

&lt;p&gt;A composable that secretly acts like a global state becomes difficult to reason about.&lt;/p&gt;

&lt;p&gt;Good composables:&lt;/p&gt;

&lt;p&gt;Encapsulate reusable behavior&lt;br&gt;
Expose minimal state&lt;br&gt;
Avoid hidden coupling&lt;br&gt;
🟢 14. Not everything belongs in Pinia&lt;/p&gt;

&lt;p&gt;Global state should hold application-wide concerns:&lt;/p&gt;

&lt;p&gt;Auth&lt;br&gt;
Shared API data&lt;br&gt;
Permissions&lt;/p&gt;

&lt;p&gt;Not:&lt;/p&gt;

&lt;p&gt;Modal visibility&lt;br&gt;
Form input values&lt;br&gt;
Dropdown state&lt;/p&gt;

&lt;p&gt;Local UI state should stay local.&lt;/p&gt;

&lt;p&gt;🟢 15. Dynamic components simplify templates&lt;/p&gt;

&lt;p&gt;Large v-if trees quickly become difficult to maintain.&lt;/p&gt;

&lt;p&gt;Dynamic components help templates stay declarative instead of becoming logic-heavy.&lt;/p&gt;

&lt;p&gt;🟢 16. Slots are a scalability tool&lt;/p&gt;

&lt;p&gt;Slots are not just placeholders.&lt;/p&gt;

&lt;p&gt;They allow structural flexibility without duplicating components.&lt;/p&gt;

&lt;p&gt;This becomes incredibly powerful in design systems and reusable UI libraries.&lt;/p&gt;

&lt;p&gt;🟢 17. Async state needs structure&lt;/p&gt;

&lt;p&gt;Scattered refs like:&lt;/p&gt;

&lt;p&gt;loading&lt;br&gt;
error&lt;br&gt;
data&lt;/p&gt;

&lt;p&gt;across multiple components eventually becomes chaos.&lt;/p&gt;

&lt;p&gt;Treat async state as a single structured concern.&lt;/p&gt;

&lt;p&gt;🟢 18. Prop drilling is often a structural problem&lt;/p&gt;

&lt;p&gt;Passing props through many layers usually means state placement needs reconsideration.&lt;/p&gt;

&lt;p&gt;Composables and provide/inject exist for a reason.&lt;/p&gt;

&lt;p&gt;🟢 19. Folder structure influences architecture&lt;/p&gt;

&lt;p&gt;When everything lives in components/, architecture eventually degrades.&lt;/p&gt;

&lt;p&gt;Good structure encourages separation of concerns:&lt;/p&gt;

&lt;p&gt;Components&lt;br&gt;
Stores&lt;br&gt;
Services&lt;br&gt;
Composables&lt;/p&gt;

&lt;p&gt;Organisation affects maintainability more than people realise.&lt;/p&gt;

&lt;p&gt;🟢 20. Hard-to-read components are trying to do too much&lt;/p&gt;

&lt;p&gt;A good component should be understandable quickly.&lt;/p&gt;

&lt;p&gt;If understanding a component requires scrolling endlessly, the boundaries are likely wrong.&lt;/p&gt;

&lt;p&gt;🟢 21. Scalable composables feel like tools, not dependencies&lt;/p&gt;

&lt;p&gt;Reusable composables should avoid assumptions about pages or layouts.&lt;/p&gt;

&lt;p&gt;The more assumptions a composable makes, the less reusable it becomes.&lt;/p&gt;

&lt;p&gt;🟢 22. Tight coupling kills flexibility&lt;/p&gt;

&lt;p&gt;Coupling often hides inside “convenient” shortcuts.&lt;/p&gt;

&lt;p&gt;Components that deeply understand each other become hard to refactor independently.&lt;/p&gt;

&lt;p&gt;Loose coupling is one of the most underrated frontend engineering skills.&lt;/p&gt;

&lt;p&gt;🟢 23. Co-locate state whenever possible&lt;/p&gt;

&lt;p&gt;The best place for a state is usually the closest possible place to where it’s used.&lt;/p&gt;

&lt;p&gt;An over-centralised state creates unnecessary complexity.&lt;/p&gt;

&lt;p&gt;🟢 24. Large reactive objects can become performance traps&lt;/p&gt;

&lt;p&gt;Vue tracks reactivity deeply.&lt;/p&gt;

&lt;p&gt;Passing large objects unnecessarily increases tracking overhead and rendering cost.&lt;/p&gt;

&lt;p&gt;Smaller reactive boundaries scale better.&lt;/p&gt;

&lt;p&gt;🟢 25. Separate UI state from server state&lt;/p&gt;

&lt;p&gt;This distinction matters enormously in production apps.&lt;/p&gt;

&lt;p&gt;UI state:&lt;/p&gt;

&lt;p&gt;Tabs&lt;br&gt;
Filters&lt;br&gt;
Modals&lt;/p&gt;

&lt;p&gt;Server state:&lt;/p&gt;

&lt;p&gt;API data&lt;br&gt;
Cached responses&lt;br&gt;
Backend truth&lt;/p&gt;

&lt;p&gt;Mixing them creates confusion and unpredictable resets.&lt;/p&gt;

&lt;p&gt;🟢 26. Too many emits signals poor boundaries&lt;/p&gt;

&lt;p&gt;A child component emitting many different events usually indicates responsibility overload.&lt;/p&gt;

&lt;p&gt;Smaller, focused components scale better than “super components.”&lt;/p&gt;

&lt;p&gt;🟢 27. Complex forms need architecture&lt;/p&gt;

&lt;p&gt;Large forms become difficult because developers treat them like collections of inputs instead of systems.&lt;/p&gt;

&lt;p&gt;Good form architecture matters more than styling.&lt;/p&gt;

&lt;p&gt;🟢 28. Reactivity debugging starts with dependency tracing&lt;/p&gt;

&lt;p&gt;Most Vue bugs are not random.&lt;/p&gt;

&lt;p&gt;They’re dependency misunderstandings.&lt;/p&gt;

&lt;p&gt;Understanding what Vue is tracking internally dramatically improves debugging speed.&lt;/p&gt;

&lt;p&gt;🟢 29. Simple components scale better than clever ones&lt;/p&gt;

&lt;p&gt;The most maintainable frontend systems are often the least “impressive.”&lt;/p&gt;

&lt;p&gt;Predictability scales better than cleverness.&lt;/p&gt;

&lt;p&gt;🟢 30. Senior Vue developers think in data flow&lt;/p&gt;

&lt;p&gt;Beginners focus on features.&lt;/p&gt;

&lt;p&gt;Experienced engineers focus on:&lt;/p&gt;

&lt;p&gt;State ownership&lt;br&gt;
Flow direction&lt;br&gt;
Component responsibility&lt;br&gt;
Long-term maintainability&lt;/p&gt;

&lt;p&gt;That mindset shift changes everything.&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;Vue is approachable, but building scalable Vue systems still requires engineering discipline.&lt;/p&gt;

&lt;p&gt;The framework gives developers incredible flexibility.&lt;br&gt;
The challenge is learning which patterns continue to work as applications grow.&lt;/p&gt;

&lt;p&gt;Over time, I’ve realized that good Vue architecture is less about mastering APIs and more about mastering:&lt;/p&gt;

&lt;p&gt;Simplicity&lt;br&gt;
Boundaries&lt;br&gt;
Predictability&lt;br&gt;
Data flow&lt;/p&gt;

&lt;p&gt;And honestly, those lessons apply far beyond Vue itself.&lt;/p&gt;

</description>
      <category>vue</category>
      <category>nuxt</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
