<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Savy</title>
    <description>The latest articles on Forem by Savy (@savyjs).</description>
    <link>https://forem.com/savyjs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F594566%2F6e92fd02-5ad6-4df1-a410-dea6abed5d5d.jpg</url>
      <title>Forem: Savy</title>
      <link>https://forem.com/savyjs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/savyjs"/>
    <language>en</language>
    <item>
      <title>The Art of Value Delivery</title>
      <dc:creator>Savy</dc:creator>
      <pubDate>Fri, 09 May 2025 17:33:49 +0000</pubDate>
      <link>https://forem.com/savyjs/the-art-of-value-delivery-33e9</link>
      <guid>https://forem.com/savyjs/the-art-of-value-delivery-33e9</guid>
      <description>&lt;p&gt;Ever wonder what sets successful software products apart from the rest? It’s not just about writing clean code or having the latest features. It’s about "delivering value". Real, tangible value. &lt;br&gt;
As a developer who's worked across dynamic e-commerce platforms I can tell you,it’s this understanding of value that ultimately determines whether a product thrives or fades away.&lt;br&gt;
It’s what separates products that vanish from those that grow sustainably. This guide offers a practical look into delivering value effectively, especially in the software world.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. What is Value?
&lt;/h2&gt;

&lt;p&gt;In business, value is the actual benefit a user or customer gets in exchange for time, money, or attention. It’s not about features. It’s about outcomes: saving time, making money, or feeling secure. When you build a product, you’re not just writing code, you’re solving someone’s real problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Types of Value
&lt;/h2&gt;

&lt;p&gt;Here’s how value shows up in real-world use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Functional Value: Helping someone do something faster or easier.&lt;/li&gt;
&lt;li&gt;Economic Value: Saving money or increasing ROI.&lt;/li&gt;
&lt;li&gt;Experiential Value: Creating delight or seamless experiences.&lt;/li&gt;
&lt;li&gt;Social Value: Building trust, status, or community&lt;/li&gt;
&lt;li&gt;Ethical/Sustainable Value: Aligning with environmental or social goals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Knowing which one you’re delivering shapes everything—from code to customer support.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Define Value for Different Audiences
&lt;/h2&gt;

&lt;p&gt;Different users care about different things. A finance team wants ROI. A solo entrepreneur wants speed. Your job is to find the overlap. Start with a core value, then layer in tailored benefits for each group. Keep the language benefit-driven, not feature-heavy.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. How to Identify What Your Market Values
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Qualitative signals: User interviews, session recordings, support tickets.&lt;/li&gt;
&lt;li&gt;Quantitative data: Usage analytics, survey patterns, churn rates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Track competitors, but don’t just copy them. Understand why they work. Solve what they miss.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Discover and Deepen Understanding
&lt;/h2&gt;

&lt;p&gt;Launch fast, learn faster.&lt;/p&gt;

&lt;p&gt;Run:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;MVPs&lt;/li&gt;
&lt;li&gt;Discovery sprints&lt;/li&gt;
&lt;li&gt;Pilot programs&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Pair these with feedback loops and product analytics. Watch how people use the product, not just what they say.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Who to Target First
&lt;/h2&gt;

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

&lt;ul&gt;
&lt;li&gt;Early adopters who love testing new tools.&lt;/li&gt;
&lt;li&gt;High-pain users who are desperate for solutions.&lt;/li&gt;
&lt;li&gt;Influencers who can become your internal champions or vocal customers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These groups give you the best feedback and traction.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Channels That Deliver Value Well
&lt;/h2&gt;

&lt;p&gt;In software, the delivery method is part of the value. Prioritize:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Digital delivery: SaaS platforms, mobile apps, browser tools.&lt;/li&gt;
&lt;li&gt;Human support: Personalized onboarding, real-time help.&lt;/li&gt;
&lt;li&gt;Ecosystem integration: APIs, payment gateways, partner apps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Make value accessible in the flow of work.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. Strategies to Optimize Delivery
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use agile development to ship fast and adapt.&lt;/li&gt;
&lt;li&gt;Design modular products that serve different needs.&lt;/li&gt;
&lt;li&gt;Build a roadmap with your users, not just for them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your product will evolve as your understanding deepens.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Measure What Matters
&lt;/h2&gt;

&lt;p&gt;Focus on:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;ROI and revenue impact&lt;/li&gt;
&lt;li&gt;Retention and active usage&lt;/li&gt;
&lt;li&gt;Satisfaction (NPS, reviews)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Tie every KPI to your value proposition.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Deliver Fast, Deliver Right
&lt;/h2&gt;

&lt;p&gt;Delivering fast doesn’t mean rushing. It means removing blockers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Empower cross-functional teams.&lt;/li&gt;
&lt;li&gt;Automate releases and tests.&lt;/li&gt;
&lt;li&gt;Prioritize tasks using impact vs. effort.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Timely value is more valuable.&lt;/p&gt;

&lt;h2&gt;
  
  
  11. When to Slow Down or Reprioritize
&lt;/h2&gt;

&lt;p&gt;Hit pause when:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Quality suffers.&lt;/li&gt;
&lt;li&gt;User trust declines.&lt;/li&gt;
&lt;li&gt;The market shifts.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frequent reviews keep you agile, not reactive.&lt;/p&gt;

&lt;h2&gt;
  
  
  12. Raise the Quality Bar
&lt;/h2&gt;

&lt;p&gt;Run release retrospectives.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use continuous integration and real-time monitoring.&lt;/li&gt;
&lt;li&gt;Create feedback loops where users help shape improvements.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s not about being perfect. it’s about learning quickly.&lt;/p&gt;

