<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-US"><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://rndagano.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://rndagano.github.io/" rel="alternate" type="text/html" hreflang="en-US" /><updated>2026-06-15T18:21:58+00:00</updated><id>https://rndagano.github.io/feed.xml</id><title type="html">Raymond Ndagano</title><subtitle>Backend and Platform Engineer</subtitle><entry><title type="html">Talk less, ship more</title><link href="https://rndagano.github.io/2026/06/14/talk-less-ship-more.html" rel="alternate" type="text/html" title="Talk less, ship more" /><published>2026-06-14T00:00:00+00:00</published><updated>2026-06-14T00:00:00+00:00</updated><id>https://rndagano.github.io/2026/06/14/talk-less-ship-more</id><content type="html" xml:base="https://rndagano.github.io/2026/06/14/talk-less-ship-more.html"><![CDATA[<h1 id="talk-less-ship-more">Talk less, ship more</h1>
<p>June 14, 2026</p>

<p>In 2017, fresh out of my bachelor’s, I published <a href="/2017/10/29/project-ecommerce.html">one article</a> — a short
technical breakdown of my thesis. I landed my first job the following January, and four months
later that same article helped me secure my second. That’s when I learned what publishing is worth.</p>

<p>And yet I’ve never felt the urge to blog. So why am I here, doing exactly that?</p>

<p>Usually, I learn to understand. Sometimes, I build something just to get quick feedback. Other
times, I go down to first principles — understand the mechanism, make the idea reusable. That
takes time and energy. Without a clear goal, it’s easy to get lost.</p>

<p>What I almost never do is learn a concept just to ship an artifact. Build to publish.</p>

<p>That changes now.</p>

<p>I am an engineer with a philosopher’s itch: I like systems, causes, trade-offs, and the odd
beauty when a simple idea explains a complex one.</p>

<p>The plan is simple: learn, build, publish. Let’s see what I pick up along the way — and where it
leaves me.</p>

<p>The next post should carry less promise and more artifact.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Why I'm starting this blog: learn, build, publish — less promise, more artifact.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rndagano.github.io/assets/images/og-image.png" /><media:content medium="image" url="https://rndagano.github.io/assets/images/og-image.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Design a B2C E-commerce web application with API integration</title><link href="https://rndagano.github.io/2017/10/29/project-ecommerce.html" rel="alternate" type="text/html" title="Design a B2C E-commerce web application with API integration" /><published>2017-10-29T10:49:36+00:00</published><updated>2017-10-31T16:07:12+00:00</updated><id>https://rndagano.github.io/2017/10/29/project-ecommerce</id><content type="html" xml:base="https://rndagano.github.io/2017/10/29/project-ecommerce.html"><![CDATA[<h1 id="design-a-b2c-e-commerce-web-application-with-api-integration">Design a B2C E-commerce web application with API integration</h1>
<p>October 29, 2017, updated October 31, 2017  |  900 – 1000 words  |  <i class="fa-regular fa-clock" aria-hidden="true"></i> +/- 4 mn</p>

<p>Today I am going to describe how I designed and implemented an e-commerce web site. May I invite you to make yourself comfortable and grab your drink and/or food of choice? Ready? Let’s get working.</p>

<h2 id="table-of-contents">Table of contents</h2>
<ol>
  <li><a href="#context">Context</a></li>
  <li><a href="#method-of-work">Method of work</a></li>
  <li><a href="#project">The project</a></li>
  <li><a href="#database-design">Database design</a></li>
  <li><a href="#eav-model">EAV model</a></li>
  <li><a href="#detailed-analysis-of-a-use-case">Detailed analysis of a use case</a></li>
  <li><a href="#the-applications-architecture">The application’s architecture</a></li>
  <li><a href="#deliverable">Deliverable</a></li>
  <li><a href="#recommendations-and-improvements">Improvements</a></li>
  <li><a href="#conclusion">Conclusion</a></li>
  <li><a href="#further-readings">Some useful links</a></li>
</ol>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="context">Context</h2>
<p>I have designed an e-commerce B2C web site for a small company. I took on the role of an analyst – programmer to deliver the product.</p>

