<?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: Simo Roikonen</title>
    <description>The latest articles on Forem by Simo Roikonen (@roikonen).</description>
    <link>https://forem.com/roikonen</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%2F1694511%2F4c828eae-e4ac-48e8-9f35-f1da7157421c.jpg</url>
      <title>Forem: Simo Roikonen</title>
      <link>https://forem.com/roikonen</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/roikonen"/>
    <language>en</language>
    <item>
      <title>From CRUD to Real-Time Analytics: Why Business Events Matter</title>
      <dc:creator>Simo Roikonen</dc:creator>
      <pubDate>Fri, 17 Jan 2025 07:16:22 +0000</pubDate>
      <link>https://forem.com/roikonen/from-crud-to-real-time-analytics-why-business-events-matter-2klg</link>
      <guid>https://forem.com/roikonen/from-crud-to-real-time-analytics-why-business-events-matter-2klg</guid>
      <description>&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%2Fdu9kaqi29xkk6tix5kfl.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%2Fdu9kaqi29xkk6tix5kfl.png" alt="Challenge" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Many &lt;strong&gt;operational systems&lt;/strong&gt; (e.g. SaaS platforms and transactional systems) are built around &lt;strong&gt;CRUD operations&lt;/strong&gt; and &lt;strong&gt;batch processing&lt;/strong&gt;, but these approaches often fall short when businesses demand &lt;strong&gt;real-time insights&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A common intermediate step is &lt;strong&gt;Change Data Capture (CDC)&lt;/strong&gt;, which reflects changes at the database level in near-real time. However, CDC primarily captures &lt;strong&gt;raw data changes&lt;/strong&gt; (e.g., inserts, updates, deletes) and doesn’t provide the &lt;strong&gt;context&lt;/strong&gt; of what those changes mean in the real world. For example, CDC might log an update to a database row, but it doesn’t tell you that the event was actually an “Order Shipped.”&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%2Fv0nsv2absleorbcxa16n.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%2Fv0nsv2absleorbcxa16n.png" alt="CDC" width="800" height="226"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where &lt;strong&gt;business events&lt;/strong&gt; come in. Business events are &lt;strong&gt;high-quality, domain-specific data&lt;/strong&gt; — they describe meaningful occurrences like “Payment Processed” or “Customer Registered.” Unlike raw data changes, these events provide the context and structure needed to &lt;strong&gt;power real-time analytics&lt;/strong&gt; and unlock the full potential of &lt;strong&gt;AI and machine learning&lt;/strong&gt;. These events, often called &lt;strong&gt;domain events&lt;/strong&gt;, form the backbone of event-driven systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Business/Domain Events in Practice
&lt;/h2&gt;

&lt;p&gt;For reliably generating, publishing and consuming these domain events, patterns like the &lt;strong&gt;transactional outbox&lt;/strong&gt;, &lt;strong&gt;subscription&lt;/strong&gt;, and &lt;strong&gt;event sourcing&lt;/strong&gt; play crucial roles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Transactional outbox&lt;/strong&gt; ensures that events are published consistently as part of the same database transaction that writes the underlying data, providing robustness even during failures.&lt;/li&gt;
&lt;/ul&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%2F78j64fwzrmg6twly6esz.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%2F78j64fwzrmg6twly6esz.png" alt="Transactional outbox" width="800" height="365"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Subscription pattern&lt;/strong&gt; enables systems to listen for and react to specific events in near real-time, enabling event-driven workflows and processes.&lt;/li&gt;
&lt;/ul&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%2F772xpw92ai3o8ojgeq4e.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%2F772xpw92ai3o8ojgeq4e.png" alt="Subscription pattern" width="800" height="666"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Event sourcing&lt;/strong&gt; goes further by making events the source of truth, storing all changes as an immutable sequence of events — empowering systems with a full audit history and the ability to reprocess or replay events at any time.&lt;/li&gt;
&lt;/ul&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%2Ffdx75eii613jogkw13o6.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%2Ffdx75eii613jogkw13o6.png" alt="Event sourcing" width="800" height="716"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;By adopting &lt;strong&gt;event-driven architectures&lt;/strong&gt; and producing &lt;strong&gt;event streams&lt;/strong&gt;, organizations can move beyond traditional paradigms. This approach enables:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Timely, actionable insights through real-time analytics.&lt;/li&gt;
&lt;li&gt;A foundation of rich, contextual data for AI and ML applications.&lt;/li&gt;
&lt;li&gt;Real-time notifications to trigger actions and inform stakeholders instantly.&lt;/li&gt;
&lt;li&gt;Better system design with domain-driven thinking at the core.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt; Core domains in modern scalable operational systems should embrace business/domain events over Change Data Capture (CDC). Domain-driven design and event-driven architecture pave the way for creating future-proof systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://roikonen.github.io/scalablemodeling/" rel="noopener noreferrer"&gt;Scalable modeling&lt;/a&gt; as an event-centric approach provides a strong foundation for building long-lasting operational systems that deliver low latency and enable real-time analytics at any scale.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>dddesign</category>
      <category>eventdriven</category>
      <category>transactionaloutbox</category>
      <category>changedatacapture</category>
    </item>
    <item>
      <title>Scalable Modeling – An Event-centric Approach</title>
      <dc:creator>Simo Roikonen</dc:creator>
      <pubDate>Fri, 29 Nov 2024 10:54:18 +0000</pubDate>
      <link>https://forem.com/roikonen/scalable-modeling-an-event-centric-approach-2d18</link>
      <guid>https://forem.com/roikonen/scalable-modeling-an-event-centric-approach-2d18</guid>
      <description>&lt;p&gt;After 10 years in software scalability and distributed systems, I’m celebrating by gathering what I’ve learned into a webpage — a modeling technique for scalable systems aptly called &lt;a href="https://roikonen.github.io/scalablemodeling/" rel="noopener noreferrer"&gt;ScalableModeling &lt;/a&gt; 🤓. &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%2F5rxar7tg7j8vtnvjnbdz.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%2F5rxar7tg7j8vtnvjnbdz.png" alt="Image description" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope it helps someone out there!&lt;/p&gt;