&lt;h2&gt;
  
  
  13. Scaling Delivery
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Map current value streams&lt;/li&gt;
&lt;li&gt;Segment and customize offerings.&lt;/li&gt;
&lt;li&gt;Automate wherever possible.&lt;/li&gt;
&lt;li&gt;Create a repeatable process.&lt;/li&gt;
&lt;li&gt;Align your whole team on outcomes, not outputs.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;With a solid system and shared focus, you can scale both value and trust.&lt;/p&gt;

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

&lt;p&gt;If you’re building software. especially in fast-paced spaces like e-commerce and payments. value delivery isn’t optional. It’s your edge. Start with clarity, stay close to your users and never stop adjusting. That’s how real impact happens.&lt;/p&gt;

&lt;p&gt;If you're building in this space or exploring value delivery systems, I'd love to connect. My experience spans everything from writing backend code to leading cross-functional teams toward faster, cleaner value pipelines.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Crypto Commerce - Future of E-Commerce?</title>
      <dc:creator>Savy</dc:creator>
      <pubDate>Fri, 14 Jun 2024 17:26:33 +0000</pubDate>
      <link>https://forem.com/savyjs/crypto-commerce-future-of-e-commerce-hlp</link>
      <guid>https://forem.com/savyjs/crypto-commerce-future-of-e-commerce-hlp</guid>
      <description>&lt;h2&gt;
  
  
  Problem
&lt;/h2&gt;

&lt;p&gt;Tax and death are the two things in the world you cannot avoid!&lt;br&gt;
I disagree, both of them could be avoidable! At least the first one. consider you can sell goods to people without paying any non-rational tax. &lt;/p&gt;

&lt;p&gt;Also, some countries are controlling people and building walls between different nations. This is unacceptable. You have the right to trade freely and connect with people all over the world whenever you want.&lt;/p&gt;

&lt;h2&gt;
  
  
  Solution
&lt;/h2&gt;

&lt;p&gt;Crypto currencies could be our solution. despite the nonrefundable nature of most crypto currencies, they could make humans truly free in terms of trading and payment. Human built a form of currency no government can control.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Selling goods/services with cryptocurrency&lt;/li&gt;
&lt;li&gt;Managing inventory&lt;/li&gt;
&lt;li&gt;Online presence of products&lt;/li&gt;
&lt;li&gt;Connecting to different markets&lt;/li&gt;
&lt;li&gt;Converting prices to different cryptocurrencies&lt;/li&gt;
&lt;li&gt;Payer can use a wide range of cryptocurrencies&lt;/li&gt;
&lt;li&gt;Seller can receive their money quickly in their wallet&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Challenges
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Seller needs to trust the POS mechanism&lt;/li&gt;
&lt;li&gt;Payer needs to trust the seller&lt;/li&gt;
&lt;li&gt;Settlement must be fast&lt;/li&gt;
&lt;li&gt;Seller should guarantee their product&lt;/li&gt;
&lt;li&gt;Seller should reward customers who pay via crypto&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Advantages
&lt;/h2&gt;

&lt;p&gt;I can say the best advantage of using Crypto Commerce is reducing taxes. Second, most cryptocurrencies have investment potential. Although sellers can receive stablecoins like USDT, receiving crypto such as BTC or ETH could have long-term benefits.&lt;/p&gt;

&lt;h2&gt;
  
  
  POV: Customers
&lt;/h2&gt;

&lt;p&gt;Why should someone trust sellers who only accept crypto? While fiat gives all the rights to the buyer, crypto gives rights to the receiver. In this case, the seller has a tough time building trust.&lt;/p&gt;

&lt;p&gt;I think the best way to create a culture of paying via crypto requires following steps:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Rewarding crypto payers&lt;/strong&gt;: If we are selling our products via cryptocurrencies to reduce taxes, it's fair to share some of this savings with the buyer. For example, if you sell your product for $100 and typically pay 13% tax ($13), you should sell it for around $93.50 when accepting crypto. This way, both you and the buyer benefit, splitting the savings: $6.50 for you and $6.50 for the buyer who trusted you. A win-win situation. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Start Small: teach your customers that paying via crypto is safe, let them pay via crypto coins. reward them. give them the feeling they are pioneer of new modern era of money and currency. but this experience should be risk-free. start with very cheapest products. repeat this type of experience for your customer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Provide Guarantee and Alternatives: Offer all legal information to your customers, show them who you are, and maintain a trustworthy site. Join trust-building platforms, release videos, and present yourself on social media. Take all necessary steps to build trust. Start accepting crypto as an alternative payment method with rewards. Offer PayPal or other traditional forms of payment, so customers feel free to choose their preferred payment method. Never force them to choose cryptocurrency.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
    </item>
    <item>
      <title>Scalable E-Commerce Architecture - Part 2: Shopping Cart</title>
      <dc:creator>Savy</dc:creator>
      <pubDate>Fri, 16 Feb 2024 20:48:37 +0000</pubDate>
      <link>https://forem.com/savyjs/scalable-e-commerce-architecture-part-2-shopping-cart-3blg</link>
      <guid>https://forem.com/savyjs/scalable-e-commerce-architecture-part-2-shopping-cart-3blg</guid>
      <description>&lt;p&gt;In my previous article, I discussed Authorize.net and the basic architecture of inventory, product management and catalog services.&lt;/p&gt;

&lt;p&gt;Through our exploration, we identified that to implement an effective search and filters system, maintaining an updated source of truth for products is essential.&lt;/p&gt;