<p>The web application has two parts, a front-office and a back-office. In the front-office, customers can consult, search and buy items from a product catalog. The back-office is the e-commerce’s management area.</p>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="method-of-work">Method of work</h2>

<p>To complete the project, I have employed the following method:</p>

<ul>
  <li>
    <p>conduct a preliminary study to define the scope of the project and the company’s field of activity</p>
  </li>
  <li>
    <p>carry out an analysis of the existing e-commerce web sites to get an insight of their common characteristics</p>
  </li>
  <li>
    <p>redact functional and non-functional specifications</p>
  </li>
  <li>
    <p>design a relational database schema, as well as the web site functionalities with UML diagrams</p>
  </li>
  <li>
    <p>put in place the database and implement the web site functionalities</p>
  </li>
</ul>

<p><img src="/assets/images/posts/2017-10-29-project-ecommerce/method.png" alt="Overview of the Software development cycle" /></p>
<div class="image-caption"><em>Figure 1: Overview of the Software development cycle</em></div>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="project">Project</h2>

<p>The e-commerce web application provides two interfaces, a front-office and a back-office.</p>

<p>The front-office allows customers to consult the product catalog and to perform searches. They can place an order, check out using secured online payments and track their shipments. They can also print invoices and review items.</p>

<p>The back-office allows administrators to manage the product catalog and provide customer service. Each administrator has permissions such as the right to list, to create or to update a resource.</p>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="database-design">Database design</h2>

<p>It was not easy to design a database schema supporting a flexible data structure. The data structure should scale as I added more products categories.</p>

<p><img src="/assets/images/posts/2017-10-29-project-ecommerce/product.png" alt="The problem I am trying to solve" /></p>
<div class="image-caption"><em>Figure 2: The problem I am trying to solve</em></div>

<p>I found several alternatives to the chosen solution. If I didn’t have to stick with a relational database, I would have chosen a NoSQL database. It provides a more flexible data structure than a relational database. I also considered using a PostgreSQL database along with its JSONB functionality. Binary JSON (JSONB) allows you to save JSON as a record’s field. You can then query it as it was a regular relational database field.</p>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h3 id="eav-model">EAV model</h3>

<p>The chosen solution is the Entity – Attribute – Value model. It is a key – value pattern used in various fields such as scientific research and e-commerce platforms such as Magento and Drupal. That is because it provides the ability to work with disparate data structures.</p>

<p><img src="/assets/images/posts/2017-10-29-project-ecommerce/eav.png" alt="The EAV model" /></p>
<div class="image-caption"><em>Figure 3: The EAV model</em></div>

<p>In spite of that, I had to weight the advantages and the disadvantages of the model nonetheless.</p>

<p><strong>Pros:</strong></p>

<ul>
  <li>
    <p>dynamic and flexible schema : easy to add and update entities, attributes and values</p>
  </li>
  <li>
    <p>ability to optimize search performances with lookup tables</p>
  </li>
</ul>

<p><strong>Cons:</strong></p>

<ul>
  <li>
    <p>loss of the capacity to enforce data integrity, particularly on the attributes and the values</p>
  </li>
  <li>
    <p>complex DML operations : selecting a product based on its attribute’s values or on attributes can take at least two to three joins besides the conditional clauses</p>
  </li>
</ul>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="detailed-analysis-of-a-use-case">Detailed analysis of a use case</h2>

<p>I chose to describe the “<em>Place an order</em>” use case in this detailed analysis. It consists of a description, and of three UML diagrams: use case, activity and sequence.</p>

<p>The <a href="#pass-order-use-case"><em>table 1</em></a> describes the use case. I only assumed the best case scenario and in doing so I left aside the handling of exceptions. An example of an exception would be an item out-of-stock.</p>

