<?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: Zack Siri</title>
    <description>The latest articles on DEV Community by Zack Siri (@zacksiri).</description>
    <link>https://dev.to/zacksiri</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F68078%2F524236fb-d0fd-4edd-9584-67e8b9056191.jpeg</url>
      <title>DEV Community: Zack Siri</title>
      <link>https://dev.to/zacksiri</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/zacksiri"/>
    <language>en</language>
    <item>
      <title>Synthetic Benchmarks Are Clean. Agent Workflows Are Not.</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Tue, 24 Feb 2026 13:08:48 +0000</pubDate>
      <link>https://dev.to/zacksiri/synthetic-benchmarks-are-clean-agent-workflows-are-not-p5n</link>
      <guid>https://dev.to/zacksiri/synthetic-benchmarks-are-clean-agent-workflows-are-not-p5n</guid>
      <description>&lt;p&gt;

  &lt;iframe src="https://www.youtube.com/embed/TGsP7RXkuwI"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;Most model evaluations happen in controlled environments: single prompts, tidy inputs, and clear expected outputs.&lt;/p&gt;

&lt;p&gt;Production agents don’t operate like that.&lt;/p&gt;

&lt;p&gt;They route between capabilities.&lt;br&gt;&lt;br&gt;
They call tools.&lt;br&gt;&lt;br&gt;
They maintain state.&lt;br&gt;&lt;br&gt;
They operate under constraints.&lt;br&gt;&lt;br&gt;
They break in subtle, non-obvious ways.&lt;/p&gt;

&lt;p&gt;In this post, I’ll walk through the evaluation framework I built to test LLMs inside a structured, stateful agent workflow.&lt;/p&gt;

&lt;p&gt;To make the discussion concrete, the walkthrough uses &lt;strong&gt;Mistral models&lt;/strong&gt; as the implementation example — demonstrating the kind of behavior and outcomes you can expect when running this evaluation in practice.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;Evaluate how models behave inside a real execution system, not how they perform on isolated prompts.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  What I’m Testing
&lt;/h2&gt;

&lt;p&gt;The framework evaluates five core capabilities required for practical agent systems:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Routing
&lt;/h3&gt;

&lt;p&gt;Can the model correctly identify intent and select the appropriate execution path?&lt;/p&gt;

&lt;p&gt;Agent systems depend heavily on correct internal routing. Misclassification at this layer cascades into downstream failures.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Tool Use
&lt;/h3&gt;

&lt;p&gt;Does the model call tools correctly with valid structured arguments?&lt;/p&gt;

&lt;p&gt;This includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Schema adherence
&lt;/li&gt;
&lt;li&gt;Proper parameter formatting
&lt;/li&gt;
&lt;li&gt;Calling the correct tool
&lt;/li&gt;
&lt;li&gt;Avoiding hallucinated fields
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tool misuse is one of the most common failure modes in agent systems.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Basic Decision Making
&lt;/h3&gt;

&lt;p&gt;Given system instructions and available tools, can the model take reasonable next steps?&lt;/p&gt;

&lt;p&gt;This tests whether the model:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Understands procedural expectations
&lt;/li&gt;
&lt;li&gt;Chooses logical actions
&lt;/li&gt;
&lt;li&gt;Avoids unnecessary tool calls
&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  4. Resolving Constraints
&lt;/h3&gt;

&lt;p&gt;Does the model respect hard rules?&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Forbidden actions
&lt;/li&gt;
&lt;li&gt;Required preconditions
&lt;/li&gt;
&lt;li&gt;Deterministic constraint layers overriding reasoning
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Real systems include guardrails. Models must operate within them.&lt;/p&gt;




&lt;h3&gt;
  
  
  5. Handling Multi-Turn Conversation
&lt;/h3&gt;

&lt;p&gt;Can the model maintain state and coherence across turns?&lt;/p&gt;

&lt;p&gt;This evaluates:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Context retention
&lt;/li&gt;
&lt;li&gt;Correct updates to system state
&lt;/li&gt;
&lt;li&gt;Avoiding contradiction
&lt;/li&gt;
&lt;li&gt;Consistent identity and task awareness
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Single-turn correctness does not guarantee multi-step stability.&lt;/p&gt;




&lt;h2&gt;
  
  
  How the Test Is Structured
&lt;/h2&gt;

&lt;p&gt;This is not a prompt benchmark. It is a workflow simulation.&lt;/p&gt;