&lt;p&gt;We achieve this by denormalizing product data and managing each component in a different service, ultimately consolidating all parts into a single database known as Catalog. &lt;br&gt;
For instance, when a new quantity is added for the product in the inventory service, the new quantity is sent to the catalog service, enabling us to search and filter products based on their availability.&lt;/p&gt;

&lt;p&gt;Now, ley's div into designing and discussing about the shopping cart service. it is necessary before moving to the &lt;code&gt;registering the order&lt;/code&gt; phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Advanced Shopping Cart Features
&lt;/h2&gt;

&lt;p&gt;This service is responsible for:&lt;/p&gt;

&lt;p&gt;1- Contact information (buyer or customer) related to a store&lt;br&gt;
2- Recipient information (address and contact details)&lt;br&gt;
3- Billing information (same as previous)&lt;br&gt;
4- Products with details such as product ID (*optional), quantity, product tax, product coupon as discount, recipient, delivery date, product add-ons and product subtotal with/without discount.&lt;br&gt;
5- Cart level coupon&lt;br&gt;
6- Agent id (if shopping cart is filling by agent on behalf of the customer)&lt;br&gt;
7- Cart totals, customer budget, total tax, total discount, total shipping rates, total shipping discount and finally grand total.&lt;br&gt;
8- Notes regarding order, processing, delivery and products&lt;/p&gt;

&lt;p&gt;In point 4, regarding the products, I've marked the product ID as optional, because sometimes we may need to charge a customer without prior knowledge of their specific product preferences. he may just set the delivery time or recipient with the specific budget.&lt;br&gt;
The product details are typically filled in when the customer begins the checkout process.&lt;/p&gt;

&lt;h2&gt;
  
  
  Architecture
&lt;/h2&gt;

&lt;p&gt;I'm going to describe how we can build our shopping cart service.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19fzxg2hwpi8r1unf4rc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F19fzxg2hwpi8r1unf4rc.jpg" alt="Image description" width="800" height="688"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/19fzxg2hwpi8r1unf4rc.jpg" rel="noopener noreferrer"&gt;Photo link&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As illustrated, we have distinct API endpoints for our shopping cart:&lt;br&gt;
1- &lt;strong&gt;Get Cart&lt;/strong&gt;: This endpoint retrieves the last available shopping cart for a customer, agent, or gust. If the cart doesn't exist, it creates a new cart and returns the empty cart with a UUID. We utilize UUIDs to maintain security and statelessness of our service, a common practice in monolithic or stateful projects where sessions are typically used for managing shopping carts for guests.&lt;/p&gt;

&lt;p&gt;2- &lt;strong&gt;Add Contact&lt;/strong&gt;: This endpoint sets the buyer's information. While this could be automated in the previous endpoint for customers and guests, it's necessary to allow agents to set the contact for the shopping cart, especially when a customer calls the CRM to register a new order.&lt;/p&gt;

&lt;p&gt;3- &lt;strong&gt;Add Address&lt;/strong&gt;: This endpoint can be called by the customer, guest or agent. it sets either the recipient (shipping address) or the billing address (buyer), with or without specific products.&lt;/p&gt;

&lt;p&gt;4- &lt;strong&gt;Set Product&lt;/strong&gt;: This endpoint adds a product to the cart. the product details may be empty initially, but the delivery date and delivery zip code should be provided. Subsequently, another service calculates the cart totals.&lt;/p&gt;

&lt;p&gt;5- &lt;strong&gt;Set Cart Coupon&lt;/strong&gt;: As you may have noticed, we had different types of discounts and coupons. For example, a total discount on the cart or shipping discount.&lt;/p&gt;

&lt;p&gt;6- &lt;strong&gt;Set Shipping&lt;/strong&gt;: When adding a product, it's possible to set the shipping method later. so we add this endpoint to update the shipping method for specific cart product(s).&lt;/p&gt;

&lt;p&gt;7- &lt;strong&gt;Calculating the Cart Totals&lt;/strong&gt;: This service acts as a Saga handler. it validates the products in the cart and calculates the final cart totals. This process, being the most complex part of the shopping cart service. &lt;/p&gt;

&lt;h2&gt;
  
  
  Saga Challenges
&lt;/h2&gt;

&lt;p&gt;When utilizing message broker and saga handler, designing a stateful engine is important. Steps should be executed in specific order to prevent any errors. &lt;br&gt;
Therefore, we have to set different statuses for the cart and lock it based on that status. the final status is &lt;code&gt;CALCULATED&lt;/code&gt;. &lt;/p&gt;

&lt;h2&gt;
  
  
  Sync and Async challenge
&lt;/h2&gt;

&lt;p&gt;When a customer adds a new product to the shopping cart, a long process begins to validate and calculate the cart totals.&lt;br&gt;
This may take less than a few seconds if everything works well. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The first question is this: Should we return the calculated cart every time a customer adds a product to their cart?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Solutions
&lt;/h2&gt;

&lt;p&gt;1- &lt;strong&gt;Wait for Calculation&lt;/strong&gt;: The initial approach involves waiting for the calculation process to complete before returning the processed cart data as an API response to the frontend. &lt;br&gt;
This approach may seem ideal, especially for smaller applications or monolithic architectures. It's a best practice used in most e-commerce applications like Bagisto. Additionally, setting a timeout on the frontend can help manage instances where the process takes longer or fails.&lt;/p&gt;