<table id="pass-order-use-case" class="use-case-description">
  <tr>
    <th>Use case name :</th>
    <td>Place an order</td>
  </tr>
  <tr>
    <th>Description :</th>
    <td>The customer order the basket's content.</td>
  </tr>
  <tr>
    <th>Actors :</th>
    <td>A customer</td>
  </tr>
  <tr>
    <th>Prerequisites :</th>
    <td>
      <ul>
        <li>The customer has an account</li>
        <li>The customer signed in</li>
      </ul>
    </td>
  </tr>
  <tr>
    <th>Main process :</th>
    <td>
      <ul>
        <li>The customer displays the basket and begin the check out process</li>
        <li>The customer reviews personal information including the shipping address</li>
        <li>The customer selects a shipping rate</li>
        <li>The customer selects a payment method</li>
        <li>The customer reviews and confirm the order</li>
        <li>The customer makes the payment</li>
      </ul>
    </td>
  </tr>
  <tr>
    <th>Postconditions :</th>
    <td>
      <ul>
        <li>The basket is empty</li>
        <li>The order saved and it is now accessible in the orders history</li>
        <li>The customer can print the invoice</li>
      </ul>
    </td>
  </tr>
</table>
<div class="image-caption"><em>Table 1: "Place an order" Use case description</em></div>

<p><img src="/assets/images/posts/2017-10-29-project-ecommerce/use-case-order.png" alt="&quot;Place an order&quot; Use case diagram" /></p>
<div class="image-caption"><em>Figure 4: "Place an order" Use case diagram</em></div>

<p><img src="/assets/images/posts/2017-10-29-project-ecommerce/activity-order.png" alt="&quot;Place an order&quot; Activity diagram" /></p>
<div class="image-caption"><em>Figure 5: "Place an order" Activity diagram</em></div>

<p><img src="/assets/images/posts/2017-10-29-project-ecommerce/sequence-order.png" alt="&quot;Place an order&quot; Sequence diagram" /></p>
<div class="image-caption"><em>Figure 6: "Place an order" Sequence diagram</em></div>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="the-applications-architecture">The application’s architecture</h2>

<p>The B2C e-commerce web application has a client – server architecture. A user send requests to the web server, which implements the MVC model. The web server interact with the database and consumes web services.</p>

<p><img src="/assets/images/posts/2017-10-29-project-ecommerce/architecture.png" alt="Application's architecture" /></p>
<div class="image-caption"><em>Figure 7: The application's architecture</em></div>

<p>I have used Shippo for the shipments and Stripe for the online payments. These web services help me bring an enriching experience to my customers.</p>

<p>I chose Stripe because it allows me to deliver an e-commerce web site that follow the PCI DSS standard. PCI DSS helps organizations meet the security standards for manipulating credit cards data.</p>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="deliverable">Deliverable</h2>

<p>A B2C e-commerce web application that offers a front and a back user interfaces. It provides the abilities to sale and manage a product catalog.</p>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="improvements">Improvements</h2>

<ul>
  <li>Integrate the B2C e-commerce web site with one or more ERP modules</li>
  <li>Transform the stock management into a drop shipping system</li>
</ul>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="conclusion">Conclusion</h2>

<p>To carry out this project has been a worthwhile experience. I enjoyed applying solutions to the problems encountered. The most interesting part has been to quit my comfort zone to find a solution, the EAV model, to an unknown problem.</p>

<p>Did you learn something new as I did? Tell me what you think in the comment section below.</p>

<p>Thank you for your time.</p>

<p><a href="#design-a-b2c-e-commerce-web-application-with-api-integration"><i class="fa-solid fa-arrow-up" aria-hidden="true"></i></a></p>
<h2 id="some-useful-links">Some useful links</h2>

<ul>
  <li><a href="https://goshippo.com/" target="_blank" rel="noopener noreferrer">Shippo API <i class="fa-solid fa-square-up-right" aria-hidden="true"></i></a></li>
  <li><a href="https://stripe.com/" target="_blank" rel="noopener noreferrer">Stripe API <i class="fa-solid fa-square-up-right" aria-hidden="true"></i></a></li>
  <li><a href="https://www.pcisecuritystandards.org/" target="_blank" rel="noopener noreferrer">Payment Card Industry Data Security Standard <i class="fa-solid fa-square-up-right" aria-hidden="true"></i></a></li>
</ul>]]></content><author><name></name></author><summary type="html"><![CDATA[How I designed and built a B2C e-commerce web application — functional specs, an EAV database model, UML use-case analysis, and Stripe/Shippo API integration.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://rndagano.github.io/assets/images/og-image.png" /><media:content medium="image" url="https://rndagano.github.io/assets/images/og-image.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>