&lt;p&gt;The framework includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-step task execution (not single-prompt evaluation)
&lt;/li&gt;
&lt;li&gt;Structured tool interfaces with defined schemas
&lt;/li&gt;
&lt;li&gt;Deterministic constraint layers applied over model reasoning
&lt;/li&gt;
&lt;li&gt;Explicit state tracking across conversation turns
&lt;/li&gt;
&lt;li&gt;Clear evaluation criteria per capability
&lt;/li&gt;
&lt;li&gt;Repeatable, controlled scenarios
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each scenario is designed to simulate how LLMs are actually deployed inside agent systems — where planning, execution, constraint handling, and state management are all interacting simultaneously.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Synthetic benchmarks are optimized for clean scoring.&lt;/p&gt;

&lt;p&gt;Agent workflows are optimized for messy reality.&lt;/p&gt;

&lt;p&gt;When models operate inside structured systems, failure modes shift:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Partial tool calls
&lt;/li&gt;
&lt;li&gt;Invalid arguments
&lt;/li&gt;
&lt;li&gt;Broken routing
&lt;/li&gt;
&lt;li&gt;State drift
&lt;/li&gt;
&lt;li&gt;Constraint violations
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These issues rarely show up in leaderboard-style benchmarks.&lt;/p&gt;




&lt;h2&gt;
  
  
  What This Post Covers
&lt;/h2&gt;

&lt;p&gt;This post (and accompanying video) focuses on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The architecture of the evaluation framework
&lt;/li&gt;
&lt;li&gt;The capability breakdown
&lt;/li&gt;
&lt;li&gt;The workflow simulation model
&lt;/li&gt;
&lt;li&gt;A practical walkthrough using Mistral models
&lt;/li&gt;
&lt;li&gt;The kind of results this methodology surfaces in real agent scenarios
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you're building agent systems or evaluating models beyond chat use cases, this framework is directly applicable to real-world deployments.&lt;/p&gt;

&lt;p&gt;Benchmarks tell you how a model performs in isolation.&lt;/p&gt;

&lt;p&gt;Agent evaluations tell you how it behaves inside a system.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>rag</category>
    </item>
    <item>
      <title>Core Banking: Complete Guide</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Wed, 14 Dec 2022 09:00:41 +0000</pubDate>
      <link>https://dev.to/zacksiri/core-banking-complete-guide-2d35</link>
      <guid>https://dev.to/zacksiri/core-banking-complete-guide-2d35</guid>
      <description>&lt;p&gt;The foundational piece that is needed by any institution that works with financial products. Whether a Bank or a FinTech company.&lt;/p&gt;

&lt;p&gt;This post as a third part in the &lt;a href="https://www.zacksiri.com/tag/fintech/" rel="noopener noreferrer"&gt;series of posts&lt;/a&gt;. I have to say this part is the part I'm most excited to write about. In my journey of building a fintech company this part was the most fun to build. I think during the toughest of times the excitement of building the core banking was what kept me going.&lt;/p&gt;

&lt;p&gt;Let's first answer the question of why core banking is needed in banks and fintech companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Core Banking?
&lt;/h2&gt;

&lt;p&gt;As humans we have multiple ways of handling money. We are evolving from using physical objects and transitioning into more abstract ways of representing money. The modern economy has multiple versions of money, physical cash, cards, and more recently mobile / digital wallets on our devices.&lt;/p&gt;

&lt;p&gt;Cash is one way of doing accounting. It is using physical representation to do accounting of how much value one person has in physical form in their wallet. The wallet exists only to hold physical cash. Imagine you have 10 $100 notes in your physical wallet, you go and buy something for $500, you will physically hand over that 5 $100 notes and be left with 5 $100 notes leaving you with $500 in total balance in your wallet. I would say physical cash is a representation of an abstract concept of "accounting".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzyf1k6c3gi2px55dv36.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzyf1k6c3gi2px55dv36.png" alt="Cash Transaction"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now let's imagine the transaction above of purchasing items happening 10,000 times, each with different values and with different people, happening all at once. That's basically how our economy works! When you make a purchase, you are only responsible for how much you spend, the merchant is responsible for how much she has collected. Each party in the transaction is doing their own accounting.&lt;/p&gt;