&lt;p&gt;2- &lt;strong&gt;Return 'OK' Message&lt;/strong&gt;: The second solution could be returning an 'OK' message to the front immediately. The process of updating the cart is running in the background until the frontend sends another request and fetches the latest status of the cart.&lt;br&gt;
This approach allows for a near-real-time experience, typically under 5 seconds. During this time, the frontend shows and calculates cart totals itself. A small loading could be added under the cart to indicate that the final status of the cart is not confirmed by the server, but it will likely be confirmed soon. &lt;br&gt;
Since This is the shopping cart stage and not the checkout, we can handle this stage asynchronously. &lt;br&gt;
However, when we proceed to the checkout pages, we have to wait for the final calculation and validation results before registering the order.&lt;/p&gt;

&lt;p&gt;The downside of this approach might be showing invalid cart items on the frontend, as the frontend is responsible for calculating the cart totals based on previous data. For most businesses, this error in negligible. However, for some other businesses, it might be impossible due to a lack of data in the frontend. &lt;br&gt;
For example, the frontend might not have access to shipping calculation formula. Additionally, this approach requires a lot of work on the frontend. The frontend needs to use the same calculation formula, which involves extra work and may not be worth it.&lt;/p&gt;

&lt;p&gt;3- Implement Event-driven Communication: The third option involves implementing SocketIO to send cart events from backend to the frontend once the processing is complete. &lt;br&gt;
This combines elements of previous solutions, with the frontend receiving an 'OK' message upon initiating the request. Subsequently, when the processing is finished, an event is sent to the frontend via WebSocket. While this approach provides real-time updates to the front-end, it requires additional implementation efforts.&lt;/p&gt;

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

&lt;p&gt;Regarding the Sync or Async challenge, I prefer the first option. Nonetheless, it's imperative to calculate and return the latest cart status whenever the front-end requests it. Whether to handle the process synchronously or asynchronously is entirely up to your discretion. You may opt to manage it entirely on the front-end side or delegate it to the back-end while minimizing front-end involvement.&lt;/p&gt;

&lt;p&gt;I will continue to explore system design topics, with a particular focus on e-commerce concepts, in future articles.&lt;/p&gt;

&lt;p&gt;I'm interested in hearing your perspective. If you have any comments or questions, please don't hesitate to share them. Thank you for taking the time to read!&lt;/p&gt;

</description>
      <category>ecommerce</category>
      <category>shoppingcart</category>
      <category>architecture</category>
      <category>scalability</category>
    </item>
    <item>
      <title>Scalable E-Commerce Architecture - Part 1: Inventory, Product and Search</title>
      <dc:creator>Savy</dc:creator>
      <pubDate>Fri, 02 Feb 2024 21:34:38 +0000</pubDate>
      <link>https://forem.com/savyjs/scalable-e-commerce-architecture-part-1-inventory-product-and-search-18p8</link>
      <guid>https://forem.com/savyjs/scalable-e-commerce-architecture-part-1-inventory-product-and-search-18p8</guid>
      <description>&lt;p&gt;In this article, I delve into crafting a comprehensive e-commerce micro-service architecture. &lt;br&gt;
&lt;a href="https://dev.to/savyjs/a-summary-for-payment-gateways-chase-and-authorizenet-lfk"&gt;In my previous post&lt;/a&gt;, I discussed the payment service, utilizing Authorize.net, and now it's time to discuss product services. &lt;/p&gt;

&lt;h1&gt;
  
  
  Starting Point
&lt;/h1&gt;

&lt;p&gt;I begin with the following figure. I put a "Product DB" in the center, customers actions related to "product" on the right, and agent actions on the left side. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxlawguvmojurtsp1hjp.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frxlawguvmojurtsp1hjp.jpg" alt="Image description" width="800" height="441"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://dev-to-uploads.s3.amazonaws.com/uploads/articles/rxlawguvmojurtsp1hjp.jpg" rel="noopener noreferrer"&gt;High Quality Image&lt;/a&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Technologies and Specifications
&lt;/h1&gt;

&lt;ul&gt;
&lt;li&gt;Environment: LTS Node.js - 20.10 &lt;/li&gt;
&lt;li&gt;Programming Language: Typescript - Javascript&lt;/li&gt;
&lt;li&gt;Database: RDBMS - MySQL 8 - Redis (Ioredis)&lt;/li&gt;
&lt;li&gt;Communication Style: REST API - Kafka Message broker 
(kafkajs)&lt;/li&gt;
&lt;li&gt;Backend Framework: Strapi - Koa or NestJS&lt;/li&gt;
&lt;li&gt;Frontend Framework: Nuxt or Next (or any other framework with SSR capability)&lt;/li&gt;
&lt;li&gt;Service Contract: Swagger&lt;/li&gt;
&lt;li&gt;API Test: Postman - Jest&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Searching Challenge
&lt;/h2&gt;

&lt;p&gt;In a micro-service architecture, implementing best practices and ensuring data consistency is crucial.&lt;br&gt;
Consider a scenario, where some part of data updated in the inventory service, such as a product being changed and having no quantity. Who is responsible for removing the product from being sold in the storefront? &lt;br&gt;
similarly, when a product price has been changed in the product management service, which part of the system calculates the new price? who delivers the new price to storefront?&lt;/p&gt;

&lt;p&gt;when dealing with distributed systems (micro-service here), we have 2 options to ensure data consistency:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Normalization: saving different parts of data in the different services.&lt;/li&gt;
&lt;li&gt;Denormalization: saving a copy of data in another service  where the data is needed for some process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this system, I used the second option. the main reason behind this decision is necessity for "searching and filtering products". &lt;br&gt;
I've been in many e-commerce projects where "searching and filtering" operation became a significant part of the system. so I prefer to divide the system into smaller parts, but each system should update a central database for products. &lt;br&gt;
Although we may have redundancy for product data, we ensure that searching and filtering will be done efficiently.&lt;/p&gt;

