<?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: Amin Haiqal</title>
    <description>The latest articles on Forem by Amin Haiqal (@amin_haiqal_2b12dc1098e18).</description>
    <link>https://forem.com/amin_haiqal_2b12dc1098e18</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%2F3899185%2F21f64187-d80c-4ef3-9f56-74fb7c0b1a8b.png</url>
      <title>Forem: Amin Haiqal</title>
      <link>https://forem.com/amin_haiqal_2b12dc1098e18</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/amin_haiqal_2b12dc1098e18"/>
    <language>en</language>
    <item>
      <title>Building a Strata Finance System (Because the Current Way Isn’t Working)</title>
      <dc:creator>Amin Haiqal</dc:creator>
      <pubDate>Wed, 29 Apr 2026 17:29:30 +0000</pubDate>
      <link>https://forem.com/amin_haiqal_2b12dc1098e18/building-a-strata-finance-system-because-the-current-way-isnt-working-3j9</link>
      <guid>https://forem.com/amin_haiqal_2b12dc1098e18/building-a-strata-finance-system-because-the-current-way-isnt-working-3j9</guid>
      <description>&lt;p&gt;There’s a quiet kind of chaos in how many strata communities manage their finances.&lt;/p&gt;

&lt;p&gt;On the surface, everything looks fine. There’s a spreadsheet somewhere. Numbers are filled in. Rows are coloured. Someone is “handling it.”&lt;/p&gt;

&lt;p&gt;But the moment you start asking simple questions, things begin to fall apart.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who still owes money?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How much?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Since when?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Did they already send their payment?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Was it verified?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who followed up last?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No one has a clean answer. Not immediately. Not confidently.&lt;/p&gt;

&lt;p&gt;Because the answers don’t live in one place.&lt;/p&gt;

&lt;p&gt;They live across spreadsheets, WhatsApp conversations, emails, and memory. Sometimes in someone’s head. Sometimes nowhere at all.&lt;/p&gt;




&lt;p&gt;Over time, the system becomes less of a system and more of a patchwork.&lt;/p&gt;

&lt;p&gt;A spreadsheet is used to track balances. Another column is used to mark who has paid. Colours are introduced to signal urgency. &lt;strong&gt;Green means safe&lt;/strong&gt;. &lt;strong&gt;Red means overdue&lt;/strong&gt;. &lt;strong&gt;Yellow means “needs attention,”&lt;/strong&gt; whatever that means this week.&lt;/p&gt;

&lt;p&gt;Meanwhile, payment proofs arrive through WhatsApp. Screenshots, bank slips, forwarded messages. They get buried under new messages, lost in group chats, or forgotten entirely.&lt;/p&gt;

&lt;p&gt;Follow-ups happen, but inconsistently. One admin calls. Another sends a message. Someone promises to pay. There is no record of it. A week later, the cycle repeats.&lt;/p&gt;

&lt;p&gt;Residents dispute their balances. Admins double-check manually. Time is spent verifying things that should have been obvious.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nothing is technically broken. But nothing is reliable either.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;At some point, it becomes clear that the problem is not effort.&lt;/p&gt;

&lt;p&gt;It’s structure.&lt;/p&gt;

&lt;p&gt;So I started thinking about what a better system would look like; not in terms of features, but in terms of clarity. What if there was a single place that could answer, without hesitation:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Who owes what, since when, and what has been done about it?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That question became the starting point.&lt;/p&gt;




&lt;p&gt;The system I’m building is not meant to replace people. It’s meant to replace the uncertainty around the work they are already doing.&lt;/p&gt;

&lt;p&gt;Every charge—maintenance fees, sinking funds, penalties—should be recorded clearly, tied to a specific unit, with a known due date.&lt;/p&gt;

&lt;p&gt;Every payment should be traceable. If a resident submits proof, it should not disappear into a chat thread. It should enter a flow. It should be verified or rejected. It should leave a trace.&lt;/p&gt;

&lt;p&gt;Balances should not require manual calculation. They should exist as a result of what has already happened—charges issued, payments verified. Nothing more, nothing less.&lt;/p&gt;

&lt;p&gt;Overdue units should not be guessed. They should be classified automatically, based on how long they’ve been unpaid, or whether they’ve ever paid at all.&lt;/p&gt;

&lt;p&gt;And follow-ups; arguably the most human part of the process—should still be tracked. Not to control people, but to ensure continuity. So that when someone looks at a unit, they don’t just see numbers. They see history.&lt;/p&gt;

&lt;p&gt;What was said. What was promised. What comes next.&lt;/p&gt;




&lt;p&gt;Some residents won’t be able to pay everything at once. That’s reality.&lt;/p&gt;