&lt;p&gt;Given that we're now transitioning to a more 'digital' economy. Money will become once again a more 'abstract' concept. You will only experience money in digital form. In fact there is no wallet. The concept of digital wallet exists only on your device to make it easy for the users to comprehend. Naturally if you wanted to have digital systems that keeps track of all the transactions and the ledgers of all the members in the economy everything will need to be digitized! This is the purpose behind core banking systems. Digitizing money enables many more possibilities! Your money is shapeless and formless. They can be accessed on any of your devices and you can send money to anyone no matter how far away they are! You can use your money to purchase goods on online stores, pay for services you use all without ever leaving your house.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does Core Banking Work?
&lt;/h2&gt;

&lt;p&gt;One of the most basic component of the core banking is the ability to handle transactions. Transactions represent intention to move funds from one place to another. That's all it is. In the above example of buying something. All you are doing is moving $500 from your wallet into the merchant's cash register. Eventually the merchant will 'move' that money collected into some kind of 'bank account' for safe keeping. &lt;/p&gt;

&lt;p&gt;Now that we've established what a transaction is. This means you will need some kind of 'source' and 'destination' to keep track of this flow of funds. This also means that there has to be some kind of ledger system within the core banking. Let's take a moment to understand how transactions and general ledgers work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Let's start with Deposit
&lt;/h2&gt;

&lt;p&gt;Let's imagine you have $1000 physical cash and you wanted to digitize it. In the modern day and age, you would go to the bank open an account and deposit your cash. Once you deposit your cash, you can then access your money using your smartphone or even your watch. Let's take a look at that step-by-step starting with depositing your cash.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lcp12ey0sbqv4d4waep.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3lcp12ey0sbqv4d4waep.png" alt="Account opening and Deposit"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can probably understand the image above. The question may arise "how does this look digitally?". Usually banks will use some sort of centralized database to store this information. Let's take a look at how this would look in the database. Do note that this is a simplified example to illustrate a point. In reality the design may be much more complex.&lt;/p&gt;

&lt;p&gt;We'll start with just the account opening. In this case the account opening means the balance will start at zero. The 'deposit' transaction will have to be represented separately. We'll call the table of entities that has the ability to 'hold' an account 'holders'. The actual record that keeps the balance is called the 'accounts'. Given that 1 holder may have many accounts it's better to have this sort of structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqww1qn49vpsz8qlm24c3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqww1qn49vpsz8qlm24c3.png" alt="New Account"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Next we'll take a look at how a transaction is represented. Given that we've established that a transaction is the 'movement' of fund from source to destination. Cash has to be represented in our system somehow. The transition from physical to digital has to be created in some way in our system. Let's take a look at how that would work.&lt;/p&gt;

&lt;p&gt;What we can do is add a 'system' entry with it's own 'account'. The balance is zero but we'll make the 'minimum_balance' infinity since we do not know the limit of cash 🤣. In systems you can represent infinity in many ways. However I won't go into that in this post. We now have a system level 'holder' and has an account with zero balance but infinite 'minimum_balance'.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f429i9v39x9kzxwofj0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4f429i9v39x9kzxwofj0.png" alt="Representing Cash in a Digital System"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All we have to do now is create a transaction that represents the movement of this 'Cash' to 'John's' account. We'll introduce a new tables into the mix let's call it 'transactions' and 'changes'.&lt;/p&gt;

&lt;p&gt;We use the 'transaction' record as the main record that 'encapsulates' the 2 changes that happened on 2 accounts. The change on each account is recorded separately. We can also use the 'transactions' table to record the 'maker_id' if we wanted, however to keep focus on the actual funds movement in this case we will keep it simple.&lt;/p&gt;

&lt;p&gt;You can see that in this case we are removing $1000 from the 'Cash' account. Both the changes are grouped by the same 'transaction_id'. This means 1 transaction will be able to show exactly what happened.&lt;/p&gt;

&lt;p&gt;In this case we moved $1000 from the 'Cash' account in the system which has the account_id 2 to 'John's' account which has the account_id 1.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsak5ehro1j9go1ei3to.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqsak5ehro1j9go1ei3to.png" alt="Transactions and Changes"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;All the entries in the database should represent a complete picture of how the deposit happened when you open an account in a core banking system. This is just one design. There can be many other designs based on requirements.&lt;/p&gt;

&lt;p&gt;At this point one may wonder, "how does this get displayed on my devices?". That's a great question. This is where APIs come in!&lt;/p&gt;

&lt;h2&gt;
  
  
  What is an API?