&lt;h2&gt;
  
  
  Catalog Service
&lt;/h2&gt;

&lt;p&gt;the catalog service is responsible for adding event rules; it saves its data in its database and then sends a copy of updated data to the product service which is responsible for providing product data.&lt;/p&gt;

&lt;p&gt;The drawback would be redundant data. we have to keep a large database updated. It seems like we have a monolithic database in the middle of a micro-service architecture, but the point here is that this database and product service do not execute any business logic; they only collect data. All the business logic related to the catalog should be implemented in other services.&lt;/p&gt;

&lt;h2&gt;
  
  
  Filtering Product, Dynamic Prices
&lt;/h2&gt;

&lt;p&gt;If we had only one place to calculate and display the final product price, a base price and catalog prices would be sufficient. For example, on a single product page where we display the specifications of only one product, including:&lt;/p&gt;

&lt;p&gt;Showing the price (or regular price / base price)&lt;br&gt;
Calculated price (or final price)&lt;br&gt;
Base discount (or calculated discount)&lt;/p&gt;

&lt;p&gt;We can easily save base price and catalog prices (like category price) in a centralized products database. Then, we are able to perform searches easily. In this case, we can use the Strapi search API to filter and search products based on a range of prices.&lt;/p&gt;

&lt;p&gt;*&lt;em&gt;But what about dynamic prices? *&lt;/em&gt;&lt;br&gt;
when we show different prices based on dynamic parameters like "customer group" policies, where we show different prices to two different groups of users.&lt;br&gt;
I know, it may sounds a little bit rare, I agree. But we have to deal with this challenge. some of the options are:&lt;/p&gt;

&lt;h3&gt;
  
  
  1- Performing a search without considering price, and then conducting a second search (price search) to remove unrelated data
&lt;/h3&gt;

&lt;p&gt;it is the first option. for example, if a user selects a range of $20 to $30, we can perform a search without considering the price, then calculate the prices, and filter products within the specific range. &lt;br&gt;
This option is only suitable when we have a large number of products with similar prices. &lt;br&gt;
It could also be implemented in the frontend sometimes, although it's not considered best practice. &lt;br&gt;
The biggest problem with this approach is pagination. When we use pagination, we have a limited number of products on each page. It is possible that when we remove unrelated products from a page, no items remain on that page, and the user has to proceed to the next page. if we don't have a large number of products, we can use a single API call to fetch all products and filter them based on price. in this case, I see no problem with this approach. specially for databases with &amp;lt; 1K records.&lt;/p&gt;

&lt;h3&gt;
  
  
  2- Using price filter as a middleware
&lt;/h3&gt;

&lt;p&gt;in this approach, we do exactly the opposite. consider you have two different search systems. the first one calculates all product prices and finds the products within that specific price range. &lt;br&gt;
then it passes those product IDs to the next system, which filters final products and do the pagination. it receives the IDs of those products as an argument. &lt;/p&gt;

&lt;p&gt;the first advantage of this approach is that we can use pagination. because the pagination will be handled by the framework in the final process. unlike the previous approach which was suitable for searching without pagination, this approach is better suited for paginated search systems. &lt;/p&gt;

&lt;p&gt;the drawback of this approach is that calculating prices for all products may be expensive for the system. &lt;br&gt;
it could be a significant process load for the system, specially for systems with a large number of products. consider having to process 200K prices and send their IDs to search system for further filtering! &lt;/p&gt;

&lt;p&gt;Another problem could be filtering based on IDs. we may have a landing page where only half of the products have dynamic prices; and other products have only base price. &lt;br&gt;
So, we have to process prices for all products, even if the price could be filtered easily by the framework in the data layer using ORM.&lt;/p&gt;

&lt;p&gt;Another disadvantage of this approach could be sorting based on product price. since second searching system only received the IDs of products from previous filter, it doesn't have any access to their prices in this step. therefore, we may have to remove sorting based on price in this approach.&lt;/p&gt;

&lt;p&gt;this approach could be suitable when dealing with a medium-sized database, something like 1k to 10k products, specially with a variety of price ranges. &lt;/p&gt;

&lt;h3&gt;
  
  
  3- Calculating and saving different prices into database
&lt;/h3&gt;

&lt;p&gt;The third approach involves doing the homework sooner. &lt;br&gt;
In this approach, when a dynamic price added for a product, we calculate all possible prices based on different rules.&lt;br&gt;
for example, we may have 10 different prices for a single product, based on factors such as: &lt;br&gt;
1- Customer groups&lt;br&gt;
2- Events&lt;br&gt;
3- Stores&lt;br&gt;
4- Zones&lt;br&gt;
5- Discounts&lt;br&gt;
6- ...&lt;/p&gt;

&lt;p&gt;The next step would be applying and considering these rules for incoming search request. you have to automatically extract parameters and apply them to search query. &lt;/p&gt;

&lt;p&gt;The advantage of this approach is that filtering will be handled on data layer. the filtering would be done at a low-level part of the system. &lt;/p&gt;

&lt;p&gt;Also, another benefit would be centralized data. When you have a source of truth for prices in your data layer, you can use various tools to perform searches (Elasticsearch, Algolia, Cache, etc.).&lt;/p&gt;

&lt;p&gt;One of the downsides of this approach could be facing inconsistency and dirty reads.&lt;br&gt;
for example, consider a situation where you updated the price of a product, but due to latency or some specific problem, the price didn't get updated, so the old price is showing in the search results until you implement extra strategies.&lt;/p&gt;