</description>
      <category>eventdriven</category>
    </item>
    <item>
      <title>Your organization is perfectly designed to produce the results it gets</title>
      <dc:creator>Simo Roikonen</dc:creator>
      <pubDate>Thu, 27 Jun 2024 15:24:03 +0000</pubDate>
      <link>https://forem.com/roikonen/your-organization-is-perfectly-designed-to-produce-the-results-it-gets-4pm</link>
      <guid>https://forem.com/roikonen/your-organization-is-perfectly-designed-to-produce-the-results-it-gets-4pm</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4o4f1f7hzfvsy8ykue8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj4o4f1f7hzfvsy8ykue8.jpeg" alt="high cohesion and low coupling" width="800" height="752"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Leaders should ensure dev teams maintain &lt;strong&gt;high cohesion and low coupling&lt;/strong&gt; to improve quality and increase overall productivity.&lt;/p&gt;

&lt;p&gt;Architects should ensure components maintain &lt;strong&gt;high cohesion and low coupling&lt;/strong&gt; to enhance system maintainability, scalability and reliability.&lt;/p&gt;

&lt;p&gt;WHY should you foster high cohesion and low coupling in teams?&lt;br&gt;
🎯 &lt;strong&gt;Better Focus:&lt;/strong&gt; Teams with clear, unified goals (high cohesion) are more productive and effective.&lt;br&gt;
💪 &lt;strong&gt;Robust Code:&lt;/strong&gt; Expertise and focus lead to higher quality, more reliable software, and easier testing.&lt;br&gt;
🤝 &lt;strong&gt;Fosters Shared Ownership:&lt;/strong&gt; Team members are familiar with the codebase and can seamlessly continue work if someone leaves.&lt;br&gt;
🌐 &lt;strong&gt;Adaptability:&lt;/strong&gt; Independent, low-coupled teams can respond quickly to new opportunities and challenges.&lt;br&gt;
🔄 &lt;strong&gt;Flexibility:&lt;/strong&gt; Reduced interdependencies allow for easy reconfiguration to meet new priorities.&lt;br&gt;
💡 &lt;strong&gt;Innovation:&lt;/strong&gt; Autonomy via low coupling fosters creativity and continuous improvement.&lt;/p&gt;

&lt;p&gt;If you think about it, &lt;strong&gt;your organization is perfectly designed to produce the results it gets&lt;/strong&gt;. So, could it be that by aligning teams and components, both having high cohesion and low coupling, you can achieve higher quality, better maintainability and faster development velocity? 🤔&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Leaders can't do this alone, architects can't do this alone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Involving architects in organizational design helps to achieve this. This way, leaders can ensure that both the team structure and the software architecture align with the principles of high cohesion and low coupling, driving value creation, speed and agility. 🚀&lt;/p&gt;

&lt;p&gt;What strategies, tools, or methods have you found effective in fostering high cohesion and low coupling in your teams?&lt;/p&gt;

&lt;p&gt;My two cents:&lt;br&gt;
1️⃣ &lt;strong&gt;Domain-Driven Design (DDD):&lt;/strong&gt; Utilizing DDD principles to structure teams around business domains. This ensures that teams have a deep understanding of the domain they are working in, which enhances cohesion and allows for more effective problem-solving and decision-making.&lt;br&gt;
2️⃣ &lt;strong&gt;Team Topologies:&lt;/strong&gt; Applying the Team Topologies framework to define clear team boundaries and interaction patterns. This helps in designing teams that are aligned with the software architecture and business needs, promoting low coupling and high cohesion.&lt;/p&gt;

</description>
      <category>ddd</category>
      <category>productivity</category>
      <category>architecture</category>
      <category>teamtopologies</category>
    </item>
  </channel>
</rss>
