<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Engineering at Zafin - Medium]]></title>
        <description><![CDATA[Zafin’s official engineering blog. - Medium]]></description>
        <link>https://medium.com/engineering-zafin?source=rss----c7e6f07fd0---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Engineering at Zafin - Medium</title>
            <link>https://medium.com/engineering-zafin?source=rss----c7e6f07fd0---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Mon, 18 May 2026 11:32:44 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/engineering-zafin" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Vibe Coding in the Real World: Embracing AI’s Speed While Managing Its Risks]]></title>
            <link>https://medium.com/engineering-zafin/vibe-coding-in-the-real-world-embracing-ais-speed-while-managing-its-risks-468bbc83164f?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/468bbc83164f</guid>
            <category><![CDATA[coding]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[cursor]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[vibe-coding]]></category>
            <dc:creator><![CDATA[Engineering at Zafin]]></dc:creator>
            <pubDate>Mon, 23 Jun 2025 12:53:33 GMT</pubDate>
            <atom:updated>2025-06-20T16:38:34.425Z</atom:updated>
            <content:encoded><![CDATA[<p>By <a href="https://shahirdaya.medium.com/">Shahir Daya</a>, Chief Product and Technology Officer</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*PPd_jGCBQcxvplar" /></figure><h3>Introduction</h3><p>As a tech leader who’s spent years building software in high-stakes environments, I’ve watched the rise of vibe coding with equal parts excitement and caution. In this post, I want to demystify what vibe coding really is, show where it can turbocharge development, and also lay out why it’s <em>not</em> a cure-all — especially not in enterprises like banking where mistakes are costly. I’ll share some personal experiences from my role as CPTO at Zafin, where we’ve been actively experimenting with AI-assisted development. Our AI journey has resulted in a company-wide AI rollout, both in our product engineering and company operations, and has showed me how, and where, to harness the “vibes” in a pragmatic, responsible way.</p><h3>What Is “Vibe Coding,” Exactly?</h3><p>Crucially, vibe coding is not just using AI to help code — it’s handing over the keyboard (figuratively) and trusting the AI to handle the details. A vibe coder might copy an error message into the AI and ask for a fix, rather than digging through stack traces themselves. They might bolt on a new feature by prompting the AI, even if they don’t fully understand the code the AI wrote last time. The codebase grows and evolves, often beyond the developer’s personal understanding.</p><p>If you’re thinking this sounds a bit wild, you’re not alone. In traditional software engineering, we pride ourselves on understanding our code inside-out. Vibe coding breaks from that mindset. It’s about speed and vibes over meticulous control. It’s the ultimate embodiment of the “move fast and break things” ethos, perhaps too fast<strong> </strong>and ready to break things, as we’ll discuss. So, who benefits from this approach, and what’s its future? Early enthusiasm suggests vibe coding can make software development more accessible and lightning-quick, but seasoned engineers (myself included) have some hard questions about maintainability and correctness. Let’s look at both sides.</p><h3>Where Vibe Coding Shines: Rapid Prototyping and UI “Magic”</h3><p>Despite the controversy, there’s a reason vibe coding has caught on so quickly. It delivers speed. Tasks that used to take days or weeks of coding can sometimes be accomplished in hours with the right AI assistance. For early-stage ideas, hackathons, or any scenario where getting a working prototype matters more than perfect code, this approach can feel revolutionary.</p><p>Imagine a product manager with a bold idea for a new feature, or a startup founder who doesn’t code. In 2023, they might have been stuck waiting for engineering resources or struggling with a drag-and-drop app builder. In 2025, they can fire up an AI coding tool, describe what they want in plain language, and watch a basic app materialize. I’ve seen non-engineers create simple web apps by just chatting with an AI about what they need. Large Language Models (LLMs) have effectively democratized prototyping, allowing anyone comfortable with a computer to build basic digital products.</p><p>Even for experienced developers, vibe coding can accelerate tedious work. User interface (UI) development is a great example. UIs often involve a lot of boilerplate and repetitive patterns. With vibe coding, a developer can say, “Make a responsive login form with email/password fields and a ‘Remember Me’ checkbox,” and get the full React/HTML/CSS code generated in seconds. If the design needs tweaking, maybe the button should be blue and aligned to the right, they can just tell the AI to adjust that. It’s a far cry from manually wrestling with CSS for hours. For early-stage projects or internal tools, this speed is a game-changer. You can iterate on ideas much faster when you’re not spending 80% of your time on setup and syntax.</p><p>My team’s experience at Zafin drove this home. We set out to build an<strong> </strong>MVP of a new product. Traditionally, this kind of project would be scoped for a small team over a couple of months given the design, front-end, back-end logic, integration, testing, and so on. Using an AI-assisted approach, we got a working prototype up and running in about 5 person-days, essentially one week. That’s a massive acceleration. It wasn’t fully production-ready, but it proved the concept and let us demo live functionality for stakeholders. The AI handled a lot of the grunt work which freed our engineers to focus on refining the business logic and user experience. For prototyping purposes, the “vibes” were very good indeed.</p><h3>Why You Can’t Only “Vibe” in Enterprise Software (Maintaining Rigor in Regulated Industries)</h3><p>Given how empowering vibe coding can be in early development, it’s tempting to ask: <em>Why not use it for everything?</em> Here’s where the other shoe drops. In mature software environments — especially enterprise and regulated industries like banking — maintainability, auditability, and correctness are absolutely non-negotiable. And these are precisely the areas where reckless vibe coding runs into trouble.</p><p>Professional software engineering isn’t just about getting things working quickly; it’s about building systems that keep working, correctly and securely, as they evolve. That means humans need to understand and trust the code. When an AI is generating code on your behalf, you still carry responsibility for what that code does. In a bank, for instance, every change to the codebase might need to go through code review, QA, and even compliance checks. If a developer says, “Well, I let the AI write this chunk, I’m not really sure what it’s doing under the hood, but it seems to work,” that’s a huge red flag. Auditors and regulators will not accept “it mostly works” as an answer. They need to know that proper controls are in place and that someone can explain how the software meets requirements.</p><p>Maintainability suffers if no one on the team truly understands the code’s logic. It’s only fine until something goes wrong. If your team treated the codebase as a black box generated by an AI, they’ll struggle when a severe bug or outage hits. Debugging complex issues requires understanding the system’s internals, no matter how it was originally produced.</p><p>There’s also the matter of correctness in the sense of business logic and compliance. AI doesn’t inherently know your industry’s regulations or your company’s specific policies — unless you explicitly guide it, and even then, it might not get all the nuances. In a financial application, a subtle mistake can lead to mis-calculated interest, incorrect fees, or worse, a compliance violation. A human developer might catch a suspicious calculation or an edge-case scenario that looks off, but an AI writing code from a prompt won’t inherently flag those domain-specific issues.</p><p>Security is another huge concern. Code that “mostly works” might still hide dangerous vulnerabilities. In fact, early experiments with AI-generated code have shown a tendency to produce insecure code if not prompted carefully. AI will cheerfully produce code that runs, even if it’s doing something like hard-coding credentials, ignoring error handling, or using an outdated cryptography method. A novice vibe coder, excited that the app runs, might have no idea that they’ve just opened a security hole large enough to drive a truck through. Enterprise developers must be far more paranoid. We need to ask: Does this API call properly authenticate? Did the AI just expose something it shouldn’t? Are we logging sensitive data? You can’t just assume the AI “knows” what it’s doing in these matters. Security and compliance reviews cannot be skipped, no matter how fast we generated the code.</p><p>In short, the more critical the software, the more critical human oversight becomes. Vibe coding flips the traditional ratio — less time coding, more time reviewing and testing. The vibes alone won’t keep customer data safe or the bank in compliance.</p><h3>Our Journey with AI-Assisted Coding at Zafin: From Pilot to Playbook</h3><p>To demonstrate a pragmatic approach, let me share how we’ve adopted AI coding assistance in my organization. Zafin provides SaaS solutions for banks, which means our software must meet high standards of security, correctness, and auditability. We saw the potential in AI programming tools early, but we also knew we’d have to integrate them carefully. Here’s how we did it:</p><p><strong>1. Starting Small with a Focused Pilot:</strong> Rather than unleash AI coding on our entire engineering team overnight, we began with a pilot program. We invited about 25 engineers (diverse in skill levels and roles) to try out an AI-powered code editor called <a href="https://www.cursor.com/">Cursor</a>. For context, Cursor is an AI-native IDE based on VS Code, with built-in AI assistants (using powerful models like Anthropic’s Claude) to help write and refactor code. Our goal was to see how real developers could leverage it on real tasks, and identify where it helped or hindered. We deliberately chose a non-mission-critical project for this pilot — in our case, that MVP I mentioned earlier. The team’s mandate was: build it fast, but document everything<em>.</em> We treated it as an experiment in boosting productivity. The result, as I noted, was astounding: a functional MVP in 5 days instead of the usual few months. That early win built confidence that AI could dramatically accelerate development, at least for prototype-scale projects.</p><p><strong>2. Gradually Scaling to the Wider Team:</strong> Off the success of the pilot, we expanded access to Cursor and AI coding to more engineers. Over the next quarter, we ramped up from 25 pilot users to over 150 engineers — a majority of our development organization. This wasn’t a free-for-all; we rolled it out in phases, checking in frequently via surveys and team debriefs. One interesting insight was usage patterns: some developers integrated the AI into their daily flow for things like writing unit tests or stubbing out functions, while others were initially hesitant, unsure if it would truly save them time. We encouraged peer learning, where early adopters shared tips (for example, how describing the problem in a certain way got better code results, or how to use the tool’s refactoring commands). This bottom-up knowledge sharing was crucial in driving adoption. As more people saw colleagues succeeding with AI assistance, the skeptics began to give it a try. Within a few months, AI pair programming went from a novelty to a normal part of our development culture.</p><p><strong>3. Developing a Playbook and Best Practices:</strong> As we scaled our AI-assisted development, we knew that clear standards and guardrails would be essential. Alongside our rollout of Cursor, we created an AI Coding Playbook, a set of evolving guidelines grounded in real-world usage and feedback. But beyond best practices, we took it a step further by implementing Cursor rules to ensure that AI-generated code conforms to our coding standards and architectural patterns by default. These rules have become a powerful lever for us. They help drive customized AI behavior, ensure consistency across the codebase, and embed things like directory structures, naming conventions, and compliance checks directly into the development environment. As a result, we’ve seen improvements in productivity, onboarding speed, and the context-awareness of AI assistance. For example, we defined explicit rules for database migrations, such as where files should live, naming patterns, and structure enforcement. This means the AI won’t just write code that compiles, it will write code that aligns with our architecture. Our Playbook complements these rules by offering practical guidance: when not to rely on AI (e.g., for security-critical logic), how to prompt effectively, and how to review AI-generated code with the same rigor you would apply to any teammate’s pull request. We also address data security — what internal information can safely be included in prompts and what must be excluded. The combination of policy and automation, the Playbook and Cursor rules, has allowed us to integrate AI into our workflows responsibly and at scale. It’s not just about moving faster, it’s about moving smarter, with standards baked into every suggestion the AI makes.</p><p>Let me summarize a few key takeaways from our adoption of AI coding at Zafin:</p><ul><li><strong>Start small and learn fast:</strong> Our initial pilot with a contained team and project was crucial. It let us prove value quickly and establish rules and procedures before scaling up. This incremental approach built trust across the organization.</li><li><strong>Keep humans in the loop:</strong> We treated AI like a super-smart assist, not an autonomous coder. Every line of AI-written code was reviewed, tested, and sometimes rewritten. Developers remained responsible for the final output, which kept quality high.</li><li><strong>Create guidelines (and update them):</strong> Having a playbook of do’s and don’ts helped align everyone on best practices. As the tech evolves, we continue to refine our guidelines. This living playbook ensures we maintain standards without stifling the agility AI offers.</li><li><strong>Listen to your team:</strong> We made decisions like discontinuing GitHub Copilot based on direct feedback from engineers. Their on-the-ground experience is invaluable for understanding what actually helps or hinders productivity. By involving them in the process, we got buy-in and uncovered insights leadership alone might miss.</li></ul><p>Overall, the organizational impact has been strongly positive. We’ve seen a significant reduction in development time for many tasks and an uptick in developer happiness when they can focus on creative problem-solving instead of the boilerplate. Interestingly, some engineers reported that working with the AI forced them to articulate problems more clearly (since you have to explain to the AI what you want), which in turn improved their design thinking. That’s a side benefit I hadn’t anticipated.</p><h3>Conclusion</h3><p>At the end of the day, someone has to be accountable for the software products we build, and that’s still us, the humans. By embracing AI with eyes wide open, we can harness the “vibes” to build faster and smarter, without losing sight of the responsibility that comes with writing software that matters. As a leader in a regulated industry, I’m proud that we didn’t shy away from AI out of fear; instead, we leaned in and established a blueprint for how to do it right. In my view, that’s the path to staying ahead: boldly adopt new technology, manage the risks intelligently, and always keep the end-goal in focus — delivering reliable, innovative solutions for your customers.</p><blockquote>“Vibe coding is not a target destination but it has entered the heterogenous mixture of the software development lifecycle and increased the accessibility to a much larger group of people to enter and contribute to the flow (as long as the proper guardrails are in place to check, review, and allow),” <em>reflects Branavan Selvasingham, Head of AI at Zafin.</em></blockquote><p>The vibe is real, and so are the results, as long as we lead with both enthusiasm and prudence.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=468bbc83164f" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/vibe-coding-in-the-real-world-embracing-ais-speed-while-managing-its-risks-468bbc83164f">Vibe Coding in the Real World: Embracing AI’s Speed While Managing Its Risks</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BIAN Adoption at Zafin (Part 2): Product Directory]]></title>
            <link>https://medium.com/engineering-zafin/bian-adoption-at-zafin-product-directory-f2b990c64372?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/f2b990c64372</guid>
            <category><![CDATA[core-modernization]]></category>
            <category><![CDATA[bian]]></category>
            <category><![CDATA[banking-technology]]></category>
            <category><![CDATA[finance-and-banking]]></category>
            <dc:creator><![CDATA[Daniel Levin]]></dc:creator>
            <pubDate>Mon, 16 Jun 2025 17:58:29 GMT</pubDate>
            <atom:updated>2025-11-17T14:37:57.292Z</atom:updated>
            <content:encoded><![CDATA[<p>By: <a href="https://medium.com/u/0883e2887995?source=post_page---user_mention--6cb116c59796---------------------------------------">Arno Hensbergen</a>, Principal Architect, and John Sew, Principal Architect</p><h3>Introduction</h3><p>If you haven’t already, we recommend reading our <a href="https://medium.com/engineering-zafin/bian-adoption-at-zafin-6cb116c59796">initial article</a> on Zafin’s BIAN adoption first. In this next article, we’re going to explore the blue layer of <a href="https://bian.org/servicelandscape-12-0-0/views/view_52352.html">BIAN’s Architecture Layers View</a> where we’ll be discussing <em>real</em> APIs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/886/1*VWTEjg-vUJWkcd8MLE-p2Q.png" /></figure><p>Zafin has made 3 <em>A</em>PIs that operate the following 4 BIAN Service Domains:</p><ul><li><a href="https://bian.org/servicelandscape-12-0-0/views/view_52083.html">Product Directory</a></li><li><a href="https://bian.org/servicelandscape-12-0-0/views/view_50976.html">Party Reference Data Directory</a></li><li><a href="https://bian.org/servicelandscape-12-0-0/views/view_50881.html">Sales Product Agreement</a></li><li><a href="https://bian.org/servicelandscape-12-0-0/views/view_50653.html">Customer Product And Service</a></li></ul><p>Below are the three Zafin APIs to operate these service domains:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/768/1*ZUFAKWhQdyGIc8sbFIfgtw.png" /><figcaption>Version 2.1 of our API Swagger Files are soon to be published, via Zafin Docs.</figcaption></figure><p>This article explains the Zafin Product Directory API and its underlying control record. It serves as a prelude to the third and main act, our piece on the Sales Product Agreement API.</p><h3>Origin</h3><p>Zafin’s main asset is its <a href="https://zafin.com/platform/billing/">billing engine</a> that calculates fees, discounts and/or penalties on deposit products sold by a bank. For a bank to configure the pricing parameters to conduct billing, our platform contains a <a href="https://zafin.com/platform/product-catalog/">Product Catalog</a>. Once new pricing parameters have been approved by a checker of the bank, our product catalog sends a message to our billing engine for the updated pricing to take effect. We use that same message to populate our Product Directory software. This is for a bank to retrieve products, attached fees, rates or discounts, via BIAN inspired APIs.</p><p>We used BIAN’s <a href="https://bian.org/servicelandscape-12-0-0/views/view_46199.html">Product Directory BOM</a>, and its helper diagrams to design the Zafin Product Directory Data Object Model. We also used BIANs <a href="https://app.swaggerhub.com/apis/BIAN-3/ProductDirectory/12.0.0">Product Directory semantic API</a> as a template for our API.</p><p>Whenever we release a new version to banks for this API, we deliver the following artefacts:</p><ul><li>A Data Object Model representing our control record as a document that every human developer with little BIAN experience can read.</li><li>A API Swagger File per <a href="https://bian.org/servicelandscape-12-0-0/object_29.html?object=58031">Service Domain</a> for the contracted endpoints.</li><li>A Type Value model that specifies all enumerations in use by the APIs.</li></ul><h3>The Data Object Model (DOM)</h3><p>Our Product Directory DOM builds upon BIAN’s Product Directory with several key additions.</p><p>At the product level, we introduced a new object: <strong>Product Category</strong>. This object acts as an intermediary between the <strong>Banking Product</strong> and the <strong>Directory</strong> objects. In contrast with BIAN’s guidance, we aim to prevent direct associations between products and directories.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*QWKHD00OX--xwSH-xnpPPA.png" /></figure><p>To illustrate the practical application:</p><p>Imagine a Tier-2 bank with a retail presence in 10 countries, looking to configure products for multiple brand labels within a single Zafin Product Catalog. Each brand logo would become a <strong>Directory</strong> entry in the Zafin Product Directory. The bank would define at least one <strong>Category</strong> (e.g., “Retail”) and associate relevant products with it.</p><p>Banks often use multi-level product hierarchies — some organize products into families, others into groups or classes. To support flexible, n-level hierarchies and allow products to belong to multiple categories (e.g., a credit-line facility offered under both <strong>SME</strong> and <strong>Self-Employed</strong> segments), we introduced this deviation from the standard BIAN model.</p><p>Taking a closer look into <a href="https://bian.org/servicelandscape-12-0-0/views/view_53499.html">Product Features</a>, more drastic changes to BIAN had to be made. This was to create a data model that is performant, maintainable and foremostly, integrable with our existing platform:</p><ul><li>Product Feature became a single object without explicit subtypes. <br> In our model, Product Features can be Fee Plans or fee-items, Interest plans or items, Disclosure references or Product Services, like app-access. Where BIAN applies subtypes to almost everything, we found that subtypes in the physical schema, became unmaintainable and sluggish.</li><li>BIAN uses a concept called <a href="https://bian.org/servicelandscape-12-0-0/views/view_53868.html">Fee Arrangement</a> to store Fee Amounts, or Rates, in Product Directory. BIAN associates the Fee Arrangement to a “Charge Bearer” (you and me for our monthly daily banking fee) via “Arrangement Involvement” (see figure below). That didn’t work for us. Corporate banking customers can have fee plans that contain dozens of fee items, and it became too complex to associate all these individual items to customers directly.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/906/1*ixOL0wYeeXBR2RQTSj7PVQ.png" /><figcaption>Arrangement Involvement</figcaption></figure><ul><li>Furthermore, fees can change over time or be subject to conditions. For example, my $17 monthly subscription fee is waived if I maintain a $4,000 daily closing balance. The temporality of fees and linking limit-conditions that apply to fees became too complex for us to manage using BIAN’s specified approach.</li><li>Instead, we extended Product Feature Modality with pricing parameters such as Fee Amount, Interest Rate and Discount Percentage (see below diagram). By linking Product Arrangements to Product features (such as a fee, or interest-plans) via Arrangement Involvement, we stayed true to BIAN. We later learned from some of our clients that are BIAN-inspired have made these exact same modifications to their software.</li><li>We’ve added versioning to Product Features. Our Product Catalog allows product managers to create future-dated fee plans (features) in so-called “temporals”-think: $0 for the first 4 months, then $20/month after that ‘. We isolated versions in separate “State”-objects with their own lifecycle status, effective dates, and end dates. This sets us up for future graph-based reads. Light blue objects represent these versioned subtypes.</li></ul><p>On Product Feature level, our next major version (v3) will evolve to the following similar format:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/988/1*A2A0NwML9UNH9WzOV9OgaA.png" /></figure><h3>Type Values</h3><p>We consider type values (or enumerations for the API community) to be bank-specific configuration. That is why we don’t document enumerations in the swagger itself but instead we maintain Type Values<strong>,</strong> as a separate artefact. In upcoming releases, we aim to further isolate Type Values in a separate Service Domain (Public Reference Data Management).</p><h3>The API</h3><p>Our API-payloads and the schema-sections therein, resemble our Zafin DOMs (thus our <a href="https://bian.org/servicelandscape-12-0-0/object_28.html?object=58009">control records</a>), to the largest extent.</p><p>A few exceptions have been made in favor of lineage to the BIAN <a href="https://app.swaggerhub.com/apis/BIAN-3/SalesProductAgreement/12.0.0#/productagreement">idiom</a>, but those exceptions are rare. Additionally, our diagrams are plain text plantuml files which allow us conversion to any other idiom. ChatGPT is our new best friend when it comes to maintaining a crisp trace from BIAN BOMs to Zafin DOMs and API schemas, for human or artificial intelligence to contribute to.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/862/1*hTP0nLY8J6xZfDpG8gJ34A.png" /></figure><p>We do not expose our internal behaviour, such as primary keys or inactive versions, in our <a href="https://bian.org/servicelandscape-12-0-0/object_28.html?object=58009">control record</a> unless required — we focus on designing outside-in.</p><p>Our APIs are meant for the omni-channel to use, and to the extent possible, our APIs remain customer (and employee)-journey-agnostic.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/932/1*9Av7KTj5eNBoG0wMEkZxOw.png" /></figure><h3>Conclusions</h3><p>We hope to have made clear that some of the BIAN concepts are hard, if not impossible to implement in <em>real </em>software. Zafin (and possibly also BIAN-adopting banks) would like to contribute back to BIAN, on mismatches between the <em>Business Architecture </em>and the <em>Information System Architecture</em>. Some of these mismatches (i.e. the pricing parameters in Feature Modalities instead of Fee arrangements) impede the easy substitution of one vendor with another and hinders the overall integration between banks and vendors.</p><p>Combining the conceptual BIAN models with the power of Artificial Intelligence is speeding up our software delivery pipeline in unprecedented ways.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*TAFSa6wna_TPit4SgyTCUw.png" /></figure><p>Some Human Intelligence to design real software from the BIAN models will always be required we think since BIAN can’t possibly be aware of local implementation constraints. The more we can make a <em>real </em>standard across banks based on BIAN, the less customization per implementation is needed. This will also allow for less integration effort and thus a cheaper, less error-prone solution overall.</p><h3>References</h3><ul><li>BIAN. (n.d.). <em>BIAN Service Landscape</em>. Banking Industry Architecture Network. Retrieved from <a href="https://bian.org">https://bian.org</a></li><li>BIAN. (n.d.). <em>BIAN Business Object Model (BOM)</em>. Banking Industry Architecture Network. Retrieved from <a href="https://bian.org">https://bian.org</a></li><li>Hasura. (n.d.). <em>Instant GraphQL APIs on your data</em>. Retrieved from <a href="https://hasura.io">https://hasura.io</a></li><li>Zafin. (n.d.). <em>Zafin’s API Documentation and Product Offerings</em>. Retrieved from <a href="https://zafin.com">https://zafin.com</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f2b990c64372" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/bian-adoption-at-zafin-product-directory-f2b990c64372">BIAN Adoption at Zafin (Part 2): Product Directory</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Part 2: Bridging Product and Technology with the CPTO role]]></title>
            <link>https://medium.com/engineering-zafin/part-2-bridging-product-and-technology-with-the-cpto-role-6d2965b02f67?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/6d2965b02f67</guid>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[cpto]]></category>
            <category><![CDATA[cpo]]></category>
            <category><![CDATA[cto]]></category>
            <category><![CDATA[engineering]]></category>
            <dc:creator><![CDATA[Daniel Levin]]></dc:creator>
            <pubDate>Wed, 04 Jun 2025 15:01:13 GMT</pubDate>
            <atom:updated>2025-06-04T15:01:02.099Z</atom:updated>
            <content:encoded><![CDATA[<p>By <a href="https://shahirdaya.medium.com/">Shahir Daya</a>, Chief Product and Technology Officer</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/620/0*sLx-tvUMdNoJTp-m.png" /></figure><h3><strong>Introduction</strong></h3><p>In Part 1 of this series, I walked through what it means to be a CPTO — the hats I wear, the situations I manage, and why this role is uniquely positioned to drive alignment between vision, execution, and customer value. For us at Zafin, that alignment is critical. The product we’re building is deeply technical, the space we operate in is highly regulated, and the clients we serve expect precision and performance at scale. The CPTO role was our answer to those demands.</p><p>So, how did we land on this model? And what has it actually unlocked for us in practice?</p><p>In part 2 of this 2-part series, I’ll take you behind the decision — why the CPTO model made perfect sense for Zafin, how it’s helped us move faster and smarter, and what challenges we’ve faced (and learned from) along the way. From platform complexity to customer intimacy to organizational clarity, I’ll share the reasons we combined the CTO and CPO roles — and why we’d do it again.</p><h3><strong>Why We Combined the CTO and CPO Roles at Zafin</strong></h3><p>In our case, a few factors made the combined role particularly appealing:</p><ul><li><strong>A highly technical product</strong>: Zafin’s platform is inherently technical — we’re talking about cloud-based software that integrates with banks’ core systems, handles complex logic, and meets stringent security and uptime requirements. When your product is deeply technical at its core, merging product and tech leadership can bridge the gap between product vision and technical feasibility, and help ensure our product roadmap is ambitious <em>and</em> grounded in technical reality</li><li><strong>Need for tight collaboration and speed:</strong> Innovation and time-to-market are critical, especially as we help banks modernize. Combining product and tech roles is a way to dismantle silos and accelerate decision-making.</li><li><strong>Unified strategic vision:</strong> Like many companies our size, we want clarity in our long-term strategy. Having product and technology under one umbrella ensures that our technology strategy fully supports our product vision, and vice versa. There’s no “daylight” between what we promise our customers and what our platform can deliver — because one team (with integrated product-engineering DNA) defines and builds it.</li><li><strong>Organizational simplicity:</strong> An added practical benefit is clear accountability. Instead of two C-level leaders juggling overlapping responsibilities, one executive is accountable for the end-to-end success of the product. Our CEO and board know exactly who to come to for anything from roadmap updates to platform reliability. From a CEO’s perspective, having one throat to choke (or one partner to strategize with) on product development matters can simplify leadership dynamics. It certainly streamlines our internal communications — no need for separate product and tech status updates when they’re inherently one conversation.</li></ul><p>At its core, we chose to combine the CTO and CPO roles to tighten the alignment between what we build, why we build it, and how we build it. We believed that by fusing these leadership roles we could better serve our customers, and move faster in a rapidly evolving market.</p><h3><strong>Challenges We’ve Faced — and Why the CPTO Model Works</strong></h3><p>Combining the CTO and CPO roles is not without challenges. The CPTO role demands breadth, stamina, context-switching on steroids, and the ability to lead through both vision and execution. Here are some of the challenges I’ve encountered in the seat — and how we’ve turned them into strengths.</p><ol><li><strong>The Scope is Large — and Unrelenting:</strong></li></ol><p>The CPTO role puts you at the center of two of the most dynamic and high-pressure areas in the business: product and technology. That means you’re responsible for customer outcomes <em>and</em> platform uptime, for roadmap delivery <em>and</em> scalability. There’s no place to hide. It’s thrilling — but it’s also cognitively demanding. The risk is spreading yourself too thin and losing the strategic altitude the role requires.</p><p><strong>How we manage it:</strong> I’ve invested heavily in strong second-line leaders — people who own and drive execution while keeping me focused on the higher-order priorities. I’ve learned that in this role, <em>delegation isn’t a luxury — it’s survival</em>.</p><p><strong>2. The Bias Trap is Real:</strong></p><p>Every CPTO brings a natural tilt — usually toward the function they came up through. My background is technical, which means there’s a gravitational pull toward architectural decisions, dev tooling, and infrastructure strategy. If left unchecked, that pull can overshadow product discovery, customer research, and design.</p><p><strong>How we manage it:</strong> Self-awareness is key. I intentionally block time for user feedback sessions, roadmap reviews, and research. I surround myself with exceptional product thinkers who challenge my assumptions and keep the user front and center. We’ve built in balanced dynamics — like a ‘2-in-a-box’ ownership model for all of our products between product managers and engineering leaders — to ensure both sides of the business are getting equal oxygen. It’s a constant balance. But when you get it right, it creates incredibly well-rounded thinking — and the teams feel that.</p><p><strong>3. You Have to Be Fluent in Two Languages — At All Times</strong></p><p>One of the more subtle challenges of the CPTO role is communication. In any given week, I’m speaking to engineers, designers, product managers, the CEO, clients, sales, security teams, and regulatory stakeholders. Each of these groups speaks a different language. Part of my role is acting as a real-time translator — bridging vocabulary, incentives, and mental models to keep everyone aligned. It’s not just about simplifying tech for business, or explaining strategy to engineers. It’s about aligning <em>everyone</em> to a unified narrative about where we’re going and how we’ll get there.</p><p><strong>How we manage it:</strong> We emphasize context. Whether it’s an architecture review or a product demo, we frame everything around business impact and customer value. And because the CPTO leads both functions, we can reinforce a single source of truth. Our platform vision isn’t fragmented — it’s integrated. That pays dividends in how we communicate, plan, and execute.</p><p><strong>4. Prioritization is Relentless</strong></p><p>The hardest part of the job? Saying no. Every quarter, there are more great ideas than capacity. And unlike a split model, where product and tech leaders can advocate independently, the CPTO <em>is the one making the trade-offs</em>. Do we push for a bold new feature that excites clients? Or invest in modernization to de-risk scale?</p><p><strong>How we manage it:</strong> We constantly evaluate trade-offs in the open. The benefit of having product and tech under one roof is that these trade-offs happen faster and with greater integrity. There’s no turf war — just clarity. But that doesn’t make the decisions easier. It makes them more consequential.</p><p><strong>5. It’s Easy to Become the Bottleneck</strong></p><p>Ironically, the very alignment that makes the CPTO role powerful can also make it dangerous if you don’t manage scale. When everyone — from sales to engineering — knows that product and tech decisions flow through one role, there’s a temptation to route everything through the CPTO. That can slow things down, create decision fatigue, and limit team autonomy.</p><p><strong>How we manage it:</strong> We’ve worked hard to create a structure where the CPTO provides direction, not dependency. Our squads operate with autonomy, our leaders are empowered, and we’ve defined clear swim lanes for decision-making. My job is to <em>enable momentum</em> — not to control every call.</p><h3><strong>Conclusion: The Future of Product-Tech Leadership</strong></h3><p>My journey as a CPTO at Zafin has been one of the most challenging and fulfilling chapters of my career. By combining product and technology leadership, we unlocked a new level of agility and cohesion in our organization. We’ve seen faster innovation cycles, more consistent execution, and a culture that truly fuses product vision with technical excellence.</p><p>Looking ahead, I suspect the industry will see more hybrid leaders like this, especially as software becomes more central to every business and the lines between product and technology continue to blur. Modern software practices — agile, DevOps, cross-functional teams, continuous delivery — naturally break down the old silos. In many ways, the CPTO role is a reflection of how product development itself has evolved to be more integrated. I foresee roles like CPTO becoming more common in tech-driven enterprises where alignment and speed matter greatly. We’ll likely see new generation leaders who consciously develop both skill sets.</p><p>For my peers in the industry — whether you’re a CTO, a CPO, or an aspiring CPTO — the key takeaway is the value of tight partnership between product and engineering. Title aside, what truly drives success is that unity. The CPTO role at Zafin has taught us to always keep customer needs and technical feasibility in lockstep. That’s a lesson I believe will define the future of product-tech leadership: leaders who can wear multiple hats and bridge worlds, whether formally or informally, will be in high demand.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6d2965b02f67" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/part-2-bridging-product-and-technology-with-the-cpto-role-6d2965b02f67">Part 2: Bridging Product and Technology with the CPTO role</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Part 1: Bridging Product and Technology with the CPTO role]]></title>
            <link>https://medium.com/engineering-zafin/bridging-product-and-technology-with-the-cpto-role-ee72f22ac74c?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/ee72f22ac74c</guid>
            <category><![CDATA[leadership]]></category>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[cpto]]></category>
            <category><![CDATA[product]]></category>
            <dc:creator><![CDATA[Daniel Levin]]></dc:creator>
            <pubDate>Wed, 28 May 2025 18:12:08 GMT</pubDate>
            <atom:updated>2025-06-04T14:32:58.802Z</atom:updated>
            <content:encoded><![CDATA[<p>By <a href="https://shahirdaya.medium.com/">Shahir Daya</a>, Chief Product and Technology Officer</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yPk8I376iw1FJmHmKMV1Xg.jpeg" /></figure><h3>Introduction</h3><p>At Zafin, our mission is to help banks along their modernization journey, shaping the future of how banks price, package, and deliver value to their customers. That demands a product strategy that’s tightly coupled with architectural discipline, platform innovation that’s grounded in real customer need, and execution that’s fast, scalable, and rock solid. And that’s exactly what the CPTO model enables. As the Chief Product and Technology Officer (CPTO) at Zafin, I have the unique privilege — and challenge — of wearing these two hats at once.</p><p>In this 2-part series, I want to share why Zafin chose this path, how we’ve structured the role, what we’ve learned, and — most importantly — how this model is helping us deliver stronger outcomes for our clients and move faster in a rapidly changing industry. I’ll share my thoughts on why I believe, in a modern, cloud-native SaaS platform like ours, in a mission-critical industry like banking, combining product and technology leadership under one roof isn’t just smart — it’s <em>essential</em>. If you’re a product or technology leader (or both!), I hope these insights help you navigate the evolving intersection of product and tech leadership in your own organization.</p><h3><strong>Part 1: One Role, Two Hats; exploring what the CPTO role entails</strong></h3><p>As CPTO, my job is to lead our end-to-end product development function — from market insight and customer discovery to technical architecture, software delivery, and post-release evolution. Instead of having a Chief Product Officer (focused on the <em>why</em> and <em>what</em> of the product) and a Chief Technology Officer (focused on the <em>how</em> of implementation), a CPTO is responsible for all of the above — the full spectrum from product vision to technical execution. It’s a broad remit, but one that creates real focus.</p><p><strong>I wear five main hats:</strong></p><p><strong>1. Strategic Vision</strong> — Setting the north star for our product and platform. Where’s the market going? How do we get ahead of it? What investments today will differentiate Zafin tomorrow?</p><p>I am responsible for defining what we build and why. This means working closely with our clients, market research, and our sales teams to shape our product vision. I set the roadmap priorities: which features add the most value to customers? What market problems should we tackle next? All to ensure that our product evolves in the right direction to meet customer needs and business goals. For example, in the past year we’ve introduced capabilities like Dynamic Cohorts (for agile customer segmentation) and Zafin Canvas (a low-code integration tool) to address specific pain points banks have around personalization and integration. Those initiatives started with a strategic decision that “yes, this is what we need to build to deliver value to banks that’s sustainable and rewarding” and that decision ultimately sat with me in the CPTO role. A product leader’s mindset is crucial here — customer-centric, value-driven, always asking “how will this make our customers’ lives better or our product more competitive?”</p><p><strong>2.</strong> <strong>Technology Stewardship — </strong>Owning platform architecture, security, resilience, and scalability. Our promise to clients is enterprise-grade delivery — and that requires deep, ongoing technical leadership.</p><p>I’m also accountable for <strong>how we build and deliver</strong> these product visions. This is the CTO side of the house. It involves defining our architecture, choosing and actively reviewing the right tech stack, ensuring scalability, security, and performance, and generally making sure our engineering approach can execute the product strategy. In practice, I might be reviewing our cloud infrastructure one hour and discussing API design guidelines the next. A big part of my job is to make sure that our technology roadmap aligns with and enables the product roadmap. For instance, if we plan to launch a product, I need to ensure we have the infrastructure in place ahead of time. Technical debt management and platform resilience also fall in my bucket — deciding when to build new features vs. when to shore up the foundation. In other words, I act as the guardian of our platform’s health while it rapidly evolves.</p><p><strong>3. Customer Advocacy </strong>— Spending time with banks, understanding their challenges, and translating insights into actionable roadmap priorities. Zafin builds <em>with</em> our clients, not just for them.</p><p>As CPTO, I am able to speak to customers with a holistic view — I can talk about the product roadmap and features in one breath and discuss integration details and technical performance in the next. Customers don’t care about our internal org chart; they care that their needs are heard and addressed. In my role, I aim to be a <em>bridge</em> between our clients’ business objectives and our technology solutions. This tight coupling with customers feeds back into better product decisions (nothing beats hearing feedback straight from the source) and technical decisions (like knowing which performance improvements will matter most to clients). It also builds trust — our clients know that the person setting our product direction also deeply understands the tech under the hood, which gives them confidence in our execution.</p><p><strong>4.</strong> <strong>Drive Execution </strong>— Ensuring we deliver high-impact features on time and with quality. This includes structuring agile teams, balancing innovation with stability, and making difficult trade-offs.</p><p>Owning both product and tech means I’m ultimately responsible for delivering on our plans. Strategy is useless without execution. I oversee cross-functional execution teams and drive an agile delivery process to hit our targets. This includes setting up the right team structures and processes. I spend a lot of time ensuring that our cadence of releases is steady and that we’re meeting quality benchmarks. When we promise a new feature to a bank by Q4, I’m on the hook to make sure all the gears — product design, coding, testing, deployment — mesh together to make that happen. There’s a <strong>general manager</strong> aspect to the CPTO role — you’re not just dreaming up ideas, you’re responsible for seeing them through to successful outcomes.</p><p><strong>5. Culture Champion</strong> — Building a world-class product and engineering team that works as one. We’re proud of our high-performance, high-trust culture at Zafin, and it’s a critical part of our success</p><p>The CPTO is a people leader for both the product and engineering organizations. At Zafin, I lead a diverse group of product managers, software engineers, architects, UX designers, and more. One of my most important jobs is building a unified culture across these traditionally separate domains. In many companies, product and engineering teams can develop an “us vs. them” dynamic — product wants more, engineering says slow down, etc. In our model, I work intentionally to foster <em>one team</em> with a shared mission. We’ve emphasized principles like ownership, collaboration, and customer-centric thinking at every level. Because ultimately, both product and tech teams share the same goal: create products that our customers love. We celebrate wins <em>together</em> — it isn’t a product win or an engineering win, it is a Zafin win</p><p>The most important part? These responsibilities aren’t in conflict. They reinforce each other. Because they live in the same office.</p><h3><strong>Conclusion</strong></h3><p>I hope I’ve been able to share a bit about what the CPTO role entails, and where I spend a lot of my time. <strong>Please stay tuned for part 2 of this series</strong>, where I will dive into why we, at Zafin, specifically chose to combine the CTO and CPO roles.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=ee72f22ac74c" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/bridging-product-and-technology-with-the-cpto-role-ee72f22ac74c">Part 1: Bridging Product and Technology with the CPTO role</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Product Management at Zafin]]></title>
            <link>https://medium.com/engineering-zafin/product-management-at-zafin-27f20152c40b?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/27f20152c40b</guid>
            <category><![CDATA[product-manager]]></category>
            <category><![CDATA[product-management]]></category>
            <category><![CDATA[product]]></category>
            <category><![CDATA[product-discovery]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Daniel Levin]]></dc:creator>
            <pubDate>Fri, 02 May 2025 17:28:20 GMT</pubDate>
            <atom:updated>2025-05-02T17:28:02.893Z</atom:updated>
            <content:encoded><![CDATA[<p>By <a href="https://medium.com/u/aa69b431a5b8">Teresa Morais Leitao</a>, Group Product Manager</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*9DGLdHL4pKv4FjrCDNpdBw.jpeg" /></figure><p><em>I’m Teresa — Group Product Manager at Zafin, where I’ve spent the last four years turning big-bank pain points into products that actually make banking easier. When I’m not wrangling my two small kids, I’m happiest tackling real customer problems alongside people who are smarter than I am. Along the way I’ve helped weave product-thinking into the company’s DNA (and, frankly, my own), and I’m excited to pull back the curtain on what we’ve gotten to so far</em></p><p>When your grandmother asks you what you do for a living, what do you say?</p><p>I would say: “You know, grandma, when you’re in the grocery store, just picking up some lemons, you want to pay for them, and you have to stay in line for 20 frustrating minutes? Basically, that was a product manager that did a poor job.”</p><p>A product manager’s mission is deceptively simple: make sure real <strong>people</strong> get what they <strong>need</strong> from the <strong>product</strong>. And enjoy the ride while they’re at it.</p><p>Those two sentences already trigger six classic questions:</p><ol><li>Is a smooth checkout really the product manager’s job?</li><li>Shouldn’t the cashier just be faster?</li><li>Who exactly are the “users”?</li><li>How do you know what those users actually want?</li><li>Where do you draw the line around “the product”?</li><li>How do you ensure the thing you dreamed up is the thing your team ships?</li></ol><p>Over the next few minutes — let’s call it a comfortable commuter read — we’ll unpack each question and show how we tackle it at Zafin.</p><h3>#1 Welcome to the Fight Club</h3><p><em>Rule #1: We don’t pretend B2B and B2C product management are the same.</em></p><p>Software product management is still the new kid on the corporate block. The title showed up in a 1931 Procter &amp; Gamble memo, but the discipline as we know it only matured after the Agile Manifesto in 2001. Since then, flavours have proliferated — none more divisive than B2C vs. B2B.</p><p>Zafin is unapologetically B2B: a SaaS platform that serves <strong>banks</strong>. If you’re building for consumers, you can test on dozens of friends, launch to thousands of strangers, and pivot in weeks. If you’re building for a tier‑one bank, you sell to a committee — Procurement, Risk, Finance, Legal, Ops, Support… and somewhere down the hall, the actual end users.</p><p>Different arena, different rules. Success means crafting a product that delights the whole ecosystem, not just the person who logs in.</p><h3>#2 One Ring to Rule Them All</h3><p>Whether you’re in B2B or B2C, the true north stays the same: <strong>the user</strong>. Every Zafin user story starts the same way: “As a [very specific persona] I want to [action] so that I can [goal].”</p><p>Personas aren’t simple stick figures. They’re living dossiers: job, KPIs, caffeine source, tools they curse at, incentives they chase, fears they whisper. You can’t Google this stuff — you have to talk to humans. (LinkedIn + polite curiosity + one Estonian friend of a friend = interview gold.)</p><p>That legwork pays dividends later: users rarely articulate what they <em>need</em>, they talk about what they <em>want</em>. Your job is to read between the lines. A relationship manager who complains that monthly fee adjustments take all Friday doesn’t want a faster spreadsheet — they want their weekend back.</p><p>When the product ships, the One Ring doesn’t magically switch fingers. If users adopt new workflows, new AI buddies, or face new regulations, the product must evolve with them — or evaporate. Lose sight of the user and even the prettiest backlog turns into Gollum’s cave.</p><h3>#3 “You Either Die a Hero, or You Live Long Enough to See Yourself Become the Villain”</h3><p>Welcome to Gotham: every feature will die someday. The trick is to let it die a hero, not a budget‑sucking villain. Our anti‑entropy mantra is <strong>Design → Sell → Build → Repeat</strong>.</p><p><strong>Design.</strong> Start embarrassingly small — a whiteboard sketch, a Lovable.dev flow, anything that makes the idea tangible. Run lightning interviews, grab coffee with Sales, and steal thirty minutes from an architect.</p><p><strong>Sell.</strong> Put the napkin in front of someone authorized to pull out a purchase order. In B2B, one serious buyer beats a thousand Medium claps. It didn’t sell after trying hard enough? Congratulations — that’s where the product stops, and you’ve saved months of engineering burn. <em>Prototype 0.1 rests in peace.</em></p><p><strong>Build.</strong> Got your anchor client? Great. Spin up the squad, translate promises into tickets, and ship a <em>usable</em> slice. Enterprise clients don’t mind MVPs; they mind vaporware.</p><p><strong>Repeat.</strong> First release? Pure prologue. Gather telemetry, run retro interviews, and loop again. Captain America had it right: <em>“I can do this all day.”</em> Our internal motto: <em>“The first iteration is exactly that — a first iteration.”</em></p><p>And yes — every product still dies someday. Your real super‑power is knowing <em>when</em> to double down and when to eulogise.</p><h3>#4 “There’s No Fate But What We Make for Ourselves”</h3><p>A product manager without delivery chops is just a motivational poster. Requirements, strategy, and wireframes are half the job; the other half is rolling up your sleeves and shipping.</p><p>At Zafin, PMs double as product owners. They sit in stand‑ups, parse architecture diagrams, and know which APIs come out of the box. Why? Because strategy meets reality in the sprint backlog. A missed dependency today is a blown release date tomorrow.</p><p>It’s a learning curve — my background is pure business — but every “What database are we on?” chat makes the product sharper. Engineers light up when they see their work move the needle for an actual user, and nothing unites a squad faster than a PM who’s in the trenches.</p><h3>#5 On AI — “Do or Do Not. There Is No Try”</h3><p>Generative AI is our lightsaber — powerful, but prone to self‑amputation if waved around blindly. We’re clear about terms: here “AI” means the family of generative, LLM‑powered helpers at everyone’s fingertips.</p><p>We wield it where it earns its keep: ChatGPT‑assisted user stories, cursor‑powered code reviews, v0.dev prototypes spun up before lunch, Replit spikes over the weekend. Productivity — yes. Hype — no.</p><p>We run every proposed AI feature through three gates:</p><ol><li><strong>User value.</strong> Will it tangibly improve a banker’s day?</li><li><strong>Commercial value.</strong> Will buyers pay, or renew, because of it?</li><li><strong>Technical viability.</strong> Can our stack (and budget) do it responsibly? Stripe and Adyen nailed payments without sprinkling LLM dust on every API call — we’re fine following suit.</li></ol><p>If the triforce doesn’t light up, we holster the saber. No bank wants a hallucinating chatbot refunding mortgages.</p><h3>Curtain Call</h3><p>Product management is messy, exhilarating, and never finished. User‑centricity, hypothesis‑driven discovery, metrics that matter, engineering symbiosis, and a skeptical eye toward hype — these are the pillars we’ve staked our reputation on at Zafin.</p><p>Over the coming months we’ll bring in industry friends to debate the finer points: B2B vs. B2C metrics, when a product should sunset, and how much technical depth tomorrow’s PMs really need. Until then, remember the first rule of product management: if the line in the grocery store is still queued up, your job isn’t done.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=27f20152c40b" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/product-management-at-zafin-27f20152c40b">Product Management at Zafin</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Zafin Integrate & Orchestrate (IO) and Apache NiFi: Unlocking the Potential of Data Flow Automation]]></title>
            <link>https://medium.com/engineering-zafin/zafin-integrate-orchestrate-io-and-apache-nifi-unlocking-the-potential-of-data-flow-automation-9ca864be3d58?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/9ca864be3d58</guid>
            <category><![CDATA[data-flow-automation]]></category>
            <category><![CDATA[data-streaming]]></category>
            <category><![CDATA[engineering]]></category>
            <dc:creator><![CDATA[Engineering at Zafin]]></dc:creator>
            <pubDate>Mon, 12 Aug 2024 14:59:12 GMT</pubDate>
            <atom:updated>2024-08-12T16:07:39.846Z</atom:updated>
            <content:encoded><![CDATA[<p>By <a href="https://medium.com/u/18c5344c0250">Jijo Lawrence</a>, Architect III, <a href="https://medium.com/u/d5d9c8dc7954">Alok Sahi</a>, Chief Architect, and <a href="https://medium.com/u/f07315459341">Shahir A. Daya</a>, Chief Technology Officer</p><p>In industries ranging from fast-paced tech startups to multi-national financial institutions, one thing remains consistent — transferring data efficiently is essential. In service of this need, <a href="https://nifi.apache.org/">Apache NiFi</a> has emerged as a powerful solution to tackle complex data flow challenges. Let’s explore how NiFi automates data flow and why it’s an important tool in the <a href="https://zafin.com/zafin-io/">Zafin Integrate &amp; Orchestrate (IO)</a> platform.</p><h3>What is Apache NiFi?</h3><p>Apache NiFi is an open source, robust data flow management system that enables the automation of data movement between various sources and destinations. Developed by the Apache Software Foundation, NiFi provides an intuitive graphical interface for designing, controlling, and monitoring data flows in real-time. Its visual, flow-based programming paradigm simplifies the creation of data pipelines without the need for complex coding, making it accessible to users with diverse technical backgrounds.</p><h3>Key Features of Apache NiFi</h3><p><strong>Drag-and-Drop Interface:</strong> NiFi’s user-friendly interface allows users to design data flows by simply dragging and dropping processors onto the canvas. This graphical approach enhances productivity and reduces the learning curve for building data pipelines.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*mKGjc86U4wTL6zz7teJsdw.png" /><figcaption><em>Figure 1 — Drag and Drop Nifi Web UI</em></figcaption></figure><p><strong>Processor Ecosystem:</strong> NiFi comes with a rich ecosystem of built-in processors for handling various data integration, transformation, enrichment, and routing tasks. Additionally, users can develop custom processors to extend NiFi’s functionality and integrate with third-party systems or APIs.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/620/1*MqW4Haia2IMK8v3tOgSwvA.png" /><figcaption><em>Figure 2 — NiFi has a rich ecosystem of processors</em></figcaption></figure><p><strong>Data Provenance</strong>: NiFi offers detailed data provenance capabilities, which track the lineage of each data element as it moves through the system. This feature is invaluable for auditing, troubleshooting, and ensuring data quality and compliance.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*HEIMywmHcstZEXngBB6quQ.png" /><figcaption><em>Figure 3 — Data Provenance in the NiFi UI</em></figcaption></figure><p><strong>Scalability and Extensibility</strong>: NiFi is designed to scale horizontally to handle large volumes of data efficiently. Load balancing distributes the data in a flow across the NiFi nodes in the cluster based on the configured load balancing strategy.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/808/1*TSSWNq9vDesp8uO37g7a2Q.png" /><figcaption><em>Figure 4 — configuring the Load Balance Strategy for a Connection</em></figcaption></figure><p>Also, its modular architecture enables easy integration with external systems through custom processors and extensions, providing flexibility to adapt to diverse use cases.</p><p><strong>Data Security</strong>: Security is a top priority in data management, and NiFi offers robust features to ensure data protection. It supports SSL encryption, role-based access control (RBAC), and fine-grained authorization policies to safeguard sensitive information.</p><p><strong>Real-Time Monitoring and Alerts</strong>: NiFi provides comprehensive provenance monitoring capabilities, allowing users to track the performance and health of data flows in real-time. Administrators can set up alerts to proactively identify and address issues, minimizing downtime and ensuring continuous data availability.</p><h3><strong>Why did we choose NiFi?</strong></h3><p>NiFi is a perfect fit for Zafin’s data integration needs with Banks’ core systems and Zafin’s SaaS platform. Zafin Integrate &amp; Orchestrate (IO) handles this data integration by providing batch, change data capture (CDC), and streaming capabilities. We treat batch files as bounded streams, and NiFi enables Zafin to stream the incoming file data to applications like <a href="https://flink.apache.org/">Apache Flink</a> for further processing and transformations. This has helped Zafin to integrate with a wide variety of banks easily while keeping the integration interfaces and underlying structures of the <a href="https://zafin.com/platform/">Zafin SaaS platform</a> intact.</p><h3><strong>NiFi’s role in Zafin IO</strong></h3><p>We use Nifi to effectively incorporate pre-processing and post-processing steps in our Zafin IO data pipelines to ensure the quality and consistency of our data flow automation outcomes.</p><p>Key pre-processing uses of Nifi include:</p><ol><li><strong>Data Ingestion:</strong> Bringing data into NiFi from various sources at the bank such as databases, files, messaging systems, or APIs.</li><li><strong>Data Validation:</strong> Checking the integrity, format, and quality of incoming data to ensure that it meets specified standards or requirements.</li><li><strong>Data Enrichment:</strong> Adding additional context or information to incoming data by joining it with reference data, performing lookups, or applying business rules.</li><li><strong>Data Transformation: </strong>Converting data from one format to another, standardizing data structures, or normalizing values to facilitate downstream processing.</li><li><strong>Routing and Prioritization:</strong> NiFi enables flexible data routing based on content, attributes, or dynamic conditions. This feature is particularly useful for Zafin IO layer in scenarios where data needs to be routed to different destinations based on the characteristics of the data.</li><li><strong>Data Filtering:</strong> Filtering out irrelevant or unwanted data based on specified criteria or conditions to reduce noise and focus on relevant information.</li></ol><p>We have created standard reusable components in Zafin IO that can apply filters, perform joins, enrich data with metadata, and execute complex processing logic on the fly. Zafin IO utilizes NiFi to standardize and cleanse data as it moves through the data pipeline, ensuring consistency and accuracy across different systems. For example, Zafin IO uses NiFi to encrypt/decrypt files coming from Bank’s legacy system, convert files from <a href="https://en.wikipedia.org/wiki/EBCDIC">EBCDIC</a> to ASCII, and sanitize the data.</p><p>Key post-processing uses of Nifi include:</p><ol><li><strong>Data Transformation:</strong> Applying additional transformations or calculations to the processed data to conform to bank’s needs e.g. Batch output needs are different from what’s provided by Zafin SaaS out of the box.</li><li><strong>Data Publication:</strong> Publishing processed data to downstream systems, applications, or users for consumption or further analysis.</li><li><strong>Data Routing:</strong> Routing processed data to different destinations based on business rules or integration requirements.</li><li><strong>Data Archival:</strong> Archiving processed data for compliance or backup purposes.</li></ol><p>A typical flow which involves NiFi inside Zafin IO:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/543/1*Lb3VMsQiPiTBqtm2SnzEZg.png" /><figcaption><em>Figure 5 — typical data flow showing how NiFi is used in Zafin IO</em></figcaption></figure><h3>Key Benefits of Nifi at Zafin</h3><ol><li><strong>Reliability and Fault Tolerance:</strong> NiFi is designed to be highly reliable and fault-tolerant, with built-in mechanisms for data provenance, flow control, and error handling. By incorporating NiFi into the architecture, Zafin IO has been able to ensure that data is processed reliably and consistently, even in the event of system failures or network disruptions.</li><li><strong>Integration with Ecosystem:</strong> NiFi integrates seamlessly with other components of the ecosystem like <a href="https://redpanda.com/">Redpanda</a>, Flink, etc. This interoperability enables Zafin IO layer to leverage additional capabilities for data storage, processing, and analytics as needed. By leveraging NiFi’s integration capabilities, Zafin build a scalable and extensible data processing pipeline that meets the evolving needs of its customers.</li><li><strong>Improved Time to value:</strong> Using custom and built-in processors, we have been able to make reusable components that will allow faster data flow automation and integration with the banks. A great example of a reusable custom Nifi processor is Zafin IO’s EBCDIC to ASCII convertor.</li><li><strong>Improved Speed:</strong> We have used NiFi’s built-in Apache Avro support for both streaming and writing files which makes processing faster and saves a lot of storage space since Avro stores the data in binary format. For one of our clients, Zafin IO processes more than 1TB of data every day achieving a throughput of 20,000 records/second while ingesting the data, converting from EBCDIC to ASCII, filtering data that’s not required, and transforming the schema to conform to that required by the Zafin SaaS platform.</li></ol><h3>Conclusion</h3><p>Apache NiFi’s combination of visual data flow design, dynamic routing, built-in monitoring, extensive processor ecosystem, scalability, security, and community support make it a highly valuable tool for organizations seeking to streamline and automate their data integration and processing workflows. These capabilities make NiFi a great fit for Zafin IO.</p><p>There is no one size fits all. Depending on the characteristics of the data and the task that needs to be performed, Zafin IO provides one of several options including Apache Nifi, Apache Flink, and <a href="https://redpanda.com/connect">Redpanda Connect</a>.</p><p>We hope you found this blog to be helpful. We are always learning, so if you have any suggestions or experiences with similar approaches, please share them in the comments section. We love to hear and learn from others.</p><p>Stay tuned for next part of our blog series on Zafin IO &amp; Nifi:</p><ul><li>Installing NiFi and the Zafin IO Local Development Environment</li><li>Role of the <a href="https://nifi.apache.org/projects/registry/">NiFi Registry</a> in Release Management</li></ul><h3>Acknowledgments</h3><p>We would like to thank <a href="https://medium.com/u/ce628ee84a47">Jijoe Vurghese</a> for his review of this blog. His feedback helped improve the quality of this blog.</p><h3>References</h3><ol><li><em>Zafin Website</em> (2024) <em>Zafin</em>. Available at: <a href="https://zafin.com/">https://zafin.com/</a> (Accessed: 31 July 2024).</li><li><em>Zafin integrate &amp; orchestrate</em> (2024) <em>Zafin</em>. Available at: <a href="https://zafin.com/zafin-io/">https://zafin.com/zafin-io/</a> (Accessed: 31 July 2024).</li><li>Engineering at Zafin (2023) <em>Announcing Zafin Integrate &amp; Orchestrate (IO) and Data Fabric</em>, <em>Medium</em>. Available at: <a href="https://medium.com/engineering-zafin/announcing-zafin-integrate-orchestrate-io-and-data-fabric-fc5b638974df">https://medium.com/engineering-zafin/announcing-zafin-integrate-orchestrate-io-and-data-fabric-fc5b638974df</a> (Accessed: 31 July 2024).</li><li>Apache NiFi (no date a) <em>Apache Nifi</em>, <em>Apache NiFi</em>. Available at: <a href="https://nifi.apache.org/">https://nifi.apache.org/</a> (Accessed: 31 July 2024).</li><li><em>Apache Flink® — stateful computations over data streams</em> (no date) <em>Apache Flink</em>. Available at: <a href="https://flink.apache.org/">https://flink.apache.org/</a> (Accessed: 31 July 2024).</li><li><em>Digital Platform: Transforming Banking experiences with Dynamic Solutions</em> (2024) <em>Zafin</em>. Available at: <a href="https://zafin.com/platform/">https://zafin.com/platform/</a> (Accessed: 31 July 2024).</li><li><em>EBCDIC</em> (2024) <em>Wikipedia</em>. Available at: <a href="https://en.wikipedia.org/wiki/EBCDIC">https://en.wikipedia.org/wiki/EBCDIC</a> (Accessed: 31 July 2024).</li><li>Redpanda (no date b) <em>The streaming data platform for developers</em>, <em>Redpanda</em>. Available at: <a href="https://redpanda.com/">https://redpanda.com/</a> (Accessed: 31 July 2024).</li><li>Redpanda (no date a) <em>Redpanda connect: 220+ pre-built connectors</em>, <em>Redpanda</em>. Available at: <a href="https://redpanda.com/connect">https://redpanda.com/connect</a> (Accessed: 31 July 2024).</li><li>Gallego, A. (2024) <em>Redpanda Connect</em>, <em>Redpanda</em>. Available at: <a href="https://redpanda.com/blog/redpanda-connect">https://redpanda.com/blog/redpanda-connect</a> (Accessed: 31 July 2024).</li><li>Apache NiFi Registry (no date b) <em>Registry</em>, <em>Apache NiFi</em>. Available at: <a href="https://nifi.apache.org/projects/registry/">https://nifi.apache.org/projects/registry/</a> (Accessed: 31 July 2024).</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9ca864be3d58" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/zafin-integrate-orchestrate-io-and-apache-nifi-unlocking-the-potential-of-data-flow-automation-9ca864be3d58">Zafin Integrate &amp; Orchestrate (IO) and Apache NiFi: Unlocking the Potential of Data Flow Automation</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[BIAN Adoption at Zafin (Part 1)]]></title>
            <link>https://medium.com/engineering-zafin/bian-adoption-at-zafin-6cb116c59796?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/6cb116c59796</guid>
            <category><![CDATA[core-modernization]]></category>
            <category><![CDATA[bian]]></category>
            <category><![CDATA[banking-technology]]></category>
            <dc:creator><![CDATA[Engineering at Zafin]]></dc:creator>
            <pubDate>Tue, 14 May 2024 13:42:31 GMT</pubDate>
            <atom:updated>2025-11-17T14:37:21.870Z</atom:updated>
            <content:encoded><![CDATA[<p>By: <a href="https://medium.com/u/0883e2887995">Arno Hensbergen</a>, Principal Architect, <a href="https://medium.com/u/800c4bef44f4">John Mason</a>, Customer Engineering Head, <a href="https://medium.com/u/d5d9c8dc7954">Alok Sahi</a>, Chief Architect, <a href="https://medium.com/u/f07315459341">Shahir A. Daya</a>, Chief Technology Officer</p><h3>Introduction</h3><p>This article outlines Zafin’s adoption of the <a href="https://bian.org/">BIAN</a> framework and discusses how we utilized it to build a viable iteration of Zafin Agreements. It articulates conformance and explains divergence from the BIAN v11.0 standard. This article is the first of a series that puts our new BIAN inspired software and its APIs on display.</p><p>Zafin Agreements is a new software that bridges the gap between Enterprise Customer Data and an Enterprise Product Catalog. It provides a scalable and central system-of-reference for the full lifecycle of bank customer agreements.</p><h3>What is BIAN?</h3><blockquote><em>“The Banking Industry Architecture Network (</em><a href="https://www.vanharen.store/bian-edition-2019-a-framework-for-the-financial-services-industry?_ga=2.215053655.1993324615.1602254606-1646355235.1567431970"><em>BIAN</em></a><em>) is a global, not-for profit association of banks, solution providers, consultancy companies, integrators and academic partners with the shared aim of defining a semantic standard for the banking industry.</em></blockquote><blockquote><em>BIAN was formed in 2008 by a group of banks and solution providers. Other standards bodies, like </em><a href="https://www.iso20022.org/financial-repository"><em>ISO</em></a><em> and IFX, later joined.</em></blockquote><blockquote><em>BIAN’s expectation is that a standard definition of business functions and service interactions that describe the general construct of any bank will be of significant benefit to the industry”</em>.</blockquote><p>Zafin agrees with BIAN’s standards.</p><p>Upon landing on the <a href="https://bian.org/servicelandscape-12-0-0/index.html">BIAN reference model page</a>, the abundance of models can be overwhelming, but we utilized just the two models in red. Also <a href="https://bian.org/servicelandscape-12-0-0/views/view_51891.html">the Service Landscape Matrix view</a>, while daunting itself, is a handy tool to locate business functions and service domains with. Use Ctrl-f instead of the search bar on the top-right of the page.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*i7kX0RvfEUB0nByDxptoyQ.png" /><figcaption>Figure 1: BIAN Architecture Reference Model</figcaption></figure><p>If you browse from the Information Architecture Overview to the <a href="https://bian.org/servicelandscape-11-0-0/views/view_52432.html">Agreement BOM Diagram</a>, you’ll find the picture that has inspired Zafin Agreements the most.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*k5dKWhGZomEozbaU3u9KDQ.png" /><figcaption>Figure 2: BIAN Agreements BOM</figcaption></figure><p>In yellow are the primary <a href="https://bian.org/servicelandscape-12-0-0/object_28.html?object=64173">Business Objects</a> that make up Zafin’s <a href="https://bian.org/servicelandscape-11-0-0/object_10.html?object=65111">business domain</a>. The business objects in bright blue associate the primary objects. Ignoring the green sections for now, several important concepts stand out:</p><ol><li>An Account is not directly related to a Party, Agreement links the two.</li><li>An <a href="https://bian.org/servicelandscape-12-0-0/object_26.html?object=36783">Agreement</a> associates a Product to a Party via Agreement Involvement.</li><li>An <a href="https://bian.org/servicelandscape-12-0-0/object_25.html?object=33524">Arrangement</a> lives only within the context of an Agreement.</li><li>Agreements can be linked via Agreement_Agreement Relationships.</li></ol><p>These 4 concepts have been adopted as-is, in the Zafin Agreements design.</p><p>The green boxes depict a fifth important BIAN concept that we have embraced:</p><p>5. All BIAN Business Objects are of a Type.</p><p>BIAN uses Type Values (TVs) to classify instances of Business Objects with. We found this to be an elegant way to allow for bank-specific idiom, whilst retaining a strongly typed model.</p><p>The sixth adopted BIAN concept is the breakdown of business domains into <a href="https://bian.org/servicelandscape-12-0-0/object_29.html?object=58031">service domains</a>. We found the BIAN service domains to be too atomic to serve as the foundation for our software modules but:</p><p>6. All BIAN semantic APIs, for the service domains we have in scope, are easily recognizable, by any BIAN-aware bank.</p><p>The BIAN reference models are not without a few shortcomings. At times business concepts seem to be missed (i.e. product hierarchies). In other cases, Type Values are insufficient for the North American market, begging for more standardization by BIAN. This is why Zafin Agreements is still inspired by BIAN and not fully BIAN adept. Before we get into how the BIAN concepts have been applied, there is an important question to answer first; why adopt the BIAN standard?</p><h3>Why adopt BIAN?</h3><p>Where many banks are dissecting their monolithic estate to implement best-of-breed solutions to connect their digitally transformed channels with thin account management cores, these banks are increasingly adopting BIAN. Many of the larger North American banks have been BIAN members for years, no less than 22 new banks became a BIAN member last year. Banks believe BIAN to “<em>enable more efficient and effective development and integration of software solutions for and between banks”</em>. And rightfully so with <a href="https://www.canada.ca/en/department-finance/programs/consultations/2021/final-report-advisory-committee-open-banking.html">Open Banking regulations on the rise</a> and the integration of <a href="https://www.iso20022.org/">ISO</a>, out of the box.</p><p>Why would you as a banking engineer want to adopt the BIAN models? How much time has been sunk into endless conversations with clients on element definitions or allowed enumerations? How much more efficient would it be to not impede your design work for a couple of sprints, with a statement like this?</p><p><em>“While we await requirements, refer to </em><a href="https://app.swaggerhub.com/apis/BIAN-3/SalesProduct/11.0.0"><em>this API</em></a><em> for semantic guidance. These are objects that Zafin has harvested for </em><a href="https://bian.org/servicelandscape-11-0-0/views/view_52812.html"><em>this service domain</em></a><em> already, for you to amend or add to</em>”<em>. </em>Less conversations needed on interface specifications between engineers, “<em>lowers overall integration efforts significantly</em>” resulting in faster time to market.</p><p>The adoption of your software is all about the quality of your APIs. The success of your software is determined by your ease of integration and the delivered business value it will add. If there is a common vocabulary for all things banking and everybody in the industry speaks it, why invent another?</p><p>The Open Banking (OB) APIs are here to stay and entering governments are likely to adopt standards of maturing <a href="https://ec.europa.eu/commission/presscorner/detail/en/qanda_23_3544">government bodies</a>. There is a<em> “current</em> <em>need for more industry integration through the usage of open APIs</em>”. BIAN has the best coverage across banking business domains, with the inclusion of ISO (and ACTUS recently) to become the Open Banking glossary.</p><p>As with any standard, its legitimacy comes with its degree of adoption. While standards like ISO and <a href="https://www.fpml.org/">FPML</a> remain relevant, <a href="https://bian.org/deliverables/white-paper/implementing-bian-service-domains-using-the-ifx-business-message-specification/">IFX</a> and <a href="https://public.dhe.ibm.com/software/data/mdm/pdf/IFW_Poster_2006.pdf">IFW</a> fade away. For BIAN to <em>“support the adoption of more flexible business service sourcing models and enhance the evolution and adoption of third-party software”, </em>adopting BIAN should become a self-fulfilling prophecy with both banks and banking software vendors, to converge to a concept-of-one.</p><h3><strong>What is Zafin Agreements?</strong></h3><p>With the WHAT and WHY of BIAN explained, we touch on the WHAT of Zafin Agreements before we delve into its design. This is because for Zafin to adopt BIAN Service Domains (SDs), and its semantic APIs, we need to understand the scope of the service domains that Zafin manages and Zafin interacts with.</p><p>Overlaying BIAN service domains on the context of a bank interacting with Zafin SaaS, we would depict a <a href="https://c4model.com/#SystemContextDiagram">Context diagram</a> like this:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*yjDCR2JsYkRG9VVPULwPHA.png" /><figcaption>Figure 3: Zafin Agreements System Context Diagram</figcaption></figure><p>To understand our current state in terms of BIAN service domains, the following table shows some of the SDs we support through our software solutions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4PelNjqvviG_fezFzja1Gw.png" /><figcaption><em>Table 1: Service Domains supported by Zafin Agreements</em></figcaption></figure><p>The table suggests that we have built duplicate features into Zafin Agreements, which is partly true, we will explain that in a bit.</p><h4>Zafin Agreements Business Object Model</h4><p>This is Zafin’s interpretation of the BIAN Agreements BOM. Our Minimum Viable Product (MVP) implements this Entity Relationship Diagram (ERD) to the letter, it became our service domain model of sorts as well. The diagram articulates well we think, Zafin’s conformance to the first four BIAN inspired concepts.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JzLf4iSuAYWS9_r-feHSqw.png" /><figcaption><em>Figure 4: Zafin Agreements Business Object Model</em></figcaption></figure><h4><strong>Zafin Agreements APIs</strong></h4><p>To support concept 6 (our APIs are recognizable by BIAN-adept banks) we must first scope our BIAN Service Domains. The following BIAN SDs are in scope:</p><ol><li><a href="https://bian.org/servicelandscape-11-0-0/views/view_52812.html">Sales Product</a></li><li><a href="https://bian.org/servicelandscape-11-0-0/views/view_52896.html">Customer Products and Services</a></li><li><a href="https://bian.org/servicelandscape-11-0-0/views/view_53331.html">Customer Product And Service Eligibility</a></li><li><a href="https://bian.org/servicelandscape-11-0-0/views/view_52989.html">Party Reference Data Directory</a></li><li><a href="https://bian.org/servicelandscape-11-0-0/views/view_52492.html">Product Directory</a></li></ol><p>Because of the size of our team, we decided to merge domains 1, 2 &amp; 3 into Sales Product Agreement (SPA). Both directories (PRDD &amp; PD) are separate modules, loosely coupled to SPA. With scope in terms of BIAN semantic APIs now defined, let’s scope the endpoints within these APIs.</p><p>These are some of the endpoints we support in MVP1 of Zafin Agreements, they link to the BIAN semantic APIs on which they are based:</p><ul><li><a href="https://app.swaggerhub.com/apis/BIAN-3/SalesProduct/11.0.0#/CR%20-%20ProductandServiceAgreement">POST /salesProductAgreement/v1/productAndServiceAgreement/evaluate</a></li><li><a href="https://app.swaggerhub.com/apis/BIAN-3/CustomerProductsandServices/11.0.0#/CR%20-%20CustomerProductsAndServicesDirectoryEntry/Register">PUT /relationshipManagement/v1/customerProductsAndServices/{PRDD_id}/request</a></li><li><a href="https://app.swaggerhub.com/apis/BIAN-3/PartyReferenceDataDirectory/11.0.0#/CR%20-%20PartyReferenceDataDirectoryEntry">POST/partyReferenceDataDirectory/v1/{PRDD_id}/register</a></li><li><a href="https://app.swaggerhub.com/apis/BIAN-3/CustomerProductAndServiceEligibility/11.0.0#/CR%20-%20CustomerEligibilityAssessment">POST/relationshipManagement/v1/customerProductAndServiceEligibility/{PRDD_id}/evaluate</a></li><li><a href="https://app.swaggerhub.com/apis/BIAN-3/ProductDirectory/11.0.0#/BQ%20-%20SalesandMarketing/RetrieveSalesandMarketing">GET/productDirectory/v1/{PD_id}/salesAndMarketing/retrieve</a></li></ul><p>In the BIAN Sales Product SD for example we found semantic inconsistencies between the SD control record and the Agreements BOM. In early stages of our MVP, while constantly adding elements and entities, we found the translation from BOM to API control records, to be too cumbersome and less automate-able. We decided to stick to our Agreements BOM also for API payloads.</p><p>So why did we duplicate features of the Product Directory SD and the Product and Service Eligibility SD, within the new Zafin Agreements software?</p><p>For the <em>Product Eligibility</em> SD, we needed service-orchestration capabilities to fetch existing agreements. Like so adding more business value to the existing eligibility checks as our current software cannot orchestrate APIs across other Zafin software assets. We therefore implemented a BIAN “<a href="https://bian.org/wp-content/uploads/2020/10/BIAN-Semantic-API-Pactitioner-Guide-V8.1-FINAL.pdf">Legacy Wrapper</a>”<strong> </strong>pattern and we leverage <a href="https://temporal.io/">Temporal</a> for orchestration.</p><p>We also made a BIAN-based read copy from our existing Enterprise Product Catalog (EPC) and named it <em>Zafin</em> <em>Product Directory</em>. The existing EPC software has a <a href="https://martinfowler.com/dsl.html">DSL-driven development approach</a>. This approach works very well for quickly delivering custom product catalogs to banks, but the generated DB schema and its generic event publications make it more challenging to build new software on top it.</p><p>The idea here is to create a one common Zafin Product Directory data model to serve as a schema foundation for new solutions and as a highly resilient high performing read cache. An example would be the Product Explorer, <a href="https://zafin.com/studio/">coming soon</a>, that combines the bank product configurations with analytical (revenue) insights from <a href="https://zafin.com/zafin-data-fabric/">Zafin Data Fabric</a>.</p><h3>Conclusion</h3><p>We hope you found this article to be helpful. We are always learning, so if you have any suggestions or experiences adopting BIAN, please share them in the comments section. We love to hear and learn from others.</p><p>The next BIAN related article will be on our take to <a href="https://bian.org/servicelandscape-11-0-0/views/view_53579.html">BIAN business scenarios</a> and we’ll discuss to go less relational with our physical database and store most of the BOM in a <a href="https://www.freecodecamp.org/news/postgresql-and-json-use-json-data-in-postgresql/">JSONB</a> to not have to change our schemas when a bank asks us to store more data points.</p><h3>References</h3><ol><li><em>BIAN Organization Home</em> (no date) <em>BIAN</em>. Available at: <a href="https://bian.org/">https://bian.org/</a> (Accessed: 01 May 2024).</li><li><em>The ISO 20022 repository</em> (no date) <em>ISO20022</em>. Available at: <a href="https://www.iso20022.org/financial-repository">https://www.iso20022.org/financial-repository</a> (Accessed: 01 May 2024).</li><li><em>BIAN Architecture Overview Portal v.12.0</em> (no date) <em>InSite</em>. Available at: <a href="https://bian.org/servicelandscape-12-0-0/index.html">https://bian.org/servicelandscape-12-0-0/index.html</a> (Accessed: 01 May 2024).</li><li><em>BIAN Service Landscape V12.0 matrix view</em> (no date) <em>InSite</em>. Available at: <a href="https://bian.org/servicelandscape-12-0-0/views/view_51891.html">https://bian.org/servicelandscape-12-0-0/views/view_51891.html</a> (Accessed: 01 May 2024).</li><li><em>BIAN Agreement bom diagram</em> (no date) <em>InSite</em>. Available at: <a href="https://bian.org/servicelandscape-11-0-0/views/view_52432.html">https://bian.org/servicelandscape-11-0-0/views/view_52432.html</a> (Accessed: 01 May 2024).</li><li><em>BIAN Business Object</em> (no date) <em>Insite</em>. Available at: <a href="https://bian.org/servicelandscape-12-0-0/object_28.html?object=64173">https://bian.org/servicelandscape-12-0-0/object_28.html?object=64173</a> (Accessed: 01 May 2024).</li><li><em>BIAN Business Domain</em> (no date) <em>Insite</em>. Available at: <a href="https://bian.org/servicelandscape-11-0-0/object_10.html?object=65111">https://bian.org/servicelandscape-11-0-0/object_10.html?object=65111</a> (Accessed: 01 May 2024).</li><li><em>BAIN Agreement</em> (no date) <em>Insite</em>. Available at: <a href="https://bian.org/servicelandscape-12-0-0/object_26.html?object=36783">https://bian.org/servicelandscape-12-0-0/object_26.html?object=36783</a> (Accessed: 01 May 2024).</li><li><em>BIAN Arrangement</em> (no date) <em>Insite</em>. Available at: <a href="https://bian.org/servicelandscape-12-0-0/object_25.html?object=33524">https://bian.org/servicelandscape-12-0-0/object_25.html?object=33524</a> (Accessed: 01 May 2024).</li><li>Canada, D. of F. (2023) <em>Government of Canada — Final Report — Advisory Committee on Open Banking</em>, <em>Canada.ca</em>. Available at: <a href="https://www.canada.ca/en/department-finance/programs/consultations/2021/final-report-advisory-committee-open-banking.html">https://www.canada.ca/en/department-finance/programs/consultations/2021/final-report-advisory-committee-open-banking.html</a> (Accessed: 01 May 2024).</li><li>B<em>IAN Sales Product API Specification</em> (no date) <em>SwaggerHub</em>. Available at: <a href="https://app.swaggerhub.com/apis/BIAN-3/SalesProduct/11.0.0">https://app.swaggerhub.com/apis/BIAN-3/SalesProduct/11.0.0</a> (Accessed: 01 May 2024).</li><li><em>Financial products markup language</em> (no date) <em>FpML</em>. Available at: <a href="https://www.fpml.org/">https://www.fpml.org/</a> (Accessed: 01 May 2024).</li><li><em>Implementing Bian Service domains using the IFX Business Message Specification</em> (no date) <em>BIAN</em>. Available at: <a href="https://bian.org/deliverables/white-paper/implementing-bian-service-domains-using-the-ifx-business-message-specification/">https://bian.org/deliverables/white-paper/implementing-bian-service-domains-using-the-ifx-business-message-specification/</a> (Accessed: 01 May 2024).</li><li><em>The Information Framework (IFW)</em>. Available at: <a href="https://public.dhe.ibm.com/software/data/mdm/pdf/IFW_Poster_2006.pdf">https://public.dhe.ibm.com/software/data/mdm/pdf/IFW_Poster_2006.pdf</a> (Accessed: 01 May 2024).</li><li><em>4.3.1 Legacy Wrapping Approaches — Bian Semantic Api Practitioner guide V8.1</em>. Available at: <a href="https://bian.org/wp-content/uploads/2020/10/BIAN-Semantic-API-Pactitioner-Guide-V8.1-FINAL.pdf">https://bian.org/wp-content/uploads/2020/10/BIAN-Semantic-API-Pactitioner-Guide-V8.1-FINAL.pdf</a> (Accessed: 01 May 2024).</li><li><em>Temporal.io — Open source durable execution</em> (no date) <em>Open Source Durable Execution | Temporal Technologies</em>. Available at: <a href="https://temporal.io/">https://temporal.io/</a> (Accessed: 01 May 2024).</li><li><em>DSL Guide</em> (no date) <em>martinfowler.com</em>. Available at: <a href="https://martinfowler.com/dsl.html">https://martinfowler.com/dsl.html</a> (Accessed: 01 May 2024).</li><li><em>Zafin Studio: Your gateway to innovation in banking</em> (2024) <em>Zafin</em>. Available at: <a href="https://zafin.com/studio/">https://zafin.com/studio/</a> (Accessed: 01 May 2024).</li><li><em>Zafin Data Fabric</em> (2024) <em>Zafin</em>. Available at: <a href="https://zafin.com/zafin-data-fabric/">https://zafin.com/zafin-data-fabric/</a> (Accessed: 01 May 2024).</li><li>Oyama, F. (2024) <em>PostgreSQL and JSON — how to use JSON data in PostgreSQL</em>, <em>freeCodeCamp.org</em>. Available at: <a href="https://www.freecodecamp.org/news/postgresql-and-json-use-json-data-in-postgresql/">https://www.freecodecamp.org/news/postgresql-and-json-use-json-data-in-postgresql/</a> (Accessed: 01 May 2024).</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6cb116c59796" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/bian-adoption-at-zafin-6cb116c59796">BIAN Adoption at Zafin (Part 1)</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building Embedded Analytics with Cube]]></title>
            <link>https://medium.com/engineering-zafin/building-embedded-analytics-with-cube-9f0ef5d9af40?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/9f0ef5d9af40</guid>
            <category><![CDATA[embedded-analytics]]></category>
            <dc:creator><![CDATA[Engineering at Zafin]]></dc:creator>
            <pubDate>Tue, 27 Feb 2024 18:45:46 GMT</pubDate>
            <atom:updated>2024-02-27T18:44:59.833Z</atom:updated>
            <content:encoded><![CDATA[<p>By: <a href="https://medium.com/u/09840c981a44">Jae Li</a>, Software Engineer Co-op, <a href="https://medium.com/u/2e2b479abbc2">Chandoksahej</a>, Software Engineer Co-op, <a href="https://medium.com/u/eba240e23f76">Rutvij Sharma</a>, Sr. Data Engineer, <a href="https://medium.com/u/5be407fbb149">Marcin Zegarmistrz</a>, Technical Product Manager, <a href="https://medium.com/u/67ecb435e29a">Adnan Haider</a>, SVP Analytics</p><p>Modern analytics workflow requires embedded analytics where reports, dashboards, models, and data visualizations can be accessed through a single interface. The goal of embedded analytics is to bring analytics as close to business operations as possible, reducing the amount of unnecessary context-switching between application interfaces. Conventional business intelligence (BI) solutions introduce friction in analytics operations since analytics and operations are configured as separate processes. For example, a workflow that consists of designing a product offering and gathering information about client behaviors requires two different workspaces, since they are imagined as categorically different processes: one operational and the other analytical. The former is performed through an internal tool and the latter through BI software. The purpose of embedded analytics is to bridge this gap between the operational and analytical processes by bringing analytics into the familiar context of operational workflow. With embedded analytics, the same workflow of designing a product offering can be redefined as a multi-step form where for each condition the user sets, a dynamic chart will display the clientele breakdown accordingly. To enable embedded analytics, a performant and easy-to-use data visualization solution is a key requirement.</p><p>In application development, building data visualizations is brittle and time-consuming. First, data has to be prepared based on the data series that needs to be rendered on the front-end, and then an API needs to be implemented to assemble and return the data series as <a href="https://www.json.org/json-en.html">JSON</a>. Finally, the front-end needs to unmarshall the JSON and bind it to the charting libraries. This is already labor-intensive, but it gets worse: If we want to change the charts on the front end, perhaps to go from a daily aggregate to a weekly aggregate, then the data model, API, and front end all need to be changed.</p><p>The cumbersome process of building data visualizations is only one of many challenges. A bigger issue is the inconsistencies that arise when multiple downstream applications define their versions of the same metrics. In stand-alone BI solutions, commonly used metrics are defined internally. As a result, other downstream applications must define their versions of the metrics. Managing metric definitions becomes a task in itself. To address the difficulties that arise in building data visualizations, we introduce a semantic layer in the data pipeline, powered by Cube.</p><h3><strong>Semantic Layer</strong></h3><p>A semantic layer in the data stack serves as a central repository of metric definitions. The semantic layer is where raw data are made intelligible for analytics use cases. Consider the typical demands of business reporting: a sales VP would likely look at Key Performance Indicators (KPIs) like close rates, deal velocities, and transactions by segment, region, and team. These KPIs are metrics with fixed definitions to measure business operations. Other examples of metrics include aggregations that define categories and segmentations of data, such as active users<em> </em>and business regions. Seemingly crisp segmentations in fact leave many ambiguities if analysts define them on the fly each time. Do the weeks start on Sunday or Monday? Are British customers part of the EU jurisdiction? While some of these definitions are part of the data table, many are further aggregations on top of the existing information. The semantic layer provides a central location where metrics are defined once and for all for downstream applications. The layer also enables implementation of data controls by supporting fine-grained access to metrics.</p><p>A semantic layer provides data modeling for the underlying database, simplifying the data provisioning for making visualizations. As mentioned above, provisioning data for visualizations is an arduous process. Most modern applications use an Object-Relational Mapper (ORM) that maps underlying data representations in databases to those in object-oriented programming to allow programmatic interactions with databases instead of SQL. While ORMs abstract away SQL queries, each downstream application must implement its ORMs. The semantic layer provides a universal data modeling layer that is independent of downstream data applications. Downstream applications no longer need to build their ORMs. Instead, they query the database through the data representations, including metric definitions, defined in the semantic layer. Internally, the semantic layer transforms queries and metric requests into SQL queries. This architectural shift is depicted below, where data modeling and metric definitions move from individual applications to the central location of the semantic layer. Because the semantic layer provides the metric definitions for analytics use cases, it is also referred to as Headless BI, where the headless means the lack of a graphic interface or the capacity for rendering visuals.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/652/1*JF6xIP5_pPk7yYqUp-Xpvg.png" /><figcaption>Figure 1: Architecture of the Semantic Layer, Source: Benn Stancil, The missing piece of the modern data stack.</figcaption></figure><h3><strong>Why We Chose Cube as Our Semantic Layer</strong></h3><p>At Zafin Analytics, we use a semantic layer, <a href="https://cube.dev/">Cube</a>, to manage our metric definitions and accelerate product development in embedded analytics. The semantic layer is part of the <a href="https://zafin.com/zafin-data-fabric/">Zafin Data Fabric</a> that transforms and provisions data for analytics use cases. We initially started to investigate semantic layer libraries because we needed to build embedded analytics in the analytics product suite. The existing development process for making visualizations is time-consuming since each chart requires a REST endpoint and a dedicated microservice. We are looking for an embedded analytics solution to accelerate the development process. And since our product suite has several products that share the same underlying data source, we need a semantic layer to define metrics and data models once and for all. Another important requirement in our selection process is performance. We would like to cache frequent queries to accelerate query response and allow scaling as the user activity grows.</p><p>Since the semantic layer is relatively new in the data engineering toolkit, the options for semantic layer products are constrained. BI tools such as Power BI still dominate the market, and major vendors support embedding dashboards in custom applications. For Zafin’s use cases, using BI tools for embedded analytics feels like overkill. Also, as mentioned above, corporate BI products are black boxes with metric definitions tied to the product. Therefore, we mainly surveyed semantic layers that can serve as a headless BI component and integrate with our existing tech stack such as dbt’s <a href="https://www.getdbt.com/product/semantic-layer">semantic layer</a>, <a href="https://www.atscale.com/">Atscale</a> and <a href="https://www.stardog.com/">Stardog</a>.</p><p>We landed on Cube or CubeJS as our semantic layer of choice. Built with performance in mind, Cube is a popular open-source semantic layer built in Rust. We chose Cube as our semantic layer because it offers the following advantages:</p><ul><li><strong>Support for complex queries and visualizations</strong>: Cube accelerates the data provisioning process for visualizations. Instead of making tailored APIs for each chart, data provisioning in Cube is achieved through Cube queries written in JavaScript. Managing charts no longer requires backend changes. Instead, one only needs to add the charting component along with the Cube queries to fetch the underlying data source. In addition, Cube also provides out-of-box support for building visualizations through its development mode and React library.</li><li><strong>Caching</strong>: Caching is a critical part of any large-scale data-intensive applications that help optimize performance and reduce cloud data storage costs. Cube provides two forms of caching, in-memory cache and materialized queries called pre-aggregations. When Cube receives a query, it will search for an existing cached query. Using cached queries significantly accelerates the query speed. The pre-aggregations are refreshed on a customized schedule.</li><li><strong>Self-hosted and horizontal scaling</strong>: Cube.dev offers open-source self-hosted and managed solutions. Unlike its closed-source competitors, Cube is under the Apache License 2.0. Cube gives us the flexibility to customize and self-host our Cube instance. As a self-hosted solution, Cube also provides options for horizontal scaling, enabling expansion and resource optimization as data needs evolve. Cube also has a managed offering which we may use in the future to lower our operational overhead.</li></ul><h3><strong>Building Metrics at Zafin</strong></h3><h4><strong>Design user-defined metrics with Cube data models</strong></h4><p>As a pilot project, we integrated Cube with our existing application, <a href="https://zafin.com/studio/">Zafin Studio</a>, to build data visualizations. Our visualization use cases are centered around the notion of user-defined metrics. An example of user-defined metrics is the <em>monthly sum of average deposit balances for that exceeds $2000 at the account level. </em>After some research, we found that we can leverage metric definitions in Cube data models to build these user-defined metrics. In Cube, we use <em>measures</em> to define common aggregations that form the building blocks of user-defined metrics in Zafin Studio. Each table in the underlying database is mapped to a data model file. For the balances table, a model file can look like below, where we define aggregations, such as sum, minimum, and maximum on the column <em>average_balance</em>. In Cube, these measures can grow more complicated as the corresponding SQL definition grows more complex.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/30b24f2fb437bda4201496fafb70783c/href">https://medium.com/media/30b24f2fb437bda4201496fafb70783c/href</a></iframe><p>Based on the data model, the user-defined metric can be composed as a Cube query shown below. In the query, we specify the aggregation <em>average_balance_sum</em> in the balances table, with the month as our granularity. We also added two filters, one on <em>average_balance</em> and another on <em>customer_id</em>, to our search. Since these queries are composed on the client side, building visualizations based on the metric becomes a matter of composing queries based on Cube data models. Here, the team has made an architectural decision not to hardcode user-defined metrics as Cube <em>measures</em>, which sit on the server side, but convert them into Cube queries instead. This decision is based on several considerations. In terms of operation, updating data models on the server based on user activities is in general not advised since the server should be stateless according to the <a href="https://developer.ibm.com/articles/ws-restful/">RESTful principle</a>. In our case, updating data models based on unpredictable user activities is impractical. In terms of privacy, user data should not be exposed as data models for all users of the Cube server.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/6d62aa7a21905bb4785d4cf8fb3c4d1b/href">https://medium.com/media/6d62aa7a21905bb4785d4cf8fb3c4d1b/href</a></iframe><h4><strong>Translate data representations to Cube queries</strong></h4><p>To integrate Cube with Zafin Studio, we also built a few utility microservices, the most important being a microservice that translates the internal representation of user-defined metrics to Cube queries. In Zafin Studio, there is a one-to-one relationship between user-defined metrics and Cube queries. The user-defined metrics have an internal data model that represents the example metric as the JSON object below. The microservice is responsible for converting the internal representation of user-defined metrics to Cube queries.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/69016c1e87d53c0ff01464081e501ac8/href">https://medium.com/media/69016c1e87d53c0ff01464081e501ac8/href</a></iframe><h4><strong>Allow clients to query Cube through a dedicated API</strong></h4><p>In addition to web application integration, we built a client-facing API to allow users to query user-defined metrics. We designed the API based on the client’s need to streamline data access and increase transparency. Through this API, users gain direct access to the dataset associated with the metrics they created through Zafin Studio. The client-facing API also gives users more flexibility to specify the time range and interval.</p><iframe src="" width="0" height="0" frameborder="0" scrolling="no"><a href="https://medium.com/media/15fe57e54e376bd3abaf143a19e71392/href">https://medium.com/media/15fe57e54e376bd3abaf143a19e71392/href</a></iframe><p>Together, there are multiple points of data access for analytics consumers through Cube, as shown in the diagram below.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*q7OcyIY5UjJ1rziutriIeA.png" /><figcaption>Figure 2: Semantic Layer for Multiple Points of Data Access</figcaption></figure><h4><strong>Build CI for production-grade Cube cluster</strong></h4><p>Moving Cube to production and integrating with Zafin’s CICD pipeline is another major endeavor in the project. To meet the performance demand, we choose to deploy Cube in Zafin’s Azure Kubernetes cluster. The Kubernetes cluster consists of two main components, the Cube API and Cubestore. As depicted in the diagram below, the Cube API handles incoming requests and decides whether the query exists in the cache. If so, it queries the Cubestore for the cached query. Otherwise, it fetches the query from the database and saves the query to Cubestore.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/936/1*x7yghc6xrOqHBwcE_lu2Gw.png" /><figcaption>Figure 3: Cube API Kubernetes Architecture</figcaption></figure><p>In addition to the Kubernetes cluster, we are also building a few components to streamline the DevOps process:</p><ul><li>A script to generate Cube data models based on database changes</li><li>Enable rolling updates to eliminate server downtime</li></ul><h3><strong>Conclusion</strong></h3><p>As an adaptive semantic layer, Cube made it easy made it easy for teams to use their existing data warehouse as a single source of truth, allowing them to serve consistent metrics to both enterprise customers and internal stakeholders. At Zafin, we chose Cube as our semantic layer to build embedded analytics, letting us shrink the time to embed visualizations from four person days to just one. As we progress in Cube implementation, we plan to expand into incremental pre-aggregations to leverage Cube’s powerful caching features and introduce Cube to other products at Zafin.</p><h3><strong>References</strong></h3><ol><li><em>Introducing JSON</em>. Available at: <a href="https://www.json.org/json-en.html">https://www.json.org/json-en.html</a> (Accessed: February 16, 2024)</li><li><em>The Semantic Layer for every data app</em>. Available at: <a href="https://cube.dev/">https://cube.dev/</a> (Accessed: February 16, 2024)</li><li><em>Semantic Layer.</em> Available at: <a href="https://www.getdbt.com/product/semantic-layer">https://www.getdbt.com/product/semantic-layer</a> (Accessed: February 16, 2024)</li><li><em>Semantic Layer Solution — BI &amp; Data &amp; Analytics Software</em>. Available at: <a href="https://www.atscale.com/">https://www.atscale.com/</a> (Accessed: February 16, 2024)</li><li><em>The Enterprise Knowledge Graph Platform</em>. Available at: <a href="https://www.stardog.com/">https://www.stardog.com/</a> (Accessed: February 16, 2024)</li><li><em>Introduction to RESTful Web services — IBM Developer.</em> Available at: <a href="https://developer.ibm.com/articles/ws-restful/">https://developer.ibm.com/articles/ws-restful/</a> (Accessed: February 16, 2024)</li><li>Stancil (2021) <em>The missing piece of the modern data stack. </em>Available at: <a href="https://benn.substack.com/p/metrics-layer?s=r">https://benn.substack.com/p/metrics-layer</a> (Accessed: Feb. 22, 2024)</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=9f0ef5d9af40" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/building-embedded-analytics-with-cube-9f0ef5d9af40">Building Embedded Analytics with Cube</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Quantifying our benefits of using a Blue-Green Delivery strategy]]></title>
            <link>https://medium.com/engineering-zafin/quantifying-our-benefits-of-using-a-blue-green-delivery-strategy-66f3d808d966?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/66f3d808d966</guid>
            <category><![CDATA[cloud]]></category>
            <category><![CDATA[devsecops]]></category>
            <category><![CDATA[cicd]]></category>
            <dc:creator><![CDATA[Engineering at Zafin]]></dc:creator>
            <pubDate>Thu, 25 Jan 2024 15:05:52 GMT</pubDate>
            <atom:updated>2024-01-25T15:05:38.093Z</atom:updated>
            <content:encoded><![CDATA[<p>By: <a href="https://medium.com/u/d662a5781522">Pramod K</a>, Associate Director, SaaS Customer Service; <a href="https://medium.com/u/2291a9eb9981">Matt Hefford</a>, Head of Cloud Services; <a href="https://medium.com/u/ce628ee84a47">Jijoe Vurghese</a>, Head of Platform Engineering.</p><h4><strong>Introduction</strong></h4><p>The Apple iPhone, introduced in 2007, caused a seismic shift in our expectations of software. Have you noticed that we’ve come to expect frequent updates to our apps? Furthermore, this expectation leads us to assume (rightly or not) that an infrequently updated app is abandonware. This expectation extends to SaaS products and platforms.</p><p><a href="https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance">Deployment frequency</a> is one of the four measures of organization performance identified by Google’s longest-running research by the (<a href="https://dora.dev/">DORA</a>) team. However, teams must balance deployment speed with system availability.</p><p>Continuous Delivery is a crucial tenet of lean, agile value delivery while maximizing system uptime. As <a href="https://martinfowler.com/bliki/ContinuousDelivery.html">Martin Fowler</a> put it succinctly, “Continuous Delivery is a software development discipline where you build software in such a way that the software can be released to production at any time.”</p><p>Banking regulations require explicit customer acceptance and approvals for changes to products. Zafin continuously delivers our SaaS product updates to customer validation environments pending customer acceptance. Subsequently, “continuous” delivery techniques complete the last-mile delivery into production environments.</p><p>We have several tools in the tool chest to achieve Continuous Delivery, including <a href="https://martinfowler.com/bliki/BlueGreenDeployment.html">blue-green deployments</a>, <a href="https://martinfowler.com/bliki/CanaryRelease.html">canary releases</a> and <a href="https://martinfowler.com/articles/feature-toggles.html">feature toggles</a>. In the fast-paced world of software development, deploying updates and new features to production environments requires careful planning to avoid downtime and potential service disruptions.</p><p>Blue-Green Deployment has emerged as a powerful strategy that enables organizations to release software changes while maintaining continuous service. As we continue our <a href="https://medium.com/engineering-zafin/kustomize-your-kubernetes-deployment-1742e518139e">GitOps</a> journey, we will dive into the benefits of Blue-Green deployment and how it is effectively implemented in Zafin to ensure smoother and more reliable software releases.</p><h4><strong>What is Blue-Green Deployment?</strong></h4><p>Blue-Green Deployment is a software deployment strategy used in the field of DevOps and continuous delivery to minimize downtime and risk during the release process of a software application or service. The primary goal of this approach is to ensure that the latest version of the application is deployed and tested thoroughly before it is made available.</p><p>In a Blue-Green Deployment, two identical production environments are maintained, each with its own set of resources, and infrastructure.</p><h4><strong>Case Study on what and how we did it in Zafin</strong></h4><p>Zafin’s cloud deployment architecture on Azure was lacking Blue-Green deployment capability. This resulted in</p><ul><li>Service non-availability/downtimes during platform updates and application deployments.</li><li>Uncertainty around downtime required for maintenance.</li><li>Pressure on deployment managers to execute the maintenance activity in a stringent, contractually agreed maintenance window.</li></ul><p>The significance of 24/7 service availability increased when Zafin’s clients moved away from batch mode processing to more of real time data processing via APIs and Kafka events.</p><p>To address the challenges and changing needs, we decided to migrate to a modern, cloud-native infrastructure that supports Blue-Green Deployment. The goals are, achieve zero downtime during deployments and updates, improve application performance, and enhance overall experience.</p><p>Figure 1 illustrates our deployment process.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*4Nwft7-PiNvW-WOoOuNbIw.png" /><figcaption>Figure 1: Our Deployment Process</figcaption></figure><ol><li>The existing production application runs in the Blue environment, serving current traffic.</li><li>In the event of a new application version release/upgrade, an identical Green environment is provisioned in the existing Kubernetes cluster.</li><li>Traffic routing is managed by Azure Traffic Manager (Global DNS Load Balancer), allowing seamless switching between Blue and Green environments without impacting availability.</li><li>The basic sanity test of the application will be done in the Green environment.</li><li>Once the Green environment is deemed stable, the traffic switch in the Azure Kubernetes platform will be initiated, directing incoming traffic to the Green environment.</li><li>The Green environment becomes the new production (Blue) environment.</li></ol><p><strong>Pre-Requisites</strong></p><ol><li>Ensure that the following roles have been configured and are active before the deployment starts:</li></ol><p>a. Azure Kubernetes Service RBAC Admin</p><p>b. Azure Kubernetes Service Contributor Role</p><p>2. Enable project access to the Azure DevOps pipeline.</p><p><strong>Pre-Deployment Steps:</strong></p><ol><li>Perform a sanity check on the Application UI and API availability.</li><li>Take appropriate data/config map backups.</li><li>Review the below steps with the Cloud Engineering team</li></ol><p>a. Infra Sizing</p><p>b. Confirm that the environment is running the latest Kubernetes version.</p><p>c. The migration path is correctly configured.</p><p><strong>Deployment Steps</strong></p><p>1. Current state</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/448/1*hOUxNC54zhezoTg8DYrb9Q.png" /></figure><p>2. Terraform changes to the below configuration:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/464/1*cy783pfFd7dEydA4QCYHiA.png" /></figure><ul><li>This will ensure the Green pods are up and running while the traffic is still being served by the Blue.</li><li>Compare the config maps and docker images with the Blue to ensure that all the properties are in sync. Any missing properties are to be added to the green pods.</li></ul><p>3. Run a quick check to ensure the Application UI/APIs are available for the Green pods by using the Traffic manager.</p><p>4. Run the implementation specific DB scripts, deploy implementation changes to the Green pods and ensure the execution is successful.</p><p>5. Perform all the necessary sanity checks on the Green deployment (Application UI access, API connectivity, etc.).</p><p>6. Run the ‘Phase 3’ pipeline, that will switch the traffic from Blue to Green pods, while the Blue will still be up and running. A UI/API check is mandatory here to ensure that post the switch, all services are up and running.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/464/1*zj4V0IJe-UxIZbrI958HrA.png" /></figure><p>7. Finally, run the ‘phase 4’ pipeline that will scale down all the Blue pods. Post this step, there will only be Green pods. The following is the pipeline configuration for Phase 4:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/446/1*lE18-w01j2BLLhrBBOSGRw.png" /></figure><p>Perform a UI/API sanity check and check for any downtime during the switch over process.</p><h4><strong>The Benefits</strong></h4><ul><li>Fully Automated Deployment: With the cloud-native infrastructure in place, we could set up a robust Continuous Integration and Continuous Deployment (CI/CD) pipeline using Azure DevOps. The CI/CD pipeline automated the entire deployment process, which enabled the deployment team to push updates to these environments effortlessly. Kubernetes orchestrated the deployment process, ensuring consistency and scalability across the application’s life cycle.</li><li>Improved Application performance: Auto scaling was implemented in the Kubernetes cluster to address the dynamic user requests/load. With auto scaling feature, the infrastructure could dynamically adjust its resources based on demand. This eliminated the need for manual intervention during traffic fluctuations, improving application performance.</li><li>24x7 Service availability: Azure’s managed services efficiently handled infrastructure patch upgrades without any downtime for the customer’s application. By leveraging managed services, such as Azure Kubernetes Service (AKS), Zafin could focus on building and deploying their application while Azure took care of underlying infrastructure updates and maintenance.</li></ul><h4><strong>Lessons Learned</strong></h4><ol><li>Communication and Collaboration: Successful migration to Blue-Green technology necessitates close collaboration between Product, Engineering, Operations, and other stakeholders. Effective communication is crucial to keep everyone informed about the deployment process, potential challenges, and progress.</li><li>Embracing Cloud-Native Solutions: Migrating to Blue-Green technology often involves leveraging cloud-native solutions and services, which offers greater flexibility, scalability, and automation capabilities. Embracing cloud-native practices can lead to substantial improvements in application management and deployment efficiency.</li><li>Training and Skill Development: The transition to Blue-Green technology requires upskilling or retraining the operations and deployment teams. Ensuring that the teams are proficient in managing the new environment and its tools will contribute to a smoother deployment process.</li><li>Continuous Improvement: Adopting Blue-Green technology should not be considered as a one-time event. The learning here is that one should continually assess the deployment processes, identify areas for improvement, and iterate on the practices to further enhance efficiency and reliability.</li><li>Compliance and Security: As with any technology migration, it is critical to ensure the compliance and secrutiy measures are maintained during the transition. One should validate that the Blue-Green environment meets all necessary compliance standards and security requirements.</li></ol><p>By learning from these lessons and continuously refining the practices, we can successfully make the shift to Blue-Green technology and unlock the benefits of reduced downtime, improved reliability, and enhanced user experiences.</p><h4><strong>Conclusion</strong></h4><p>By migrating to a cloud-native infrastructure with Blue-Green Deployment support and leveraging Kubernetes services on Azure, we were able to successfully transform the application release process. The implementation enabled us to achieve higher availability, scalability, and agility, while also improving the overall reliability and performance of the implementation.</p><h4><strong>References</strong></h4><ol><li>Fowler, M. (2010) <em>Bliki: Blue green deployment</em>, <em>martinfowler.com</em>. Available at: <a href="https://martinfowler.com/bliki/BlueGreenDeployment.html">https://martinfowler.com/bliki/BlueGreenDeployment.html</a> (Accessed: 16 January 2024).</li><li>Fowler, M. (2013) <em>Bliki: Continuous delivery</em>, <em>martinfowler.com</em>. Available at: <a href="https://martinfowler.com/bliki/ContinuousDelivery.html">https://martinfowler.com/bliki/ContinuousDelivery.html</a> (Accessed: 16 January 2024).</li><li>Hodgson, P. (2017) <em>Feature toggles (aka feature flags)</em>, <em>martinfowler.com</em>. Available at: <a href="https://martinfowler.com/articles/feature-toggles.html">https://martinfowler.com/articles/feature-toggles.html</a> (Accessed: 16 January 2024).</li><li>Portman, D.G. (2020) <em>Use four keys metrics like change failure rate to measure your devops performance | google cloud blog</em>, <em>Google</em>. Available at: <a href="https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance">https://cloud.google.com/blog/products/devops-sre/using-the-four-keys-to-measure-your-devops-performance</a> (Accessed: 16 January 2024).</li><li>Sato, D. (2014) <em>Bliki: Canary release</em>, <em>martinfowler.com</em>. Available at: <a href="https://martinfowler.com/bliki/CanaryRelease.html">https://martinfowler.com/bliki/CanaryRelease.html</a> (Accessed: 16 January 2024).</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=66f3d808d966" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/quantifying-our-benefits-of-using-a-blue-green-delivery-strategy-66f3d808d966">Quantifying our benefits of using a Blue-Green Delivery strategy</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Building with AI (not for AI)]]></title>
            <link>https://medium.com/engineering-zafin/building-with-ai-not-for-ai-fe59bd7d4627?source=rss----c7e6f07fd0---4</link>
            <guid isPermaLink="false">https://medium.com/p/fe59bd7d4627</guid>
            <category><![CDATA[genai]]></category>
            <category><![CDATA[innovation]]></category>
            <category><![CDATA[ai]]></category>
            <category><![CDATA[engineering]]></category>
            <dc:creator><![CDATA[Engineering at Zafin]]></dc:creator>
            <pubDate>Fri, 22 Dec 2023 21:18:20 GMT</pubDate>
            <atom:updated>2023-12-22T21:18:07.554Z</atom:updated>
            <content:encoded><![CDATA[<p>By: <a href="https://medium.com/u/db02cbe174bd">Branavan Selvasingham</a>, VP, Head of AI; <a href="https://medium.com/u/461a08ff1f34">Jake Irwin</a>, AI — Software Engineer; <a href="https://medium.com/u/62da95987550">Melissa Valdez</a>, AI Lead Consultant; <a href="https://medium.com/u/f07315459341">Shahir A. Daya</a>, Chief Technology Officer; <a href="https://medium.com/u/931364226487">Charbel Safadi</a>, Group President</p><p>In this article, we will discuss <a href="https://zafin.com">Zafin’s</a> approach to AI, using <a href="https://zafin.com/studio/">Zafin Studio’s</a> Product &amp; Pricing Index (PPI) as a focal point. At its core, PPI is a global banking data aggregation tool, with the aim to provide our clients with easy access to the global banking landscape and assist them in formulating new product propositions.</p><p>To achieve this ambitious goal, we’re leveraging AI in both the preparation of the index (a back-end data transformation pipeline); and as a new medium for interaction with the index (a channel-agnostic <a href="https://en.wikipedia.org/wiki/Natural_user_interface">Natural User Interface or NUI</a> experience).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*M6YsCfkHQ5R3E38iR1w1Kg.png" /><figcaption>Figure 1: Zafin Studio’s Product &amp; Pricing Index (PPI) and Zafin Copilot</figcaption></figure><h4><strong>The Effects of Democratized AI (or A Primer on AI Data Transformation Pipelines)</strong></h4><p>A by-product of the overall industry’s mission to democratize AI is the increased accessibility to capabilities that historically took entire organizations to achieve. We’re at a point where these capabilities can be used as foundational elements — that is, they enable us to supercharge our tools without getting distracted from our core focus of banking modernization.</p><p>Index preparation and maintenance is a particularly nuanced challenge that requires an understanding of the domain space at a micro and macro level. There are many variations to how banking products are structured; how features are packaged; how geographies are categorized; and yet, there is a connective consistency throughout all of them. The challenge is in recognizing and giving weight to these subtle variations in structure and values; and simultaneously, standardizing and normalizing down to a consistent index. Such an index will allow for comparisons across products, generalizations on trends, and the distillation of meaningful insights.</p><p><a href="https://en.wikipedia.org/wiki/Large_language_model">Large Language Models (LLMs)</a> are well suited for this challenge. The AI powered data transformation pipeline (shown in Figure 1) starts with the scraping of 200 financial institutions which are stored into a blob store. This raw text is cleansed, resized, and chunked as needed to fit into <a href="https://azure.microsoft.com/en-us/blog/introducing-gpt4-in-azure-openai-service/">GPT-4</a>’s context window and to improve the performance of the pipeline by feeding GPT-4 only relevant information. The blobs of text are processed by a chain of LLM prompts. The outputs are essentially database insert suggestions consisting of all the features, rates and fees for a particular product.</p><p>The validation process of each suggestion is a bit of an art. First we filter for hallucinations and volatility by checking for consistency in the database insert suggestions across identical runs (the exact number of identical runs is something that fluctuates). Then, we look for variations in column values across suggestions using multiple sources for the same product (i.e. webpage vs. PDF). During this multi-source merge process, we automatically fill in any non-conflicting but missing fields that were not available from one source but were observable in the other. This gives us a final unvalidated product profile merged from multiple runs per available source.</p><p>Then, an automated flagging process creates tasks for human review that highlight conflicts between sources in the column value suggestions. These conflicts are placed higher in priority while other due diligence validation tasks are placed lower in priority. The human review process takes time and may seem contrary to an AI-driven approach, but it is in fact a core pillar of our approach to AI: human in the loop.</p><p>Once the validation tasks are complete, the unvalidated data is moved to a validated database. We create an intentional gap between this database and the actual production database which serves more as a host for static tables rather than any real-time index preparation activities. Thus, Zafin Copilot and any user accessing the Product &amp; Pricing Index application can easily browse a standardized schema that compresses the global banking landscape.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*VO7kF3j4SYNj9kz_oMmcaw.png" /><figcaption><em>Figure 2: AI powered Data Transformation Pipeline</em></figcaption></figure><h4><strong>Widening the Accessibility Aperture with NUI</strong></h4><p>The technology space is undergoing a tectonic shift in how users interact with platforms. Historically, with the entry of each new paradigm in user interface, we’ve seen a massive increase in the accessibility of capabilities and the diversity of users that the platform serves. Consider the shift from terminal / command-line user interfaces (TUIs) to interactive point-and-click graphical user interfaces (GUIs). This shift ignited a universal transformation across industries where the power of computing transcended from a niche skill set to a digital revolution.</p><p>Similarly, another massive increase in accessibility to capabilities is happening with the advent of mainstream natural user interface (NUI), primarily ushered in by <a href="https://openai.com">OpenAI</a>. It is in alignment with this coming shift in user behaviour, experience expectation, and greater accessibility to capabilities, we have embarked on the journey of Zafin Copilot.</p><p>Zafin Copilot is both a knowledge assistant and an agent of action to support our banking users. We want to enable a conversational interface that answers relevant banking product questions such as:</p><ul><li>What are the current trends in banking products, and what are the demands in the market?</li><li>What products and features are offered by our competitors?</li><li>How can we adjust pricing models to maximize profitability — without sacrificing competitiveness?</li></ul><p>Zafin Copilot can understand and decompose high-level intent from the user and turn questions into actionable steps. It can execute those tasks by forming queries on the Product &amp; Pricing Index and interpreting the results.</p><p>It is designed with specific instruction sets on understanding the Index’s schemas, including the meaning behind various data and relevant validation steps. It generates dynamic context based on the query, enabling it to respond in a meaningful way to a wide array of intents. We’ve ensured that it stays focused on the domain and does not stray too far away from its enterprise context. Though we’ve put in place definitive constraints on it, we’re noticing it can come up with approaches which do not have any supporting tangential or related examples given by us. This is because our design lets the copilot first figure out ‘how should I approach this’ and keeps the human in the flow for confirmation of approach. This is the most exciting part. Lastly, it has access to full-functionality REST APIs, ensuring Zafin Copilot has scalable, flexible, and lightweight access to up-to-date information across the platform. It is through this that Zafin Copilot can become a cross-product engine that permeates across our product platform.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*YR6nL4uetxZ7kMdU9kPzOA.png" /><figcaption><em>Figure 3: Zafin Copilot Architecture</em></figcaption></figure><h4><strong>Our Guiding Principles for Deploying AI</strong></h4><p>As Zafin deploys AI capabilities, three key principles guide our development activities:</p><ol><li><strong>Consistency and accuracy </strong>— Responses must be consistent, accurate, derived, and explainable based on an explainable process.</li><li><strong>Acceleration and expansion </strong>— We want to thoughtfully expand the landscape of information, knowledge, and capabilities available to more users while meeting them where they are.</li><li><strong>Human in the loop </strong>— always. We are committed to always have a human review and validate activities that ensure quality and reliability.</li></ol><p>With these principles in mind, we can move forward with speed and determination into exciting and unfamiliar territory.</p><h4><strong>Challenges of Today</strong></h4><p>A feature of working on this frontier is constantly solving for novel technical challenges.</p><p>For example, initial token limits prevented sending all available context to the generative AI model with each call, so we had to intelligently select and supply access to the right information at the right time via our Task Manager (Figure 2). Another example is the fact that large language models struggle to break down complex problems on their own. Zafin Copilot uses Conversation Manager to deliver single, well-defined tasks to a set of purpose-specific agents. Lastly, for most of 2023, OpenAI’s APIs were stateless, meaning conversational AI applications such as Zafin Copilot had to preserve and manage conversation context on its own using runtime caches and conversation histories.</p><p>Even as we build out these innovative solutions for our application stack, we are hyper-aware that the generative AI models we use are improving at an unprecedented rate.</p><h4><strong>Opportunities for Innovation Ahead</strong></h4><p>Last month’s <a href="https://devday.openai.com">OpenAI Dev Day</a> brought the announcement of game-changing updates to their API (though not yet available for consumption in full on Azure OpenAI at the time of writing).</p><p>The forthcoming release of <a href="https://platform.openai.com/docs/models/gpt-4-and-gpt-4-turbo">OpenAI’s GPT-4 Turbo</a> with a larger 128K context window will open up a wide range of opportunities for Zafin Copilot and the AI Data Transformation pipeline. Our platform’s use of chunking can be reduced and we won’t have to worry about leaving relevant information out of our prompts.</p><p>GPT-4 Turbo’s JSON mode will enable lighter prompting and decreased variability in responses. This will reduce much of the burden of formatting responses and in turn, free up more resources for responding to the user’s inquiry. The seed parameter setting will further allow us to reduce the randomness of the AI models. Greater predictability improves the conversational experience and increases confidence that the tool can complete the tasks it was designed for.</p><p>The new <a href="https://platform.openai.com/docs/assistants/overview">Assistants API</a> will accelerate integration with in-house models and tools through new capabilities like code interpreter, knowledge retrieval, and function calling. GPT-4 Turbo’s improved speed will allow us to reduce our average answer time. Our less computationally intensive tasks can be sent to Turbo to help free up resources for the main GPT-4 model. Finally, the team is also excited to incorporate the new multimodal capabilities, such as text-to-speech to enrich user experience further.</p><p>Our architecture is well-positioned to pivot quickly and take advantage of these powerful updates. We take a modular approach so we can rapidly upgrade elements to the state-of-the-art with minimal re-work. We expect to fully adopt these new features into Zafin Copilot in Q1 2024.</p><p>As we do, we will share deep dives into several key aspects of our approach for building with AI in the age of rapid disruption. Check back with us soon — we’ll have some exciting updates to share along the way.</p><h4>References</h4><ol><li><em>Zafin Studio: Your gateway to innovation in banking</em> (2023) <em>Zafin</em>. Available at: <a href="https://zafin.com/studio/">https://zafin.com/studio/</a> (Accessed: 22 December 2023).</li><li><em>Natural user interface</em> (2023) <em>Wikipedia</em>. Available at: <a href="https://en.wikipedia.org/wiki/Natural_user_interface">https://en.wikipedia.org/wiki/Natural_user_interface</a> (Accessed: 22 December 2023).</li><li><em>Large language model</em> (2023) <em>Wikipedia</em>. Available at: <a href="https://en.wikipedia.org/wiki/Large_language_model">https://en.wikipedia.org/wiki/Large_language_model</a> (Accessed: 22 December 2023).</li><li>Boyd, E. (2023) <em>Introducing GPT-4 in azure openai service</em>, <em>Microsoft Azure Blog</em>. Available at: <a href="https://azure.microsoft.com/en-us/blog/introducing-gpt4-in-azure-openai-service/">https://azure.microsoft.com/en-us/blog/introducing-gpt4-in-azure-openai-service/</a> (Accessed: 22 December 2023).</li><li><em>OpenAI</em>. Available at: <a href="https://openai.com/">https://openai.com/</a> (Accessed: 22 December 2023).</li><li><em>OpenAI devday</em>. Available at: <a href="https://devday.openai.com/">https://devday.openai.com/</a> (Accessed: 22 December 2023).</li><li><em>OpenAI platform</em> (no date) <em>GPT-4 and GPT-4 Turbo</em>. Available at: <a href="https://platform.openai.com/docs/models/gpt-4">https://platform.openai.com/docs/models/gpt-4</a> (Accessed: 22 December 2023).</li><li><em>Assistants Overview — OpenAI API — platform.openai.com</em>. Available at: <a href="https://platform.openai.com/docs/assistants/overview">https://platform.openai.com/docs/assistants/overview</a> (Accessed: 22 December 2023).</li></ol><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=fe59bd7d4627" width="1" height="1" alt=""><hr><p><a href="https://medium.com/engineering-zafin/building-with-ai-not-for-ai-fe59bd7d4627">Building with AI (not for AI)</a> was originally published in <a href="https://medium.com/engineering-zafin">Engineering at Zafin</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
    </channel>
</rss>