&lt;p&gt;Another down side would be saving a large number of unused data. for example you may calculate 20 different prices for a single product, which might not be used in any search. &lt;br&gt;
what will happen to those prices? &lt;br&gt;
when you may have lots of products, it gets worse. &lt;/p&gt;

&lt;p&gt;This approach guarantees a fast search and provides a source of truth for a wide range of search systems. however, you should consider the cost of saving a huge amount of unused data.&lt;/p&gt;

&lt;p&gt;this approach will work for any number of products, and I can consider it the best practice, as it also enables sorting by price option.&lt;/p&gt;

&lt;p&gt;the only the challenge that may arise is when some dynamic prices won't be processed until specific requirements are met.&lt;br&gt;
for example, a product may have a specific price based on another external API, or the product price may be extremely sensitive to user input (e.g., weight of gold or a mix of some materials). &lt;br&gt;
I think for those scenarios, it's always better not to provide batch filtering for price.&lt;/p&gt;

&lt;h1&gt;
  
  
  Tools and 3rd parties
&lt;/h1&gt;

&lt;p&gt;In order to build and scale the system fast and reliably, we use some tools and outsource some functionalities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Payment: Authorize.net - PayPal&lt;/li&gt;
&lt;li&gt;Fast Search: Algolia&lt;/li&gt;
&lt;li&gt;Inventory Management: Zoho Inventory&lt;/li&gt;
&lt;li&gt;CRM: Zoho CRM&lt;/li&gt;
&lt;li&gt;Chat and Support: SaleIQ or any other online chat provider&lt;/li&gt;
&lt;li&gt;Recommendation: MoEngage&lt;/li&gt;
&lt;li&gt;Analytics: Google Analytics&lt;/li&gt;
&lt;li&gt;Tag Management: Google GTM&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Using these tools isn't mandatory, but they are very helpful for specific tasks, specially if you don't have a large budget and a big team. for small teams (2-5 developers), it's always better to consider using reliable 3rd parties.&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Selecting the optimal approach for dynamic pricing in e-commerce micro-service architectures is vital for performance. Consider factors like scalability and data consistency. Share your thoughts and experiences on dynamic pricing in the comments below - your feedback is valuable!&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Developer's Guide to Authorize.net Payment Integration: PCI Compliance, Workflows, and Interactive Demos</title>
      <dc:creator>Savy</dc:creator>
      <pubDate>Tue, 03 Oct 2023 14:03:29 +0000</pubDate>
      <link>https://forem.com/savyjs/a-summary-for-payment-gateways-chase-and-authorizenet-lfk</link>
      <guid>https://forem.com/savyjs/a-summary-for-payment-gateways-chase-and-authorizenet-lfk</guid>
      <description>&lt;p&gt;Part 1 of e-commerce journey: Decide for payment gateway&lt;/p&gt;

&lt;h2&gt;
  
  
  Audiences
&lt;/h2&gt;

&lt;p&gt;This article consists of 2 parts and is specifically beneficial for only two groups of audiences. &lt;/p&gt;

&lt;p&gt;1- Businesses Owners: This article would be valuable for business owners interested exploring and implementing a simplified approach to a payment gateway, particularly for businesses in North America and Canada.&lt;br&gt;
2- Fellow Tech Enthusiasts like Me: In this article, I've happily shared some of my experiences with testing payment gateways.&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;ove the past few weeks, I've been on the hunt for a solution to replace the payment gateway of a commerce site. I had two key objectives:&lt;/p&gt;

&lt;p&gt;1- The solution shouldn't necessitate complex PCI-DSS (the legal aspect)&lt;br&gt;
2- The design and user experience of the payment process are crucial (UX).&lt;/p&gt;

&lt;h2&gt;
  
  
  My Experience as Developer
&lt;/h2&gt;

&lt;p&gt;When you first venture into the realm of documentation, you'll encounter numerous concepts and terms which might leave you feeling a bit bewildered. most of the time you find yourself juggling three distinctive facets of payment gateway simultaneously, striving to strike a harmonious balance among them:&lt;/p&gt;

&lt;p&gt;1- The Technical Aspect: Security, UI and API, often takes the forefront.&lt;br&gt;
2- The Legal Aspect: PCI-DSSs I mean! 😩&lt;br&gt;
3- The Logical and Business-related Aspect: factors like time constraints and complexity, also plays a pivotal role in the equation.&lt;/p&gt;

&lt;h2&gt;
  
  
  First Step: Boring PCI Compliance!
&lt;/h2&gt;

&lt;p&gt;There are 7 (or more probably) different levels of PCI DSSs. &lt;a href="https://www.authorize.net/resources/blog/2021/pci-dss-compliance.html" rel="noopener noreferrer"&gt;If you want to know more about PCI DSSs click here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For small businesses that prefer not to invest a lot of time in security and legal procedures and don't require a complex payment method (which may requires storing customer card data)there are two preferable options:&lt;/p&gt;

&lt;p&gt;1- &lt;strong&gt;PCI DSS QAS A&lt;/strong&gt; (I refer to this as Level A): The simplest one, you can't touch the sensitive card data  (such as card numbers and expiration dates), even if you want 😅. This option includes redirect (HPP), iframe (HPF), and other pop-up approaches.&lt;/p&gt;

&lt;p&gt;2- &lt;strong&gt;PCI DSS QAS A-EP&lt;/strong&gt; (Level A-EP): It is one step above Level A, and provides better control over the UX of payment form. &lt;/p&gt;