&lt;/h2&gt;

&lt;p&gt;APIs in full form are "application programming interfaces". In this post I won't go into the full detail, however APIs are essentially a way to expose functionality of some systems to the outside world. They're usually secured with some authentication. This is why when you use your mobile banking application you have to login using your password and your OTP token of some kind. &lt;/p&gt;

&lt;p&gt;APIs enable your mobile device or web interfaces, to talk to the core banking in a secure way, and enables your device to retrieve your information from the core banking system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4dulvwo0fjc04onasuqp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4dulvwo0fjc04onasuqp.png" alt="API connecting mobile app to core banking"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Transfers
&lt;/h2&gt;

&lt;p&gt;Now that we understand APIs and core banking and how they keep track of funds movements inside the system, we can now take this to the next level. &lt;/p&gt;

&lt;p&gt;Let's imagine you have a friend who also happens to have an account in this same bank and has deposited. The database would look something like this.&lt;/p&gt;

&lt;p&gt;I've also added the maker_id field to track who the "maker" for a given transaction is.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3t652t5o6ogdlcj2mya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fc3t652t5o6ogdlcj2mya.png" alt="New rows in the database representing new account holder"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's assume that John wants to transfer $500 to Dave. You could assume some kind of UI like this.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvyptgpku3hzplli5lkn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvyptgpku3hzplli5lkn.png" alt="Wireframe for simple banking app"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally in the database a new transaction would be created with the changes to move 500 from John's account to Dave's account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoigldv66zj89pdqf9l1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkoigldv66zj89pdqf9l1.png" alt="Records representing account to account transfer"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is a simple example illustrating the core mechanics of what one possibility of the main components of a core banking system would look like. There are many possibilities depending on requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Complexities
&lt;/h2&gt;

&lt;p&gt;Generally when building core banking, though it may look simple in reality there are many challenges that can cause difficulties in developing such a system. For example. Since creating these transactions can take time to fully execute, you cannot always afford to 'do everything all at once'. Imagine you had 1000s of transactions coming in, you would have to make sure the system can operate asynchronously. Which means you break operations into small parts and put them inside a some sort of queue and distribute the workload.&lt;/p&gt;

&lt;p&gt;There are also other problems like race conditions which can crop up. This means you will have to take into account things like locking accounts when a transfer is in progress so double deductions do not happen. It would be terrible for an account holder to have $1000 but due to lack of proper operations enabling the holder to spend $2000 accidentally.&lt;/p&gt;

&lt;p&gt;You'll also want to use databases that support transactions of some kind to ensure that all the necessary updates and insertions happen in a single database transaction. If one of those entry fails, it should rollback.&lt;/p&gt;

&lt;p&gt;There are also issues of handling double transactions. How do you prevent customers from accidentally creating 2 of the same transactions.&lt;/p&gt;

&lt;p&gt;These are just the beginning of the list of common issues that can crop up in core banking systems. Proper engineering and due process need to be put in place to ensure the integrity of the system.&lt;/p&gt;

&lt;p&gt;Keeping things secure is another important factor. Since everything is stored in centralized database, ensuring proper procedures are in place to restrict database access is critical. Imagine a hacker hacks into the database and replaces the value of an account from 1000 to 1,000,000. That would not be good would it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;There are many ways to build Core Banking. The same mechanics can be used to power lending products, cross border payments, digital wallet systems and many other types of financial products. Having access to such technologies would have been extremely difficult many years ago. There are platforms like this for sale however they are very expensive and since it's an off the shelf product it may be difficult to customize to serve unique business requirements.&lt;/p&gt;

&lt;p&gt;Having the ability to build and maintain a reliable core banking system can be a huge advantage for any organization providing financial services.&lt;/p&gt;

&lt;p&gt;There are many more things to explore with the concept of core banking. In this post we only covered account to account transfer within the same bank. How would this work in a cross-bank transfer. We will explore such topics and much more in future posts!&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you are interested in learning more &lt;a href="https://www.zacksiri.com/#/portal/signup" rel="noopener noreferrer"&gt;please subscribe&lt;/a&gt;. I'm also very versatile when it comes to building such complex systems. I have experience in various industries if you are interested in working with me you can reach me from my consultancy business &lt;a href="http://artellectual.com" rel="noopener noreferrer"&gt;artellectual.com&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>fintech</category>
      <category>database</category>
      <category>api</category>
    </item>
    <item>
      <title>Concurrency vs Parallelism</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Wed, 21 Jul 2021 13:37:20 +0000</pubDate>
      <link>https://dev.to/zacksiri/concurrency-vs-parallelism-17a6</link>
      <guid>https://dev.to/zacksiri/concurrency-vs-parallelism-17a6</guid>
      <description>&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/R9-pQ83iSr0"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;In modern computing the only way to scale up to increase productivity and output of the system is to increase the core count on the CPU and GPU. &lt;/p&gt;