&lt;p&gt;So the system needs to handle that too. Installment plans shouldn’t live in scattered notes or informal agreements. They should be structured, visible, and measurable. Something both sides can understand.&lt;/p&gt;




&lt;p&gt;When all of this comes together, the goal isn’t complexity.&lt;/p&gt;

&lt;p&gt;It’s clarity.&lt;/p&gt;

&lt;p&gt;A dashboard that doesn’t try to impress, but simply shows what matters. Total outstanding amounts. Overdue units. Payments waiting to be verified. The cases that need attention today.&lt;/p&gt;

&lt;p&gt;Not more data. Just the right data, in the right place.&lt;/p&gt;




&lt;p&gt;This is not just software for the sake of it.&lt;/p&gt;

&lt;p&gt;It’s an attempt to turn a fragmented, manual workflow into something dependable. Something that reduces doubt instead of adding to it.&lt;/p&gt;




&lt;p&gt;I’m building this in public because I don’t think this problem is unique.&lt;/p&gt;

&lt;p&gt;If you’ve ever had to manage payments, follow up on overdue accounts, or piece together financial records from different places, you’ve probably seen some version of this.&lt;/p&gt;

&lt;p&gt;So this is as much an exploration as it is a build.&lt;/p&gt;

&lt;p&gt;What does a reliable workflow actually look like?&lt;/p&gt;

&lt;p&gt;And how do we get there, step by step?&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;That’s what I’ll be figuring out next.&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;If you're dealing with this kind of workflow and trying to make it more reliable, I’d be interested to hear how you’re approaching it.&lt;/p&gt;

&lt;p&gt;I’m currently building in this space, and also open to working with teams that want to improve their internal systems.&lt;/p&gt;

&lt;p&gt;You can reach me here:&lt;br&gt;
&lt;a href="https://axelyn.com/" rel="noopener noreferrer"&gt;https://axelyn.com/&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>From Inventory Chaos to a Real-Time Command Center</title>
      <dc:creator>Amin Haiqal</dc:creator>
      <pubDate>Mon, 27 Apr 2026 09:40:32 +0000</pubDate>
      <link>https://forem.com/amin_haiqal_2b12dc1098e18/from-inventory-chaos-to-a-real-time-command-center-12gl</link>
      <guid>https://forem.com/amin_haiqal_2b12dc1098e18/from-inventory-chaos-to-a-real-time-command-center-12gl</guid>
      <description>&lt;p&gt;&lt;strong&gt;A system that doesn’t exist yet but probably should&lt;/strong&gt;&lt;/p&gt;




&lt;p&gt;At some point, every growing eCommerce system hits a strange wall.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Not traffic.&lt;/li&gt;
&lt;li&gt;Not sales.&lt;/li&gt;
&lt;li&gt;Not even infrastructure.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Just… &lt;strong&gt;inventory&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;It usually starts small.&lt;/p&gt;

&lt;p&gt;A product goes out of stock on one platform but still shows as available on another. An order slips through. Then another. Someone from operations jumps in, exports a CSV, fixes a number, uploads it back and by then those problems solved.&lt;/p&gt;

&lt;p&gt;Until it happens again.&lt;/p&gt;

&lt;p&gt;Now imagine that but across:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shopify&lt;/li&gt;
&lt;li&gt;multiple marketplaces&lt;/li&gt;
&lt;li&gt;warehouse systems&lt;/li&gt;
&lt;li&gt;internal spreadsheets&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And none of them agree with each other.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Moment Things Stop Making Sense
&lt;/h3&gt;

&lt;p&gt;There’s a point where teams stop asking:&lt;/p&gt;

&lt;p&gt;“Why is this wrong?”&lt;/p&gt;

&lt;p&gt;…and start asking:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Which system is correct?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That’s when you know the problem isn’t operational anymore. It’s &lt;strong&gt;architectural&lt;/strong&gt;. Because under the surface, every system believes it owns the truth.&lt;/p&gt;




&lt;h3&gt;
  
  
  A System With Too Many Writers
&lt;/h3&gt;

&lt;p&gt;Inventory updates are happening everywhere:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;orders reduce stock in Shopify&lt;/li&gt;
&lt;li&gt;warehouses adjust quantities&lt;/li&gt;
&lt;li&gt;internal tools override numbers manually&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each system writes data and none of them coordinate. From a distributed systems perspective, this is almost guaranteed to fail not because of bugs but because &lt;strong&gt;there is no single authority over state&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Hidden Cost
&lt;/h3&gt;