&lt;p&gt;While you may briefly interact with sensitive data in the UI layer, you shouldn't send it to your server or store it. In this method a payment script manages sensitive fields and the payment button. This JavaScript replaces the sensitive data with a secure token called a &lt;code&gt;payment nonce&lt;/code&gt; before submitting your form. &lt;/p&gt;

&lt;p&gt;Whenever I discuss these various approaches, people often inquire about their visual appearance. I mean, the most significant challenge during this journey has been assessing the user interfaces (UIs) of these different methods. Aside from a handful of screenshots and some less-than-ideal videos, I couldn't find any live demos to evaluate the UI. Additionally, it remained unclear how much more challenging it might be for businesses to upgrade their PCI compliance even by just one level.&lt;/p&gt;

&lt;h3&gt;
  
  
  Live Demo for Accept.js and AcceptUI
&lt;/h3&gt;

&lt;p&gt;If you're interested in exploring the UI and UX of Accept.js and AcceptUI from Authorize.net's service, you can access UI demos and HTML code here:&lt;/p&gt;

&lt;p&gt;Option 1: &lt;a href="https://acceptjs-demo.authorizenet-payment.savyjs.com" rel="noopener noreferrer"&gt;Accept.js, Hosted Payment Form (Requires PCI-DSS SAQ A-EP)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Option 2: &lt;a href="https://acceptui-demo.authorizenet-payment.savyjs.com" rel="noopener noreferrer"&gt;AcceptUI - Hosted Payment Form (Requires PCI-DSS SAQ A)&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;References for more details about Accept.JS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.authorize.net/api/reference/index.html#accept-suite" rel="noopener noreferrer"&gt;API of Accept Suit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.authorize.net/api/reference/features/acceptjs.html#Integrating_the_Hosted_Payment_Information_Form" rel="noopener noreferrer"&gt;Developer Guide&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Comparing Workflows: Accept.js vs. Accept Hosted Page
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcyw3dr9rbf0p54vbsi8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcyw3dr9rbf0p54vbsi8.png" alt="Image description" width="800" height="283"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://developer.authorize.net/api/reference/features/acceptjs.html#Workflow" rel="noopener noreferrer"&gt;reference from Authorize.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Within the Accept Suite of the Authorize.net website, you'll find two different options. the Accept Suite itself is a designed section with reduced PCI DSS requirements. &lt;/p&gt;

&lt;p&gt;However, even within the Accept Suite you'll encounter two types, as mentioned earlier.&lt;/p&gt;

&lt;p&gt;The primary difference between AcceptJS (or AcceptUI) and the Accept Hosted Page method (which includes redirect and iFrame) lies in their workflows:&lt;/p&gt;