&lt;p&gt;As a developer it's important to understand how this impacts the software that we write. It's also important to understand how things work for us as developer to be able to take advantage of the multi-core nature of the future of computing.&lt;/p&gt;

&lt;p&gt;Whether we're handling large amount of web traffic, render demanding 3d movies, streaming video games live on social network, these tasks require multi core processors to get the work done.&lt;/p&gt;

&lt;p&gt;In this episode we discuss the difference between concurrency and parallelism.&lt;/p&gt;

</description>
      <category>concurrency</category>
      <category>parallelism</category>
      <category>scaling</category>
      <category>multithreaded</category>
    </item>
    <item>
      <title>Ruby on Rails API Authentication</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Tue, 12 Feb 2019 07:14:19 +0000</pubDate>
      <link>https://dev.to/codemy/ruby-on-rails-api-authentication-2374</link>
      <guid>https://dev.to/codemy/ruby-on-rails-api-authentication-2374</guid>
      <description>&lt;p&gt;If you are building any kind of API with Ruby on Rails you are going to have to handle authentication if you want to secure your endpoints. If you're using devise with it's pre-built authentication you'll see that when it comes to managing the Authentication of an API endpoint devise falls slightly short. In this post we will show you some of the options you have with securing your Rails API endpoints and how you can integrate them into devise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Simple Token Authentication
&lt;/h2&gt;

&lt;p&gt;If you have a simple requirement where you just want basic authentication via supplying a token to the client then look no further. This gem is as simple as the name itself. You can &lt;a href="https://github.com/gonzalo-bulnes/simple_token_authentication" rel="noopener noreferrer"&gt;check it out here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The way it works is you run a simple command that pretty much generates the migration file for the user model.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;rails g migration add_authentication_token_to_users "authentication_token:string{30}:uniq"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This essentially adds a &lt;code&gt;authentication_token&lt;/code&gt; field yo your user model. You then add a macro to your user model like so.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="k"&gt;class&lt;/span&gt; &lt;span class="nc"&gt;User&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="no"&gt;ApplicationRecord&lt;/span&gt;
  &lt;span class="n"&gt;acts_as_token_authenticatable&lt;/span&gt;
  &lt;span class="c1"&gt;# ...&lt;/span&gt;

&lt;span class="k"&gt;end&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then you add another macro to your ApplicationController&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight ruby"&gt;&lt;code&gt;&lt;span class="n"&gt;acts_as_token_authentication_handler_for&lt;/span&gt; &lt;span class="no"&gt;User&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="ss"&gt;fallback: :none&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then any endpoint inheriting from the ApplicationController will work with token authentication. &lt;/p&gt;

&lt;p&gt;On the client to authenticate with the endpoint the user has to pass the &lt;code&gt;X-User-Email&lt;/code&gt; and &lt;code&gt;X-User-Token&lt;/code&gt; in the header. That's pretty much it for the simple token authentication gem. Since the gem already works with devise all your devise utilities should work great.&lt;/p&gt;

&lt;p&gt;If you are interested in learning more about JWT authentication check out our free episode below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codemy.net/posts/rails-api-token-authentication-part-1-006/sets/rails-api" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7ja5v5f252j3cku0dw83.jpg" alt="Token Authentication Part 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  JWT Authentication with Devise
&lt;/h2&gt;

&lt;p&gt;JSON Web Token is all the rage when it comes to api authentication. This is because it makes life convenient when it comes to securing your API. How? Well If you are building your API for multiple clients, by using JWT you have 1 method of authentication that will work across all platforms whether you are authenticating a client in the browser, a mobile application, or any kind of server side service consuming data from your api. &lt;/p&gt;