&lt;p&gt;At first, it looks like noise:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a few mismatches&lt;/li&gt;
&lt;li&gt;some manual fixes&lt;/li&gt;
&lt;li&gt;occasional refunds&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But over time, the system starts leaking:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;overselling becomes normal&lt;/li&gt;
&lt;li&gt;stockouts happen while inventory still exists&lt;/li&gt;
&lt;li&gt;operations slow down&lt;/li&gt;
&lt;li&gt;decisions rely on outdated data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eventually, growth itself becomes constrained. Not by demand. But by uncertainty.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Shift in Thinking
&lt;/h3&gt;

&lt;p&gt;At this point, it’s tempting to patch things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;add more sync jobs&lt;/li&gt;
&lt;li&gt;increase polling frequency&lt;/li&gt;
&lt;li&gt;introduce more scripts&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;But those don’t solve the problem. They just move it around. The real shift comes from re-framing the question and not&lt;/p&gt;

&lt;p&gt;“How do we sync systems better?”&lt;/p&gt;

&lt;p&gt;but&lt;/p&gt;

&lt;p&gt;“What if no system is allowed to update inventory directly?”&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;That’s where this design begins.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  A Different Approach: Treat Everything as an Event
&lt;/h3&gt;

&lt;p&gt;Instead of letting systems mutate inventory freely:&lt;/p&gt;

&lt;p&gt;Every change becomes an event.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;an order is placed&lt;/li&gt;
&lt;li&gt;stock is adjusted&lt;/li&gt;
&lt;li&gt;a warehouse update happens&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nothing updates inventory directly anymore. Everything reports that something happened. &lt;/p&gt;

&lt;p&gt;That single constraint changes everything.&lt;/p&gt;




&lt;h3&gt;
  
  
  Introducing a Controlled Flow
&lt;/h3&gt;

&lt;p&gt;Once everything is an event, the system can enforce a pipeline:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Event → Queue → Processing → Central State → Sync Out&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Instead of chaos, there is flow we can do and instead of conflict, there is order we can make.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Where the Real Control Happens?&lt;/strong&gt;&lt;br&gt;
At the center of this design is something intentionally restrictive:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A central inventory service.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It has one job which is maintain the only version of truth. No marketplace. No warehouse system. No internal tool. None of them are allowed to write inventory directly anymore. They can only send signals.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But why This Matters More Than It Seems?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn’t just about structure, it’s about control over state because once there is only one place where inventory can change:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;conflicts can be detected&lt;/li&gt;
&lt;li&gt;duplicates can be ignored&lt;/li&gt;
&lt;li&gt;rules can be enforced consistently&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without that, consistency is mostly luck. Speaking reality, things will still go wrong even with this design. The system has to deal with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;duplicate events&lt;/li&gt;
&lt;li&gt;delayed updates&lt;/li&gt;
&lt;li&gt;simultaneous changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the pipeline need to include safeguards:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;idempotency (so the same event doesn’t apply twice)&lt;/li&gt;
&lt;li&gt;timestamps (to reject stale updates)&lt;/li&gt;
&lt;li&gt;versioning (to prevent overwrites)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  The Subtle but Important Flip
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Before:&lt;/strong&gt;&lt;br&gt;
Every system tries to stay in sync with every other system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;After:&lt;/strong&gt;&lt;br&gt;
Every system stays in sync with one system.&lt;/p&gt;

&lt;p&gt;That shift reduces complexity more than any optimization ever could then something interesting happens.Everything will became simpler once the central state is reliable&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;syncing outward is predictable&lt;/li&gt;
&lt;li&gt;dashboards reflect reality&lt;/li&gt;
&lt;li&gt;operations stop guessing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For the first time, someone can ask:&lt;/p&gt;

&lt;p&gt;“What’s our stock right now?”&lt;/p&gt;

&lt;p&gt;…and actually trust the answer.&lt;/p&gt;

&lt;p&gt;This System Doesn’t Exist (Yet)&lt;/p&gt;

&lt;p&gt;This is still a design.&lt;/p&gt;

&lt;p&gt;A proposal. A system on paper.&lt;/p&gt;

&lt;p&gt;But the problems it addresses are very real and I believe very common.&lt;/p&gt;

&lt;p&gt;And the pattern shows up everywhere, whenever multiple systems are allowed to mutate the same data independently…&lt;/p&gt;

&lt;p&gt;…consistency becomes an accident.&lt;/p&gt;




&lt;h3&gt;
  
  
  Final Thought
&lt;/h3&gt;

&lt;p&gt;Most inventory problems don’t come from bad tools. They come from systems that were never designed to agree. Fixing that isn’t about adding more logic, it’s about deciding very clearly where truth is allowed to live.&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>distributedsystems</category>
      <category>webdev</category>
      <category>systemdesign</category>
    </item>
  </channel>
</rss>