&lt;p&gt;1- In the AcceptJS workflow, you receive a &lt;code&gt;payment nonce&lt;/code&gt; instead of sensitive card data before submitting the form to server. Subsequently, the transaction can be initiated on the server side. the payment response indicates the success of the payment. &lt;br&gt;
In this method, you have two options. In the first option, you can design the entire form by yourself, including HTMl, CSS and JavaScript. In the second option, when you click on the &lt;code&gt;Pay&lt;/code&gt; button, an iframe loads and displays a popup modal whose design cannot be changed. &lt;br&gt;
(I must confess: It's a rather unfortunate Material Design form with fields shamefully underlined 😔)&lt;/p&gt;

&lt;p&gt;2- With the Accept Hosted Page method, you have to initiate payment after the user has confirmed the price and order. Then you can send a payment request to Authorize.net (including details such as the amount, order specifics). after that you received a payment token, you can display the payment form to the customer. &lt;br&gt;
This form loads within an iframe or on external pages. Unfortunately, you have no much control over the UI of that iframe.&lt;br&gt;
Once the user filled out the payment form and clicked the &lt;code&gt;pay&lt;/code&gt; button of Authorize.net iframe (or page), the transaction begins and a callback (or webhook, if you ahve configured it beforehand) will be sent to you. &lt;br&gt;
Subsequently, you have to make an inquiry request to the API to confirm whether the payment was successful or not.&lt;/p&gt;

</description>
      <category>payment</category>
      <category>pcidss</category>
      <category>ui</category>
      <category>authorizenet</category>
    </item>
    <item>
      <title>Stable GPT: Using Interpreter for Web Development (Python Code)</title>
      <dc:creator>Savy</dc:creator>
      <pubDate>Tue, 19 Sep 2023 11:45:58 +0000</pubDate>
      <link>https://forem.com/savyjs/gpt-co-developer-using-interpreter-python-code-353j</link>
      <guid>https://forem.com/savyjs/gpt-co-developer-using-interpreter-python-code-353j</guid>
      <description>&lt;p&gt;It hasn't been long since Firefly was released for Photoshop. Many UI/UX and Graphic designers are now using it. However, in web development, we don't have a similar option yet.&lt;/p&gt;

&lt;h1&gt;
  
  
  Interpreter: Is it Firefly for Programmers?
&lt;/h1&gt;

&lt;p&gt;After releasing &lt;a href="https://github.com/KillianLucas/open-interpreter" rel="noopener noreferrer"&gt;Interpreter&lt;/a&gt;, a CLI tool that runs commands in a terminal environment, I decided to create instructions for GPT to see Interpreter would work with me or not.&lt;/p&gt;

&lt;h4&gt;
  
  
  Installing Interpreter
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;pip install open-interpreter&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I installed Interpreter on WSL, but it can also be installed on Linux and other operating systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Problem: Stability and Maintaining Consistent Coding Style
&lt;/h2&gt;

&lt;p&gt;I remember 5 months ago, when I decided to build my first Android application using GPT3-5. I asked GPT for UI code and it gave me a layout code. I noticed a bug and asked for it to be fixed. However, GPT sent me a completely different code with different variable names!&lt;br&gt;&lt;br&gt;
The obvious reason is that GPT doesn't have enough memory to retain everything I tell it. I'm searching for a solution to make GPT more stable. I'm aware of the 8k - 64k word limitation, so I need to provide GPT with instructions that are both accurate and concise.&lt;/p&gt;
&lt;h2&gt;
  
  
  Interpreter (GPT) Instructions
&lt;/h2&gt;

&lt;p&gt;In this instruction, which I've set for GPT as "system" command, I described Project, Stack, Design System, etc. &lt;br&gt;
When I run this Python file, I have a developer who understands my goals and assists me in development.&lt;/p&gt;

&lt;p&gt;Here is my Python code which I run with the command &lt;code&gt;python3 chat.py&lt;/code&gt; in the WSL terminal. This file is in the root folder of my Nuxt project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import os
import interpreter
from dotenv import load_dotenv

load_dotenv()
interpreter.model = "gpt-3.5-turbo"

interpreter.api_key= os.getenv('OPENAI_API_KEY')
interpreter.system_message += """

You are my copilot developer. I want assign some codings to you.
Consider these instructions for each message:

Project Description = [
    Name: My Project Title
    Domain:  X.com;
    Market: E-Commerce Specific Field;
    Zone: North of America and Canada;
]

Specifications and Technologies = [
    CSS Framework: Tailwind CSS;
    Frontend Framework: Nuxt.js version 3.7.0;
    Design System: Atlassian Design System;
    Backend CMS: Strapi Headless system , Top of Koa framework;
    Nuxt Strapi Module Version: ^1.9.0;
]

HTML and CSS Context = [
    HTML: use Vue 3 and Nuxt 3 tags;
    Css: use tailwindcss classes or styled scopes;
    Icons: I use "@tabler/icons-webfont": "^2.34.0";
]

Nuxt 3 Architecture and Structure = [
    Vue version: ^3;
    Layers: Project uses different layers. Layers are outside of the project root;
    layouts: In `layouts` folder;
    Components: They are in the `components` folder;
    Pages: In `pages` folder;
    Styles: In `assets/styles` folder;
    File and folder naming: All files and folders should be `kebab-case`;
    Default index name: `index.vue`;
]

Purpose =  [
    Creating an E-Commerce CMS;
]

Style and Design = [
    Colors: both Dark mode and Light modes; default: system color. Pink , White, Red and other flowers like colors;
    use default color and styles of Atlassian design system;
]

Ignored Files and Folders = [
    node_modules;
    .git;
    .github;
    .nuxt;
    dist;
]

Requests for Creating a or Designing a Page = [
    - Provide a whole response with a lot of details;
    - Write necessary code as much as possible (unless user was ask for short answer);
    - Try to separate codes as layout / page / component by context of code;
    - Forget about initiating project phase and data layer phase; only consider business logic layer code and a little application layer;
    - Do not install or open IDE. you have to save files for user.component;
    - If files already exists, check it first and update it, instead on overriding contents.component;
    - Only create necessary directories;
    - Be stable and use same style;
]

Conditions: [
    If includes code request: find best path for saving that file in Nuxt structure and save it in path;
]

Initial action: [
    Explore existing files and folders;
]

"""


print(interpreter.system_message)

interpreter.chat()
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using GPT for Web Development
&lt;/h2&gt;

&lt;p&gt;Why should we use GPT as a co-developer? I think that the "coding" is not our problem, Because we can use Wordpress or thousands of headless CMSs or codeless tools now. Or we can search and implement open source projects. creating a five in row game with AI is like fun research.&lt;/p&gt;

&lt;h2&gt;
  
  
  Development Pace
&lt;/h2&gt;

&lt;p&gt;The first thing about AI Co-Developers is that they increase our coding pace. In more serious and important businesses, it's common for customers, managers or CEOs not to know exactly what they want. they require time and step-by-step progress, so we have to code at their pace.&lt;/p&gt;

&lt;p&gt;In the past 12 years that I've been working, there were times when I deployed features so fast that customers, CTOs or CEOs didn't have enough time to test it. many times, they got offended and threatened because they thought that I might make decisions independently without respecting their decision-making.&lt;/p&gt;

&lt;p&gt;So releasing new features everyday is so fast and can lead to problems. also big applications need a little stability and this stability is the main source of the trust.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using AI to Find Clean Data
&lt;/h2&gt;

&lt;p&gt;One of the biggest problems of programmers and today world is junk data and junk information.&lt;br&gt;
So, maybe one of the most useful aspects of using AI would be the ability to search and find the needed part of data in the current jungle of shit code.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI Memory Problem
&lt;/h2&gt;

&lt;p&gt;I think biggest problem of GPT is its memory, at least for now.&lt;br&gt;
8k - 64k words memory isn't enough for big projects, unless we find a way to decouple whole project into smaller parts.&lt;/p&gt;

&lt;h3&gt;
  
  
  Future
&lt;/h3&gt;

&lt;p&gt;let's see what happens. I'm sure it won't be boring, at the very least, and it could even be beneficial for programmers.&lt;/p&gt;

</description>
      <category>nuxt</category>
      <category>ai</category>
      <category>gpt</category>
      <category>interpreter</category>
    </item>
  </channel>
</rss>