&lt;p&gt;It supports a ton of features and allows you to generate a token for the client on the fly without having anything stored in the database, because the token itself contains the session information. You can generate a token and embed any kind of information into it. For example&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"user_id"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"exp"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1516239022&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Gets turned into&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX2lkIjoxLCJleHAiOjE1MTYyMzkwMjJ9.UCTyi_gPUNhfeelaWxMTfnPtRtNByDUMxKTRpkyewQI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is a cryptographically secure token generated using a secret key on the server. Which means it can only be decrypted by any party with the secret key. Which means if this secret key gets compromised your authentication token method will be compromised.&lt;/p&gt;

&lt;p&gt;The client then embeds this token in the header usually called &lt;code&gt;Authorization&lt;/code&gt;. Each request needs to be authenticated on the server using this token. Which means the token sent by the client needs to be decoded on the server and the data can be verified on the server side. You can check out more about the basics of JWT in our free video.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codemy.net/posts/rails-api-json-web-token-part-1-035/sets/rails-api" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiuhrr2qq1z255y0m0r5l.jpg" alt="JSON Web Token Part 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the video we show you how to generate a basic JWT token using the jwt gem. We event show you how to fulling develop an authentication solution using JWT.&lt;/p&gt;

&lt;p&gt;Once you start working with JWT in your Rails API you'll realize that it doesn't work with your existing devise setup. Which is why we recently released 2 episodes showing you how to integrate your JWT solution with devise by creating a custom devise strategy. You can check them out below. They're member's exclusive so you'll need to become a member for $9 / month, however if you just want the code example it's available for free by clicking the image below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codemy.net/posts/rails-api-devise-and-jwt-integration-part-1-040/sets/rails-api" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fimverbyyy0tt4e9y23qj.jpg" alt="Devise + JWT Integration Part 1"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codemy.net/posts/rails-api-devise-and-jwt-integration-part-2-041/sets/rails-api" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89xy5z85pr4wmgbpqsde.jpg" alt="Devise + JWT Integration Part 2"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are building an API with Ruby on Rails and don't know where to start, I would recommend going for JWT. Since JWT is more future proof and there is a standard that you can follow. Having a standard can be useful because you have 1 authentication system that works in many platforms / languages. So if you are building micro-services in multiple languages you can use the libraries for the language of your service and have different services use 1 authentication system that work with one another.&lt;/p&gt;

&lt;p&gt;JWT as a solution can grow as your application grows in complexity. You can start off with a database-less JWT solution and later on add the ability to store the token in the database so you can expire tokens at will.&lt;/p&gt;

&lt;p&gt;On &lt;a href="https://www.codemy.net" rel="noopener noreferrer"&gt;our site&lt;/a&gt; we use JWT for many things, authenticating our users, service-to-service communication, and authenticating video plays. Since we can embed data into the token itself this makes it very flexible for many kinds of things.&lt;/p&gt;

</description>
      <category>rails</category>
      <category>devise</category>
      <category>jwt</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Rails Routes, HTTP Methods and SQL Queries</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Tue, 29 Jan 2019 12:52:42 +0000</pubDate>
      <link>https://dev.to/codemy/rails-routes-http-methods-and-sql-queries-21ff</link>
      <guid>https://dev.to/codemy/rails-routes-http-methods-and-sql-queries-21ff</guid>
      <description>&lt;p&gt;Learning how the rails routes are generated and how they map to HTTP methods and SQL queries is a foundational piece of knowledge that is missed by many developers when starting out. In this post we will explore some of the basics that will help fill in the gap so that students can understand Rails routes in the least amount of time.&lt;/p&gt;

&lt;p&gt;Rails convention depict that a controller should only have 7 actions most of the time. Generally speaking if you are creating a controller or defining routes and you feel like you need something other than the 7 standard action you should consider creating a new controller.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://blog.codemy.net/rails-routes-http-methods-and-sql-queries/"&gt;In the rest of this post&lt;/a&gt; we uncover how Rails Routes map to HTTP Methods and SQL Queries&lt;/p&gt;

</description>
      <category>rails</category>
      <category>webdev</category>
      <category>learning</category>
    </item>
    <item>
      <title>Ruby Symbols</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Fri, 18 Jan 2019 08:58:14 +0000</pubDate>
      <link>https://dev.to/codemy/ruby-symbols-5e62</link>
      <guid>https://dev.to/codemy/ruby-symbols-5e62</guid>
      <description>&lt;p&gt;&lt;a href="https://www.codemy.net/posts/rfs-symbols-007/sets/ruby-from-scratch"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aEmX_9Nx--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/1g74wmiwo9xxk4e78ze5.jpg" alt="Ruby Symbols"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Symbols are immutable data structure in ruby, it can come in handy in many instances. We also explore the difference between ruby's Strings and Symbols &lt;a href="https://www.codemy.net/posts/rfs-symbols-007/sets/ruby-from-scratch"&gt;in this episode&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;This video is a part of the &lt;a href="https://www.codemy.net/sets/ruby-from-scratch"&gt;Ruby From Scratch&lt;/a&gt; Series on Codemy.net&lt;/p&gt;

</description>
      <category>ruby</category>
      <category>programming</category>
    </item>
    <item>
      <title>Create a Custom Plug</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Fri, 21 Dec 2018 10:41:45 +0000</pubDate>
      <link>https://dev.to/codemy/create-a-custom-plug-l91</link>
      <guid>https://dev.to/codemy/create-a-custom-plug-l91</guid>
      <description>&lt;p&gt;We show you how to create your own elixir plug in 3 parts. Check out the free code example. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.codemy.net/posts/elixir-custom-plug-part-1-008/sets/elixir-foundation"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--CtltoVt5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://thepracticaldev.s3.amazonaws.com/i/r30o8ryhro5jmxt58n0v.jpg" alt="Custom Plug Part 1"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>elixir</category>
      <category>learning</category>
      <category>video</category>
    </item>
    <item>
      <title>Learn React on Rails</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Wed, 26 Sep 2018 08:49:00 +0000</pubDate>
      <link>https://dev.to/codemy/learn-react-on-rails-2f62</link>
      <guid>https://dev.to/codemy/learn-react-on-rails-2f62</guid>
      <description>

&lt;p&gt;&lt;a href="https://www.codemy.net/collections/learn-react-on-rails"&gt;React and Ruby on Rails&lt;/a&gt; is a powerful combination. &lt;a href="https://www.codemy.net/collections/learn-react-on-rails"&gt;This collection&lt;/a&gt; is a combination of the React Foundation, Rails API and React Intermediate series. It is organized in sequence of how the invoiced application is created. This is a great way to learn how to build React apps that get their data from a Rails API backend.&lt;/p&gt;


</description>
      <category>react</category>
      <category>rails</category>
      <category>learning</category>
    </item>
    <item>
      <title>Upgrading Legacy Rails App Guide</title>
      <dc:creator>Zack Siri</dc:creator>
      <pubDate>Tue, 11 Sep 2018 12:21:01 +0000</pubDate>
      <link>https://dev.to/codemy/upgrading-legacy-rails-app-guide-28d</link>
      <guid>https://dev.to/codemy/upgrading-legacy-rails-app-guide-28d</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fhtkoqswxutfatqxdtc9w.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fhtkoqswxutfatqxdtc9w.jpg" alt="Upgrading Legacy Rails App Part 1"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.codemy.net/posts/rails-upgrading-a-legacy-rails-app-part-1" rel="noopener noreferrer"&gt;Upgrading a Legacy Rails App Part 1&lt;/a&gt; - Upgrading a legacy rails app is a chore for every rails developer. Knowing the right strategy can save you a lot of time. We'll be showing you exactly how to go about it in this episode!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0vru3sg62jjt8olnm2w7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2F0vru3sg62jjt8olnm2w7.jpg" alt="Upgrading Legacy Rails App Part 2"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.codemy.net/posts/rails-upgrading-a-legacy-rails-app-part-2" rel="noopener noreferrer"&gt;Upgrading a Legacy Rails App Part 2&lt;/a&gt; - We continue the upgrade process from the previous episode. Now that our application is running on the stable version of 4.2.10 . We can start the process of upgrading to 5.2.1 . We will use the railsdiff.org extensively to guide us through the upgrade process.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxgclgg3hvmmfh5g2mksa.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fthepracticaldev.s3.amazonaws.com%2Fi%2Fxgclgg3hvmmfh5g2mksa.jpg" alt="Upgrading Legacy Rails App Part 3"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.codemy.net/posts/rails-upgrading-a-legacy-rails-app-part-3" rel="noopener noreferrer"&gt;Upgrading a Legacy Rails App Part 3&lt;/a&gt; - We finalize the upgrade process by patching up a few files. Once all the changes are in place we should be able to run bundle update rails&lt;/p&gt;

</description>
      <category>rails</category>
      <category>video</category>
    </item>
  </channel>
</rss>
