<?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>DEV Community: IcePanel</title>
    <description>The latest articles on DEV Community by IcePanel (@icepanel).</description>
    <link>https://dev.to/icepanel</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%2F955451%2F6d764721-5578-4ef6-876e-0a68c3cd5df5.jpg</url>
      <title>DEV Community: IcePanel</title>
      <link>https://dev.to/icepanel</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/icepanel"/>
    <language>en</language>
    <item>
      <title>Microservice catalogs and the best tools for the job</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Thu, 05 Oct 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/icepanel/microservice-catalogs-and-the-best-tools-for-the-job-2p1</link>
      <guid>https://dev.to/icepanel/microservice-catalogs-and-the-best-tools-for-the-job-2p1</guid>
      <description>&lt;p&gt;All about microservice catalogs and the top tools for an up-to-date list of your services&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A microservice catalog is a central repository that is the source of truth for all entities in your software architecture and the relationships between them.&lt;/li&gt;
&lt;li&gt;Microservice catalogs give teams visibility into services so they can reuse existing functionality and ensure changes are compatible with the wider ecosystem.&lt;/li&gt;
&lt;li&gt;Microservice catalogs store information such as name, description, owner, on-call, dependencies, runtime, packages, API specs, environment and links.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;In recent years, many engineering teams have transitioned to microservice architectures, and there's no doubt it has provided many benefits, such as stability and re-usability. As architectures reach hundreds and even thousands of microservices distributed across many teams, keeping track of what exists and who the point of contact is becomes a challenge.&lt;/p&gt;

&lt;p&gt;This is where microservice catalogs can help; let’s jump right into it.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❓ What is a microservice catalog?
&lt;/h2&gt;

&lt;p&gt;A microservice or service catalog is a central, up-to-date repository that lists your software architecture's microservices. It is the source of truth for all entities in your software system and the relationships between them.&lt;/p&gt;

&lt;p&gt;The goal is to give teams and individuals visibility into the services available so they can properly reuse existing functionality and ensure their changes are compatible with the wider ecosystem. A simple user interface makes it easy for developers to discover the information they need to introduce new services, change existing ones and deprecate old ones.&lt;/p&gt;

&lt;p&gt;Microservice catalogs help distribute previously tribal knowledge across teams and departments to ensure everyone is on the same page working in the ecosystem.&lt;/p&gt;

&lt;h2&gt;
  
  
  📦 What information should catalogs store?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Name and description&lt;/strong&gt; to identify the service and provide a high-level summary for anyone who is not familiar with the purpose and responsibility of the service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Owning team or individual&lt;/strong&gt; for anyone who needs to contact the person responsible for a specific microservice so they can ask a question or request changes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;On-call team members&lt;/strong&gt; in case an incident occurs that is caused by or affects a given microservice in which only specific team members have domain expertise.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Dependencies&lt;/strong&gt; for visibility into other services needed to function or services that may rely on this. Seeing dependencies makes it possible to see how much impact making a change may have on other parts of the architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Runtime and packages&lt;/strong&gt; to give an overview of what technologies are being used in this microservice and can provide insights into issues caused by specific technologies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags or labels&lt;/strong&gt; allow the service to be discovered when filtering the list to a smaller subset. For example, each service could be tagged with its version numberer or risk level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;API specifications&lt;/strong&gt; such as &lt;a href="https://swagger.io/specification" rel="noopener noreferrer"&gt;OpenAPI&lt;/a&gt; or &lt;a href="https://protobuf.dev" rel="noopener noreferrer"&gt;Protocol Buffers&lt;/a&gt; give insight into how to integrate with the service and allow the generation of client-side libraries for communication.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Deployment status&lt;/strong&gt; for visibility on which environments the service has been deployed into, such as the testing, staging or production environment. This helps developers know if a service is ready to be depended upon.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;External links&lt;/strong&gt; to source control, CI/CD pipelines, documentation, cloud platforms or live websites. A great resource to allow developers to quickly jump to other places where the microservice exists or is referenced.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏢 Service catalogs for enterprise architectures
&lt;/h2&gt;

&lt;p&gt;While a microservice catalog may be great for most organizations looking to keep track of their services, it may not be broad enough for larger enterprises with a complex landscape.&lt;/p&gt;

&lt;p&gt;A typical enterprise architecture often contains legacy services, monoliths, deprecated technologies and other components that don’t fit into the bracket of a microservice. For these situations, a more flexible tool that can represent a wide range of IT assets and service types would be more suitable.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧰 Top tools for microservice catalogs
&lt;/h2&gt;

&lt;p&gt;Microservice catalog tooling is still relatively new but is becoming more popular for teams adopting microservice architectures. We’ve collated three tools to try out in your team.&lt;/p&gt;

&lt;h3&gt;
  
  
  1️⃣ &lt;a href="https://backstage.io/" rel="noopener noreferrer"&gt;Backstage.io&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://backstage.io" rel="noopener noreferrer"&gt;Backstage&lt;/a&gt; is an open-source platform from Spotify for maintaining your software catalog through source control and exposing it through a unified developer portal. Backstage supports various projects, such as microservices, libraries, data pipelines, websites, and ML models. It provides templates for quickly creating new services with standardized tooling and frameworks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fmicroservice-catalogs-and-the-best-tools-for-the-job%2Fbackstage.io.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fmicroservice-catalogs-and-the-best-tools-for-the-job%2Fbackstage.io.webp" title="Spotify Backstage microservice catalog" alt="Spotify Backstage microservice catalog!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2️⃣ &lt;a href="https://www.cortex.io" rel="noopener noreferrer"&gt;Cortex.io&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.cortex.io" rel="noopener noreferrer"&gt;Cortex&lt;/a&gt; is a service catalog for helping teams track their microservice ecosystem. Catalogs can be created through the user interface or source control using a YAML entity description. The cortex software catalog tightly integrates with its ecosystem to provide project scaffolding, team tracking and integrations with 3rd party tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fmicroservice-catalogs-and-the-best-tools-for-the-job%2Fcortex.io.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fmicroservice-catalogs-and-the-best-tools-for-the-job%2Fcortex.io.webp" title="Cortex microservice catalog" alt="Cortex microservice catalog!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  3️⃣ &lt;a href="https://www.opslevel.com" rel="noopener noreferrer"&gt;OpsLevel.com&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.opslevel.com" rel="noopener noreferrer"&gt;OpsLevel&lt;/a&gt; detects services from various 3rd party integrations and lists them in a centralized and up-to-date view. It surfaces markdown documentation in the repository to give your team instant context and details about each service. OpsLevel integrates with other services, such as incident management tools, to provide deeper insight into what is happening right now in your software architecture.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fmicroservice-catalogs-and-the-best-tools-for-the-job%2Fopslevel.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fmicroservice-catalogs-and-the-best-tools-for-the-job%2Fopslevel.webp" title="OpsLevel microservice catalog" alt="OpsLevel microservice catalog!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;As organizations move to microservice architectures, catalog tools will become essential for tracking hundreds of services and other entities in the software architecture. The data queried from these tools gives teams insights into their architecture and helps them make changes safely, aligning them on common goals across services and teams.&lt;/p&gt;

&lt;p&gt;Let us know if you’ve found other tooling for microservice catalogs that we should include on this list!&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to create interactive zoomable software architecture diagrams</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Tue, 05 Sep 2023 16:23:03 +0000</pubDate>
      <link>https://dev.to/icepanel/how-to-create-interactive-zoomable-software-architecture-diagrams-5315</link>
      <guid>https://dev.to/icepanel/how-to-create-interactive-zoomable-software-architecture-diagrams-5315</guid>
      <description>&lt;p&gt;Designing layered software architecture diagrams with IcePanel&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;When using abstractions to communicate software architectures, it’s important to choose the right terminology and level of detail based on the audience.&lt;/li&gt;
&lt;li&gt;The &lt;a href="https://c4model.com" rel="noopener noreferrer"&gt;C4 model&lt;/a&gt; provides common abstractions with a hierarchical structure that allows diagrams to be tailored to the audience's technical ability.&lt;/li&gt;
&lt;li&gt;IcePanel supports the C4 model's hierarchical diagram types, providing interactive diagrams that can be zoomed in and out of different levels of technical detail.&lt;/li&gt;
&lt;li&gt;Simple diagrams created at a high-level view can be a superpower to help bridge communication gaps between technical and non-technical team members.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;We often use abstractions in software engineering to communicate complex architectures and software systems. In this article, we’ll discuss how abstractions are inherently hierarchical and how the &lt;a href="https://c4model.com" rel="noopener noreferrer"&gt;C4 model&lt;/a&gt; provides a nested structure for defining your software architecture. We’ll then cover how IcePanel allows you to create interactive and zoomable diagrams for your audience to zoom in and out of different levels of technical detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  🖼️ Communicate using abstractions
&lt;/h2&gt;

&lt;p&gt;When discussing software, engineers almost always use abstractions to describe concepts, ideas and services at higher levels. The software itself consists of layers of patterns, services, code, and protocols, down to low-level machine code. It’s important to choose the right level of detail when talking about software architectures, which comes naturally to most software engineers.&lt;/p&gt;

&lt;p&gt;Visual diagrams are one of the primary forms of communicating architectures in most teams, and surprisingly, most don’t consider or separate the different levels of abstraction in their diagrams. For example, a diagram with mixed abstractions might show labels containing high-level business concerns and low-level technical details about protocols. This can be confusing to non-technical audiences, so making sure the right level abstraction is being used helps answer the right questions.&lt;/p&gt;

&lt;p&gt;Business people usually gain more value from a higher level of detail, while engineers are more concerned about low-level technical details. As engineers are usually the ones who know the systems, diagrams we often see are created at lower levels of abstractions and concepts.&lt;/p&gt;

&lt;p&gt;Simple diagrams created at a high-level view can be a superpower to help bridge communication gaps between technical and non-technical team members.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧅 Standardize abstractions with the C4 model
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://twitter.com/simonbrown" rel="noopener noreferrer"&gt;Simon Brown&lt;/a&gt; created the &lt;a href="https://c4model.com" rel="noopener noreferrer"&gt;C4 model&lt;/a&gt; to formalize a set of common abstractions he used when drawing software architecture diagrams. Formalizing the abstractions and diagram types with the C4 model means everyone on the team uses the same language to communicate. This is a powerful tool for cross-team collaboration as it ensures everyone produces consistent and meaningful diagrams across the organization.&lt;/p&gt;

&lt;p&gt;The C4 model essentially consists of two things:&lt;/p&gt;

&lt;p&gt;1️⃣ A set of hierarchical abstractions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Software systems&lt;/li&gt;
&lt;li&gt;Containers&lt;/li&gt;
&lt;li&gt;Components&lt;/li&gt;
&lt;li&gt;Code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;2️⃣ A set of hierarchical diagrams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;System context&lt;/li&gt;
&lt;li&gt;Containers&lt;/li&gt;
&lt;li&gt;Components&lt;/li&gt;
&lt;li&gt;Code&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  📦 C4 model abstractions
&lt;/h2&gt;

&lt;p&gt;The abstractions in the C4 model are designed to be hierarchical, making them perfect for telling a story from a high level, increasing in technical detail as you zoom further into the abstractions.&lt;/p&gt;

&lt;p&gt;There are four abstraction types:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧍 Person&lt;/strong&gt;&lt;br&gt;
The end user who uses the systems.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: Customer, admin user or employee.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🏢 System&lt;/strong&gt;&lt;br&gt;
The highest level of abstraction delivers value to end users, whether they are human or not. Systems are often owned by a development team.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Examples: SendGrid is an external system.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📦 Container&lt;/strong&gt;&lt;br&gt;
Applications and data stores that make up a system. These are independently deployable and runnable. (Not to be confused with Docker containers)&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example: API service, front-end application or mobile app.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧩 Component&lt;/strong&gt;&lt;br&gt;
Building blocks and modules that make up each container.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example: Authentication module or payment card validator.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🖼️ C4 model diagrams
&lt;/h2&gt;

&lt;p&gt;Each diagram in the C4 model prescribes which abstractions can be drawn at each level to ensure the high-level diagrams remain high-level.&lt;/p&gt;

&lt;p&gt;There are four diagram levels:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Level 1 - System context diagram&lt;/strong&gt;&lt;br&gt;
A high-level overview of how your users interact with the internal and external systems to get value.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Audience: Architects, developers, product and business. For technical and non-technical audiences.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scope: Persons and systems.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Level 2 - Container diagram&lt;/strong&gt;&lt;br&gt;
A zoomed-in view of one system that shows the running containers inside it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Audience: Architects, developers and product. For high-level technical audiences.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scope: Persons, systems and containers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Level 3 - Component diagram&lt;/strong&gt;&lt;br&gt;
A zoomed-in view of one container that shows the components making it up.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Audience: Architects and developers. For low-level technical audiences.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scope: Persons, systems, containers and components.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Level 4 - Code diagram&lt;/strong&gt;&lt;br&gt;
Usually in the form of UML class diagrams that are ideally autogenerated from the actual code. This level is rarely used as it goes into too much technical detail for most teams.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Audience: Architects and developers. For low-level technical audiences.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Scope: Persons, systems, containers and components.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🧊 Create zoomable diagrams in IcePanel
&lt;/h2&gt;

&lt;p&gt;When we discovered the &lt;a href="https://c4model.com" rel="noopener noreferrer"&gt;C4 model&lt;/a&gt; at IcePanel, we fell in love with how simple and effective it was at communicating software architectures to both technical and non-technical people in the team.&lt;/p&gt;

&lt;p&gt;The hierarchical nature of the C4 model feels like it wants to be consumed using an interactive and zoomable interface so anyone can zoom in for more technical detail. So IcePanel supports hierarchical diagrams out of the box using the C4 model abstractions to navigate through different levels of detail.&lt;/p&gt;

&lt;p&gt;You can easily create interactive and zoomable diagrams in IcePanel using the following steps:&lt;/p&gt;

&lt;p&gt;1️⃣ Create a system abstraction in the top-level diagram:&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%2Fassets.icepanel.io%2Fblog%2Fhow-to-create-interactive-zoomable-software-architecture-diagrams%2Flevel-1.webp" 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%2Fassets.icepanel.io%2Fblog%2Fhow-to-create-interactive-zoomable-software-architecture-diagrams%2Flevel-1.webp" title="Level 1" alt="Level 1!" width="800" height="880"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ Zoom into the system using the magnifying glass button in the top left corner:&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%2Fassets.icepanel.io%2Fblog%2Fhow-to-create-interactive-zoomable-software-architecture-diagrams%2Flevel-2.webp" 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%2Fassets.icepanel.io%2Fblog%2Fhow-to-create-interactive-zoomable-software-architecture-diagrams%2Flevel-2.webp" title="Level 2" alt="Level 2!" width="800" height="654"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3️⃣ Create an app or store (container) abstraction inside the system and continue zooming in:&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%2Fassets.icepanel.io%2Fblog%2Fhow-to-create-interactive-zoomable-software-architecture-diagrams%2Flevel-3.webp" 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%2Fassets.icepanel.io%2Fblog%2Fhow-to-create-interactive-zoomable-software-architecture-diagrams%2Flevel-3.webp" title="Level 3" alt="Level 3!" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The model tree shows you’ve created diagrams at two levels of abstraction, allowing your audience to zoom in and out depending on how much technical detail they need to see.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;It’s important to consider how we use and communicate in abstractions daily. Improving the consistency of communication across teams can be a great way to get everyone on the same page and increase productivity.&lt;/p&gt;

&lt;p&gt;Let us know if there’s anything we’ve missed!&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Top 6 tools for text-based UML sequence diagrams</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Wed, 16 Aug 2023 14:00:00 +0000</pubDate>
      <link>https://dev.to/icepanel/top-6-tools-for-text-based-uml-sequence-diagrams-7ce</link>
      <guid>https://dev.to/icepanel/top-6-tools-for-text-based-uml-sequence-diagrams-7ce</guid>
      <description>&lt;p&gt;Comparison and features for tools that create UML sequence diagrams with code&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://en.wikipedia.org/wiki/Unified_Modeling_Language" rel="noopener noreferrer"&gt;UML (Unified Modelling Language)&lt;/a&gt; consists of 14 diagram types for visualizing and communicating software architectures. Of those, sequence diagrams are one of the most commonly used in modern software engineering.&lt;/p&gt;

&lt;p&gt;The tools listed below allow the quick and easy creation of UML sequence diagrams using declarative languages. Text-based allows them to be easily edited, checked into source control and manipulated in existing IDEs.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ D2
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://d2lang.com/tour/sequence-diagrams/" rel="noopener noreferrer"&gt;D2&lt;/a&gt; is a modern declarative language for designing diagrams with text. It supports a variety of different diagram types as well as traditional UML sequence diagrams. D2 is free and open-source under the &lt;a href="https://github.com/terrastruct/d2/blob/master/LICENSE.txt" rel="noopener noreferrer"&gt;Mozilla Public License 2.0 license&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Simple and clean declarative language.&lt;/li&gt;
&lt;li&gt;Styling and theming customizations support sketch mode.&lt;/li&gt;
&lt;li&gt;Produce animated diagrams with each step of the sequence.&lt;/li&gt;
&lt;li&gt;Supports spans, groups, notes and self-messages.&lt;/li&gt;
&lt;li&gt;Supports icons and images.&lt;/li&gt;
&lt;li&gt;Export to SVG, PNG, PDF, PPTX and GIF.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fd2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fd2.webp" title="D2 language" alt="D2 language!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  2️⃣ SequenceDiagram.org
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sequencediagram.org" rel="noopener noreferrer"&gt;SequenceDiagrams.org&lt;/a&gt; is a web-based tool for easily designing sequence diagrams. The tool is free, not open source and maintained by donations from their community.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Save sequence diagrams to a file, local storage, Google Drive or OneDrive.&lt;/li&gt;
&lt;li&gt;Supports a wide variety of arrow types and styles.&lt;/li&gt;
&lt;li&gt;Supports icons and images.&lt;/li&gt;
&lt;li&gt;Presentation mode for hiding the interface.&lt;/li&gt;
&lt;li&gt;Export to SVG, PNG and URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fsequence-diagrams.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fsequence-diagrams.webp" title="SequenceDiagram.org" alt="SequenceDiagram.org!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  3️⃣ MermaidJS
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://mermaid.js.org/syntax/sequenceDiagram.html" rel="noopener noreferrer"&gt;Mermaid&lt;/a&gt; is a Javascript-based diagramming tool for rendering many diagram types from Markdown-inspired text definitions and supports sequence diagrams. Mermaid is free and open-source under the &lt;a href="https://github.com/mermaid-js/mermaid/blob/develop/LICENSE" rel="noopener noreferrer"&gt;MIT license&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub will render Mermaid diagrams in your Markdown files.&lt;/li&gt;
&lt;li&gt;Well maintained and supported by the open-source community.&lt;/li&gt;
&lt;li&gt;Can be rendered or embedded into a Javascript page.&lt;/li&gt;
&lt;li&gt;Supports messages, notes, alts, loops, parallel, breaks and background highlighting.&lt;/li&gt;
&lt;li&gt;Customization and styling using CSS stylesheets.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fmermaid-js.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fmermaid-js.webp" title="MermaidJS" alt="MermaidJS!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  4️⃣ WebSequenceDiagrams
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.websequencediagrams.com" rel="noopener noreferrer"&gt;WebSequenceDiagrams&lt;/a&gt; is a freemium web-based tool for easily writing and rendering sequence diagrams. The tool is free for the basic designing of sequence diagrams and paid for features such as revision history, branding, parallel flows and collaboration.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Variety of preset styling options to choose from.&lt;/li&gt;
&lt;li&gt;Auto-save and revision history.&lt;/li&gt;
&lt;li&gt;Include and reuse text from other diagrams.&lt;/li&gt;
&lt;li&gt;REST API for plugins and extensions.&lt;/li&gt;
&lt;li&gt;Export to PNG, PDF, SVG, text and URL.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fweb-sequence-diagrams.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fweb-sequence-diagrams.webp" title="WebSequenceDiagrams" alt="WebSequenceDiagrams!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  5️⃣ StarUML
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://docs.staruml.io/working-with-uml-diagrams/sequence-diagram" rel="noopener noreferrer"&gt;StarUML&lt;/a&gt; is a desktop application that runs on Windows, macOS and Linux for designing UML, SysML, sequence diagrams and various other diagram types. It requires a paid license and is not open-source.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Offline desktop app for security-conscious teams.&lt;/li&gt;
&lt;li&gt;Supports high-resolution displays with light and dark themes.&lt;/li&gt;
&lt;li&gt;Model-driven diagrams for quicker creation and reduced maintenance.&lt;/li&gt;
&lt;li&gt;Export to PNG, JPEG, SVG, PDF and HTML.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fstaruml.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fstaruml.webp" title="StarUML" alt="StarUML!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  6️⃣ PlantUML
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://plantuml.com/sequence-diagram" rel="noopener noreferrer"&gt;PlantUML&lt;/a&gt; is a tool for rendering diagrams from its text-based declarative language. It supports some commonly used UML diagrams, including sequence diagrams and many other non-UML diagram types. PlantUML is free and open-source under the &lt;a href="https://plantuml.com/license" rel="noopener noreferrer"&gt;GNU General Public License&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Generate ASCII art for sequence diagrams.&lt;/li&gt;
&lt;li&gt;Custom styling using CSS stylesheets.&lt;/li&gt;
&lt;li&gt;Extensive customization of arrowheads, swimlanes, actors and icons.&lt;/li&gt;
&lt;li&gt;Export to PNG, SVG, EPS, PDF, VDX, XMI, TXT, Latex and HTML&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fplantuml.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-tools-for-text-based-uml-sequence-diagrams%2Fplantuml.webp" title="PlantUML" alt="PlantUML!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;These were six commonly used tools for creating UML sequence diagrams using text. Let us know if we didn’t include any of your favourite sequence diagram tools!&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>tooling</category>
    </item>
    <item>
      <title>Relational (SQL) vs non-relational (NoSQL) databases</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Wed, 12 Jul 2023 13:00:00 +0000</pubDate>
      <link>https://dev.to/icepanel/relational-sql-vs-non-relational-nosql-databases-3hal</link>
      <guid>https://dev.to/icepanel/relational-sql-vs-non-relational-nosql-databases-3hal</guid>
      <description>&lt;p&gt;A comparison of relational databases and the different types of non-relational databases&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Relational databases, sometimes called SQL databases, store data in tables with rows and are good at maintaining reference integrity and data consistency.&lt;/li&gt;
&lt;li&gt;NoSQL databases are designed to have flexible schemas, making them great for modern applications where data structures evolve quickly. There are a few types of NoSQL databases, as listed below.

&lt;ul&gt;
&lt;li&gt;Document store&lt;/li&gt;
&lt;li&gt;In–memory cache&lt;/li&gt;
&lt;li&gt;Graph database&lt;/li&gt;
&lt;li&gt;Search engine database&lt;/li&gt;
&lt;li&gt;Time series database&lt;/li&gt;
&lt;li&gt;Key-value database&lt;/li&gt;
&lt;li&gt;Wide-column database&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;Relational and non-relational are the two popular types of databases that are most widely used. They are very different in their features and trade-offs and appropriate for different use cases.&lt;/p&gt;

&lt;p&gt;In this article, we’ll discuss the differences between relational and non-relational databases and then dive into the various non-relational database types you can choose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Relational databases
&lt;/h2&gt;

&lt;p&gt;Relational databases, sometimes called SQL databases or Relational Database Management Systems (RDBMS), store data in tables with columns and rows.&lt;/p&gt;

&lt;p&gt;The main advantage of relational databases is the integrity of references which means the data is always accurate and consistent. Using primary/foreign keys ensures that when a row is added or deleted, any references to other tables must also be valid and exist. This prevents orphaned records where the reference points to a row that does not exist, which can cause errors in your application.&lt;/p&gt;

&lt;p&gt;Querying relational databases is done by using &lt;a href="https://www.w3schools.com/sql"&gt;Structured Query Language (SQL)&lt;/a&gt;, which is a robust language designed to create, retrieve, update and delete rows of a table.&lt;/p&gt;

&lt;p&gt;Example relational databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.mysql.com"&gt;MySQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.postgresql.org"&gt;PostgreSQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/rds"&gt;Amazon RDS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/sql"&gt;Google Cloud SQL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/azure-sql"&gt;Azure SQL&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Non-relational databases
&lt;/h2&gt;

&lt;p&gt;NoSQL databases are designed to have flexible schemas, making them great for modern applications where data structures might evolve quickly. They typically offer an easy development experience due to the JSON-like format and lack of structure imposed by tables, rows and columns.&lt;/p&gt;

&lt;p&gt;NoSQL databases scale horizontally, allowing them to operate at a much larger scale and performance than relational databases. Not worrying about the accuracy of relations makes it much easier to shard non-relational data sets.&lt;/p&gt;

&lt;p&gt;There are various types of NoSQL databases which we’ll cover next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Document store
&lt;/h3&gt;

&lt;p&gt;Document databases store and query documents in a key-value JSON-like structure, making them easy to work with. The flexible and hierarchical nature of these documents provides straightforward mutation of the data structure as it evolves over time. Document databases typically scale horizontally, allowing them to scale to large datasets.&lt;/p&gt;

&lt;p&gt;Examples of document stores:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.mongodb.com"&gt;MongoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/documentdb"&gt;Amazon DocumentDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/firestore"&gt;Google Cloud Firestore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/cosmos-db"&gt;Azure CosmosDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  In–memory cache
&lt;/h3&gt;

&lt;p&gt;In-memory caches are key-value stores designed to minimize latency by storing the data in the main memory, removing the need for slower disks or SSDs. They are typically used as a caching mechanism and can persist data on disks by periodically taking memory snapshots.&lt;/p&gt;

&lt;p&gt;Examples of in-memory cache:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://redis.com"&gt;Redis&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/memorydb"&gt;Amazon MemoryDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/memorystore"&gt;Google Cloud Memorystore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/cache"&gt;Azure Cache&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Graph database
&lt;/h3&gt;

&lt;p&gt;Graph databases are often the most complex type of database as they’re designed to store and query relations between objects. They store data in a graph-like structure allowing efficient querying of related and inter-connected data. Relationships between nodes are persisted in the database, making it very fast to traverse the graph.&lt;/p&gt;

&lt;p&gt;Examples of graph databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://neo4j.com"&gt;Neo4j&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/neptune"&gt;AWS Neptune&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://tinkerpop.apache.org/index.html"&gt;Apache TinkerPop&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Search engine database
&lt;/h3&gt;

&lt;p&gt;Search engine databases are specialized databases for indexing and searching large amounts of data for similar characteristics. They are optimized for operations such as full-text search, ranking based on similarity and complex search expressions. They are often used as secondary databases, indexing data from a primary database and making it searchable.&lt;/p&gt;

&lt;p&gt;Examples of search engine databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.elastic.co"&gt;Elastic Search&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/opensearch-service"&gt;Amazon OpenSearch Service&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/products/search"&gt;Azure Cognitive Search&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Time series database
&lt;/h3&gt;

&lt;p&gt;Time series databases (TSBD) are optimized for storing sequential data collected over time, usually associated with a timestamp. They are efficient at collecting, storing and querying large and high-velocity data sets and are great for analyzing how data changes over time. Time series databases are usually append-only.&lt;/p&gt;

&lt;p&gt;Examples of time series databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://prometheus.io"&gt;Prometheus&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/timestream"&gt;Amazon Timestream&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Key-value database
&lt;/h3&gt;

&lt;p&gt;Key-value databases store a collection of key-value pairs that can hold simple or complex object types such as strings, numbers or objects. Due to its simple and optimized key-based structure, it’s highly performant and can reach scales that other database types cannot.&lt;/p&gt;

&lt;p&gt;Examples of key-value databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/dynamodb"&gt;Amazon DynamoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/dynamodb"&gt;Google Cloud Bigtable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/storage/tables"&gt;Azure Table Storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Wide-column database
&lt;/h3&gt;

&lt;p&gt;Wide-column stores are conceptually similar to relational databases but organize data by columns instead of rows. This allows them to store tables with many columns and handle massive data sets.&lt;/p&gt;

&lt;p&gt;Examples of wide-column databases:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://cassandra.apache.org"&gt;Apache Cassandra&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/keyspaces"&gt;Amazon Keyspaces&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/bigtable"&gt;Google Cloud Bigtable&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;There are many factors and trade-offs involved when making a decision to choose a specific type of database. It’s essential to research and experiment with different technologies to find the right solution for your use case.&lt;/p&gt;

&lt;p&gt;Let us know if we missed your favourite database!&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>database</category>
    </item>
    <item>
      <title>Top 9 NoSQL databases in the cloud</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Thu, 22 Jun 2023 16:00:00 +0000</pubDate>
      <link>https://dev.to/icepanel/top-9-nosql-databases-in-the-cloud-3847</link>
      <guid>https://dev.to/icepanel/top-9-nosql-databases-in-the-cloud-3847</guid>
      <description>&lt;p&gt;Document, key-value and in-memory databases from the 3 major cloud providers&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Document databases store and query documents in a key-value JSON-like structure. Some examples:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/documentdb"&gt;Amazon DocumentDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/firestore"&gt;Google Cloud Firestore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/cosmos-db"&gt;Azure CosmosDB&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;Key-value databases store a collection of key-value pairs that can store simple or complex object types. Some examples:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/dynamodb"&gt;Amazon DynamoDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/bigtable"&gt;Google Cloud Bigtable&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/storage/tables"&gt;Azure Table Storage&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;In-memory caches are key-value stores designed to minimize latency by storing the data in the main memory. Some examples:

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://aws.amazon.com/memorydb"&gt;Amazon MemoryDB&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://cloud.google.com/memorystore"&gt;Google Cloud Memorystore&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/cache"&gt;Azure Cache&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;NoSQL databases are becoming increasingly popular for modern software applications as a data storage solution for fast-evolving systems. In this article, we’ll cover the top document, key-value and in-memory database solutions from the three major cloud providers, AWS, GCP and Azure.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❓ What are NoSQL databases?
&lt;/h2&gt;

&lt;p&gt;NoSQL databases are designed to have flexible semi-structured schemas, making them great for modern applications where the data structures may be evolving quickly. They typically offer an easy development experience and high performance at scale. There are various types of NoSQL databases, such as document, key-value, and in-memory.&lt;/p&gt;

&lt;h2&gt;
  
  
  📄 Document stores
&lt;/h2&gt;

&lt;p&gt;A document database stores and queries documents in a key-value, JSON-like structure, which makes it easy to work with. The flexible and hierarchical nature of these documents provides straightforward migration of the data structure as it evolves. Document databases typically scale horizontally, making them suitable for large data sets.&lt;/p&gt;

&lt;h3&gt;
  
  
  1️⃣ Amazon DocumentDB
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/documentdb"&gt;Amazon DocumentDB&lt;/a&gt; is a fully managed native JSON document database that is highly available and scalable.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Compatible with MongoDB APIs, drivers and tools.&lt;/li&gt;
&lt;li&gt;Scales to millions of read/writes per second and petabytes of storage.&lt;/li&gt;
&lt;li&gt;Storage, querying, indexing and aggregation of data.&lt;/li&gt;
&lt;li&gt;Automatic continuous backups for a 1-35 day period.&lt;/li&gt;
&lt;li&gt;High availability, durability and low-latency global reads.&lt;/li&gt;
&lt;li&gt;Uses MongoDB client libraries to connect to the database.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--s_lBzrCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/amazon-documentdb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--s_lBzrCG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/amazon-documentdb.webp" alt="Amazon DocumentDB!" title="Amazon DocumentDB" width="800" height="421"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/aws-amazon-documentdb?utm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;DocumentDB on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  2️⃣ Google Cloud Firestore
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/firestore"&gt;Google Cloud Firestore&lt;/a&gt; is a fully managed serverless document database with high availability and scalability.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scales to meet any demand with no maintenance.&lt;/li&gt;
&lt;li&gt;99.999% availability guarantees with multi-region replication.&lt;/li&gt;
&lt;li&gt;Direct connections from mobile and web apps with a client SDK.&lt;/li&gt;
&lt;li&gt;Built-in live synchronization and offline mode with client SDK.&lt;/li&gt;
&lt;li&gt;Built-in security and data validation rules.&lt;/li&gt;
&lt;li&gt;Official Web, iOS, Android, Flutter, C++ and Unity client-side SDKs.&lt;/li&gt;
&lt;li&gt;Official NodeJS, Java, Go, Ruby and PHP server-side SDKs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--7sq_gsI2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/google-cloud-firestore.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--7sq_gsI2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/google-cloud-firestore.webp" alt="Google Cloud Firestore!" title="Google Cloud Firestore" width="800" height="390"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/gcp-firestore?utm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;Firestore on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  3️⃣ Azure CosmosDB
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/cosmos-db"&gt;Azure CosmosDB&lt;/a&gt; is a distributed NoSQL or relationship database for scalable and high-performance applications.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Instant and limitless scalability with fast reads and multi-region writes.&lt;/li&gt;
&lt;li&gt;99.999% availability for mission-critical applications.&lt;/li&gt;
&lt;li&gt;Automatic continuous backups for either 7 or 30-day periods.&lt;/li&gt;
&lt;li&gt;SDKs for .NET, Java, NodeJS, Python and Go.&lt;/li&gt;
&lt;li&gt;Support for PostgreSQL, MongoDB and Apache Cassandra.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--WWo_pj9q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/azure-cosmosdb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--WWo_pj9q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/azure-cosmosdb.webp" alt="Azure CosmosDB!" title="Azure CosmosDB" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/azure-cosmos-db?utm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;CosmosDB on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔑 Key-value databases
&lt;/h2&gt;

&lt;p&gt;A key-value database stores a collection of key-value pairs that can store simple or complex object types such as strings, numbers or objects. Due to its optimizations, simplicity and key-based structure, it’s highly performant and can reach scales that other database types cannot.&lt;/p&gt;

&lt;h3&gt;
  
  
  4️⃣ Amazon DynamoDB
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/dynamodb"&gt;Amazon DynamoDB&lt;/a&gt; is a fast key-value database for high-performance applications at any scale.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Consistent single-digit millisecond performance.&lt;/li&gt;
&lt;li&gt;Near-unlimited throughout and storage.&lt;/li&gt;
&lt;li&gt;Multi-region replication with 99.999% availability.&lt;/li&gt;
&lt;li&gt;Automated and continuous backups of each table for the last 35 days.&lt;/li&gt;
&lt;li&gt;Use PartiQL for SQL-compatible query, insert, update and delete.&lt;/li&gt;
&lt;li&gt;Import and export data directly from Amazon S3.&lt;/li&gt;
&lt;li&gt;Compatible with NoSQL workbench.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3o0hm1KN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/amazon-dynamodb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3o0hm1KN--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/amazon-dynamodb.webp" alt="Amazon DynamoDB!" title="Amazon DynamoDB" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/aws-amazon-dynamodb?utm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;DynamoDB on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  5️⃣ Google Cloud Bigtable
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/bigtable"&gt;Google Cloud Bigtable&lt;/a&gt; is an enterprise-grade key-value and wide-column store for fast access to large amounts of data.&lt;/p&gt;

&lt;p&gt;Features: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Single-digit millisecond latency with high read and write throughput.&lt;/li&gt;
&lt;li&gt;Supports structured, semi-structured or unstructured data structures.&lt;/li&gt;
&lt;li&gt;Compatible with Apache HBase and Cassandra with no downtime/live migrations.&lt;/li&gt;
&lt;li&gt;99.999% availability with multi-primary replication in up to 8 regions.&lt;/li&gt;
&lt;li&gt;Cluster scale and storage reconfiguration with no downtime.&lt;/li&gt;
&lt;li&gt;Write data once and automatically replicate with eventual consistency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5nQOniw2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/google-cloud-bigtable.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5nQOniw2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/google-cloud-bigtable.webp" alt="Google Cloud Bigtable!" title="Google Cloud Bigtable" width="800" height="391"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/gcp-cloud-bigtable?utm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;Bigtable on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  6️⃣ Azure Table Storage
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/storage/tables"&gt;Azure Table Storage&lt;/a&gt; is a key-value store for fast development with massive semi-structured data structures and high availability.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Store petabytes of unstructured data.&lt;/li&gt;
&lt;li&gt;Geo-redundant storage and three replicas per region.&lt;/li&gt;
&lt;li&gt;Client libraries for .NET, Java, Android, C++, PHP, Ruby and Python.&lt;/li&gt;
&lt;li&gt;Perform &lt;a href="https://www.odata.org"&gt;OData&lt;/a&gt;-based queries.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--uKfIeXg0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/azure-table-storage.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--uKfIeXg0--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/azure-table-storage.webp" alt="Azure Table Storage!" title="Azure Table Storage" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/azure-table-storage?utm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;Table storage on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧠 In-memory caches
&lt;/h2&gt;

&lt;p&gt;An in-memory cache is a key-value store designed to minimize latency by storing the data on the main memory, removing the need for slower disks or SSDs. They are typically used as a caching mechanism and can persist data on disks by periodically taking memory snapshots.&lt;/p&gt;

&lt;h3&gt;
  
  
  7️⃣ Amazon MemoryDB
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/memorydb"&gt;Amazon MemoryDB&lt;/a&gt; is a Redis-compatible in-memory database for ultra-fast performance.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extremely low latency with 160 million requests per second.&lt;/li&gt;
&lt;li&gt;Compatible with Redis data types, parameters and commands.&lt;/li&gt;
&lt;li&gt;Scale to hundreds of millions of requests per second.&lt;/li&gt;
&lt;li&gt;Storage space of over one hundred terabytes per cluster.&lt;/li&gt;
&lt;li&gt;Native JSON support and partial JSON document updates.&lt;/li&gt;
&lt;li&gt;99.999% availability with near-instant recovery without data loss.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--N2quJiBo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/amazon-memorydb.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--N2quJiBo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/amazon-memorydb.webp" alt="Amazon MemoryDB!" title="Amazon MemoryDB" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/aws-amazon-memorydb?utolm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;MemoryDB on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  8️⃣ Google Cloud Memorystore
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/memorystore"&gt;Google Cloud Memorystore&lt;/a&gt; is a low latency, scalable and highly available in-memory database for Redis and Memcached.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sub-millisecond data access with more than 1 million queries per second.&lt;/li&gt;
&lt;li&gt;Fully compatible with Redis or Memcached protocols.&lt;/li&gt;
&lt;li&gt;Supports cluster sizes up to 5 terabytes.&lt;/li&gt;
&lt;li&gt;99.9% availability supporting up to five read replicas and automatic failover.&lt;/li&gt;
&lt;li&gt;Supports Redis 6, 5.0, 4.0 and 3.2.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--dKGA-lJY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/google-cloud-memorystore.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--dKGA-lJY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/google-cloud-memorystore.webp" alt="Google Cloud Memorystore!" title="Google Cloud Memorystore" width="800" height="389"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/gcp-memorystore-for-redis?utolm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;Memorystore on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  9️⃣ Azure Cache
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://azure.microsoft.com/en-ca/products/cache"&gt;Azure Cache&lt;/a&gt; is a distributed in-memory database for Redis with fast and scalable data access.&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Handles millions of requests per second with sub-millisecond latency.&lt;/li&gt;
&lt;li&gt;Compatible with Redis data types, parameters and commands.&lt;/li&gt;
&lt;li&gt;Integrates with RedisBloom, RediSearch, RedisJSON and RedisTimeSeries modules.&lt;/li&gt;
&lt;li&gt;99.999% availability with clustering, &lt;a href="https://redis.com/redis-enterprise/technology/redis-on-flash"&gt;Redis on Flash&lt;/a&gt; and geo-replication.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3TdsbFO8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/azure-cache.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3TdsbFO8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/top-9-nosql-databases-in-the-cloud/azure-cache.webp" alt="Azure Cache!" title="Azure Cache" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Subscribe to the latest updates for &lt;a href="https://stackfeed.io/service/azure-cache-for-redis?utolm_campaign=cloud_nosql_databases_blog_post&amp;amp;utm_medium=blog_post&amp;amp;utm_source=icepanel_blog"&gt;Cache on StackShare.io&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;This list only includes managed databases provided by the three major cloud platforms. There are many other clouds, managed databases and open-source alternatives that aren’t on this list that you should investigate and compare.&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>database</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Risk storming</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Tue, 20 Jun 2023 17:44:26 +0000</pubDate>
      <link>https://dev.to/icepanel/risk-storming-206e</link>
      <guid>https://dev.to/icepanel/risk-storming-206e</guid>
      <description>&lt;p&gt;Risk storming is a technique for collaboratively identifying risks in your software architecture&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Risk storming is a technique for collaborating with your team to identify risks in your software architecture visually.&lt;/li&gt;
&lt;li&gt;Risk storming is recommended as a collaborative workshop as diverse opinions and perspectives help identify the non-obvious risks.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;It’s important to realize that no software architecture, process or team is perfect, and there are always scenarios that can pose risks to your company. Considering these risks and actioning the important ones is an essential part of modern software engineering.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://riskstorming.com"&gt;Risk storming&lt;/a&gt; is a technique developed by &lt;a href="https://simonbrown.je"&gt;Simon Brown&lt;/a&gt; for collaborating with your team and visually identifying risks in your software architecture. Collaboration is key to risk-storming as diverse expertise and perspectives from your team help uncover the risks that may not be obvious to everyone.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤔 Types of risks to consider
&lt;/h2&gt;

&lt;p&gt;The types of risks you should consider can vary wildly, from human, to technical, so it’s important to consider a wide range of possible scenarios. Let’s run through some examples of areas where you can identify risks in your architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;People&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens if a person with tribal knowledge leaves the team?&lt;/li&gt;
&lt;li&gt;Do we have the skills in the team to maintain this moving forward?&lt;/li&gt;
&lt;li&gt;Could we need consultants in this area, and how much would that cost?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Process&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are there important processes that people in the team aren’t trained on?&lt;/li&gt;
&lt;li&gt;Can the support team troubleshoot and resolve questions about this area?&lt;/li&gt;
&lt;li&gt;Are there sensitive processes or artifacts that could be compromised?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Operational&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is there a budget for this service, and could it cause runaway cloud costs?&lt;/li&gt;
&lt;li&gt;Are there legal or compliance risks with storing data in this way?&lt;/li&gt;
&lt;li&gt;Is this impacted by things happening in other areas of the business?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Technology&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do we depend on old technologies or libraries which could be deprecated?&lt;/li&gt;
&lt;li&gt;Is this stable and secure enough to satisfy our commitment to our customers?&lt;/li&gt;
&lt;li&gt;Is this technology the right tool for the job?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  ❗ Evaluating the priority of risks
&lt;/h2&gt;

&lt;p&gt;To decide which risks are acceptable and which need to be addressed quickly, you should quantify each risk by evaluating their impact and probability.&lt;/p&gt;

&lt;p&gt;The following matrix allows you to rank risks on a 1-9 scale and classify them into low, medium and high-priority groups. Simply multiply the probability and impact to get the final priority score. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--P4GXUhmn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/risk-storming/probability-impact.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--P4GXUhmn--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/risk-storming/probability-impact.webp" alt="Risk storming priority matrix!" title="Risk storming priority matrix" width="540" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You’ll likely want to focus on actioning the high-priority risks first and then the medium ones.&lt;/p&gt;

&lt;h2&gt;
  
  
  🖼️ Collaborative risk storming
&lt;/h2&gt;

&lt;p&gt;Risk storming is recommended as a collaborative workshop with your team. Including a diverse set of opinions and perspectives helps identify and discuss the non-obvious risks which could go unnoticed otherwise.&lt;/p&gt;

&lt;p&gt;You can run an in-person or remote workshop with your team with the following four steps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1. Draw a diagram of your software architecture
&lt;/h3&gt;

&lt;p&gt;The first step is to gather your team members and draw diagrams of your software architecture. It’s recommended to draw multiple diagrams at different levels of detail as each diagram could have different risks associated with it.&lt;/p&gt;

&lt;p&gt;The diagrams can include potential future state architectures that have not yet been built. Doing risk-storming upfront helps prevent these risks from being built and reduces possible re-work later.&lt;/p&gt;

&lt;p&gt;We recommend using the &lt;a href="https://c4model.com"&gt;C4 model&lt;/a&gt; as a simple structure to diagram your system and &lt;a href="https://c4modelstickies.com"&gt;C4 model stickies&lt;/a&gt; as an easy way to use the C4 model with a whiteboard.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Xjra4iQG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/risk-storming/risk-storming-1.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xjra4iQG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/risk-storming/risk-storming-1.webp" alt="Risk storming diagram!" title="Risk storming diagram" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Tip: Add extra space to your diagram to allow risk sticky notes to be added afterwards.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 2. Individually write coloured risks on sticky notes
&lt;/h3&gt;

&lt;p&gt;Each person should identify their risks and quantify them using the priority matrix above. Note the impact and probability scores on the sticky notes so others can comment. Then write the result on a green/orange/red coloured sticky note.&lt;/p&gt;

&lt;p&gt;Each team member will have a different opinion which is why this is important to be an individual task. You don’t want to bias any opinions of the risks created.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3. Add sticky notes to the diagram and discuss the risks
&lt;/h3&gt;

&lt;p&gt;Ask everyone to add sticky notes to the diagram(s) wherever it makes the most sense based on the services or connections involved. Try to group sticky notes together if people create similar or matching risks, as this helps show the commonly identified risks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--4685pYOh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/risk-storming/risk-storming-2.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--4685pYOh--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/risk-storming/risk-storming-2.webp" alt="Risk storming collaboration!" title="Risk storming collaboration" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Everyone should now evaluate the board and discuss the risks if needed. It’s helpful to discuss risks only reported by one person or where there is disagreement from the team about the impact or probability. You can prune or move risks on the diagrams after you have discussed them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4. Write up actions to address the high-importance risks
&lt;/h3&gt;

&lt;p&gt;Review the final risks on the diagram and decide which are high priority and need resolution or mitigation. Create a plan with the team about how to mitigate these risks and assign tasks to people so they are scheduled to be worked on.&lt;/p&gt;

&lt;p&gt;Methods to mitigate risks can be things such as running training sessions, doing implementation or refactoring work, or introducing new processes. &lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;Risk storming is a powerful tool to identify and mitigate risks in your software architecture and collate different perspectives from your team. Doing it in advance can be great for building solutions that are low-risk and secure from the get-go.&lt;/p&gt;

&lt;p&gt;Check out the official website for &lt;a href="https://riskstorming.com"&gt;risk storming&lt;/a&gt; for more information.&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Top 6 message queues for distributed architectures</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Thu, 18 May 2023 14:31:02 +0000</pubDate>
      <link>https://dev.to/icepanel/top-6-message-queues-for-distributed-architectures-3hmb</link>
      <guid>https://dev.to/icepanel/top-6-message-queues-for-distributed-architectures-3hmb</guid>
      <description>&lt;p&gt;Message queues for decoupled distributed architectures and their advantages and disadvantages&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Message queues can be used for asynchronous communication between services and for processing batched workloads.&lt;/li&gt;
&lt;li&gt;As applications become decoupled, they often need mechanisms to share state, mutate data and handle events in different areas of the system.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;As architectures move toward the cloud and become increasingly distributed, the need for communication and messaging is becoming a critical part of modern software systems. As applications are decoupled into independent building blocks, they often need mechanisms to share state, mutate data and handle events in different areas of the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  ❔ What is a message queue?
&lt;/h2&gt;

&lt;p&gt;Message queues can be used for asynchronous communication between two or more services. They’re great for processing large or batched workloads and help smooth out their processing. Messages are usually pushed into the queue and processed sequentially by the receiver.&lt;/p&gt;

&lt;p&gt;Let’s explore both open-source and cloud-hosted message queues.&lt;/p&gt;

&lt;h2&gt;
  
  
  1️⃣ RabbitMQ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.rabbitmq.com" rel="noopener noreferrer"&gt;RabbitMQ&lt;/a&gt; is an open-source message broker for asynchronous messaging, queueing and delivery acknowledgement. It can be deployed in the cloud or on-premise with Kubernetes, Chef, Docker or Puppet.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Frabbitmq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Frabbitmq.webp" title="RabbitMQ" alt="RabbitMQ!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👍 Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Supports a wide range of messaging patterns and easily scales horizontally by adding more nodes to the cluster.&lt;/li&gt;
&lt;li&gt;RabbitMQ has many official and unofficial client libraries and developer tools &lt;a href="https://www.rabbitmq.com/devtools.html" rel="noopener noreferrer"&gt;linked on its website&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Provides durability for its message by storing backups on disk through other nodes in the cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👎 Disadvantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Can be slow at processing larger datasets, typically handling tens of thousands of events per second.&lt;/li&gt;
&lt;li&gt;Some integration services, such as intra-cluster compression and warm standby replication, are only available as part of their paid commercial offering.&lt;/li&gt;
&lt;li&gt;RabbitMQ is somewhat complex and will require technical expertise to set up and maintain over time.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  2️⃣ Amazon Simple Queue System (SQS)
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://aws.amazon.com/sqs" rel="noopener noreferrer"&gt;Amazon Simple Queue System&lt;/a&gt; or SQS is a fully managed message queue built for distributed and serverless platforms. Out of the box, it allows you to send, store and receive any volume of messages between services. It has a free and paid tier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Famazon-simple-queue-system-sqs.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Famazon-simple-queue-system-sqs.webp" title="Amazon Simple Queue System SQS" alt="Amazon Simple Queue System SQS!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👍 Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Simple to set up and requires minimal maintenance over time as SQS is a managed service by Amazon.&lt;/li&gt;
&lt;li&gt;Automatically handles high availability and redundancy by storing messages across multiple availability zones in the region.&lt;/li&gt;
&lt;li&gt;Highly scalable in a way that’s automatically handled based on the number of messages being processed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👎 Disadvantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It may be difficult to estimate the cost of using SQS as you’re charged for each message based on its size and network bandwidth used.&lt;/li&gt;
&lt;li&gt;Latency is variable based on the number of messages being sent and received but is generally less than that of self-hosted solutions.&lt;/li&gt;
&lt;li&gt;The maximum message size is only 256KB.&lt;/li&gt;
&lt;li&gt;SQS doesn’t support real-time data streaming or parallel processing of messages.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  3️⃣ Apache ActiveMQ
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://activemq.apache.org" rel="noopener noreferrer"&gt;Apache ActiveMQ&lt;/a&gt; is an open-source Java-based message queue that can be accessed by clients written in Javascript, C, C++, Python and .NET. There are two versions of ActiveMQ, the existing “classic” version and the next generation “Artemis” version, which is currently being worked on.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fapache-active-mq.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fapache-active-mq.webp" title="Apache ActiveMQ" alt="Apache ActiveMQ!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👍 Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Lots of flexibility for customizing options such as prefetch size, threading, notification to producers and failover.&lt;/li&gt;
&lt;li&gt;You can configure ActiveMQ to guarantee message delivery to ensure they are delivered at least once.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👎 Disadvantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It requires manual installation, configuration and maintenance, meaning you’ll likely need someone technical to manage it.&lt;/li&gt;
&lt;li&gt;The ActiveMQ documentation is difficult to read, understand and find the information you’re looking for.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  4️⃣ Apache Kafka
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://kafka.apache.org" rel="noopener noreferrer"&gt;Apache Kafka&lt;/a&gt; is an open-source, distributed event streaming platform with message communication and storage capabilities. Although Kafka is not technically a message queue, it has the functionality of a message queue using a topic partition.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fapache-kafka.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fapache-kafka.webp" title="Apache Kafka" alt="Apache Kafka!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👍 Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Easily scales horizontally and span multiple data center and cloud environments.&lt;/li&gt;
&lt;li&gt;Kafka is reliable, with high availability and fault tolerance through replication and partitioning.&lt;/li&gt;
&lt;li&gt;Kafka now has libraries for most languages, including Java, C++, Python, Go, .NET, Rub and NodeJS.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👎 Disadvantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Kafka has a steep learning curve due to its technical complexity, likely requiring in-house or external experts.&lt;/li&gt;
&lt;li&gt;Kafka doesn’t have an official interface for management and monitoring, and third-party tools may be required.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  5️⃣ Google Cloud Pub/Sub
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/pubsub" rel="noopener noreferrer"&gt;Google Cloud Pub/Sub&lt;/a&gt; is a fully-managed, globally scalable and secure queue provided by Google Cloud for asynchronous processing messages. Cloud Pub/Sub has many of the same advantages and disadvantages as SQS due to also being cloud hosted. It has a free and paid tier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fgoogle-cloud-pubsub.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fgoogle-cloud-pubsub.webp" title="Google Cloud Pub/Sub" alt="Google Cloud Pub/Sub!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👍 Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;High scalability and availability that requires no setup and is managed for you automatically by Google.&lt;/li&gt;
&lt;li&gt;The maximum message payload size is 10MB, considerably higher than most other solutions.&lt;/li&gt;
&lt;li&gt;Supports push and pull delivery types.&lt;/li&gt;
&lt;li&gt;The easy-to-use interface on the Google Cloud console for managing and debugging topics and subscriptions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👎 Disadvantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;It can be difficult to calculate how much you will be billed for Pub/Sub, as they charge for throughput, storage and egress as described on their length and complex pricing page.&lt;/li&gt;
&lt;li&gt;Low latency for message delivery is not guaranteed as Google prioritizes scalability over speed for Pub/Sub.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  6️⃣ Microsoft Azure Service Bus
&lt;/h2&gt;

&lt;p&gt;Microsoft &lt;a href="https://azure.microsoft.com/en-us/products/service-bus" rel="noopener noreferrer"&gt;Azure Service Bus&lt;/a&gt; is a reliable, fully managed Cloud service for delivering messages via queues or topics. It has a free and paid tier.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fazure-service-bus.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Ftop-6-message-queues-for-distributed-architectures%2Fazure-service-bus.webp" title="Microsoft Azure Service Bus" alt="Microsoft Azure Service Bus!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  👍 Advantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;High reliability and scalability are automatically provided as this service is fully managed by Microsoft Azure.&lt;/li&gt;
&lt;li&gt;Azure Service Bus integrates well with other products in the Azure ecosystem.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  👎 Disadvantages
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;The learning curve is high for new users getting started with Azure Service Bus as it can be complex to understand due to poor documentation.&lt;/li&gt;
&lt;li&gt;Azure Service Bus has a maximum message size of 256KB.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;Let us know if you’ve had your own experiences with any of these message queues and comment with your own experiences, pros and cons.&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>tooling</category>
      <category>eventdriven</category>
    </item>
    <item>
      <title>Document service events with EventCatalog</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Wed, 03 May 2023 14:58:45 +0000</pubDate>
      <link>https://dev.to/icepanel/document-service-events-with-eventcatalog-45hp</link>
      <guid>https://dev.to/icepanel/document-service-events-with-eventcatalog-45hp</guid>
      <description>&lt;p&gt;Visualize and communicate event definitions, payload schemas and service dependencies&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://www.eventcatalog.dev"&gt;EventCatalog&lt;/a&gt; is an open-source project created by &lt;a href="https://www.boyney.io"&gt;David Boyne&lt;/a&gt; for easily documenting and discovering services and events in an event-driven architecture.&lt;/li&gt;
&lt;li&gt;EventCatalog includes a &lt;a href="https://app.eventcatalog.dev"&gt;simple web interface&lt;/a&gt; that can be statically generated for anyone on your team to search, filter and visualize services, events and dependencies.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;Event-driven architectures are becoming increasingly popular, especially for complex service-based architectures. When working on a larger software system with potentially hundreds of services, it’s important to collaboratively discuss and design the events. Tools like &lt;a href="https://www.eventstorming.com"&gt;event storming&lt;/a&gt; and &lt;a href="https://eventmodeling.org/posts/what-is-event-modeling"&gt;event modelling&lt;/a&gt; are helping to facilitate these discussions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.eventcatalog.dev"&gt;EventCatalog&lt;/a&gt; aims to help further by creating a shared understanding of your events across one or more teams. It’s an open-source project created by &lt;a href="https://www.boyney.io"&gt;David Boyne&lt;/a&gt; for easily documenting and discovering your events in event-driven architectures. It provides a markdown-style syntax that can be checked into source control and a web interface to visualize your events and dependencies.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Key concepts
&lt;/h2&gt;

&lt;p&gt;EventCatalog has a few key concepts to understand first.&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Event:&lt;/strong&gt; Messages that flow through your system. Events can have owners, schemas, producers, consumers and code examples. You can version these event properties over time as changes are made.&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Service:&lt;/strong&gt; Applications that produce or consume events. Services can be assigned an owner and optionally have OpenAPI or AsyncAPI specs attached.&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;Domain:&lt;/strong&gt; Groups of events and/or services. Domains allow you to define high-level boundaries across your architecture to stay organized. Domains can be assigned an owner.&lt;/p&gt;

&lt;h2&gt;
  
  
  📄 Creating an event catalog
&lt;/h2&gt;

&lt;p&gt;Here’s a high-level overview of the steps to get up and running.&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Installation:&lt;/strong&gt; Follow the installation and configuration instructions on the &lt;a href="https://www.eventcatalog.dev/docs/installation"&gt;EventCatalog website&lt;/a&gt;. The docs suggest using the command line tool to quickly generate a skeleton project.&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Create Owners:&lt;/strong&gt; Add the names, roles and avatars for each of your owners in the &lt;a href="https://www.eventcatalog.dev/docs/api/eventcatalog-config#users"&gt;user property of eventcatalog.config.js&lt;/a&gt;. This way, you can start assigning owners when creating your domains and services.&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;Create Markdown Files:&lt;/strong&gt; Add files in your source control repository to describe your domains, services and events as described in the EventCatalog docs. Use the &lt;a href="https://www.eventcatalog.dev/docs/events/consumers-and-producers"&gt;consumers and producers array&lt;/a&gt; to create references between your services and events.&lt;/p&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;Optional Event Schemas:&lt;/strong&gt; Add a &lt;a href="https://json-schema.org"&gt;JSON schema&lt;/a&gt; file to each event to be more explicit with their payload structure. The schema communicates the structure with your team rather than performing validation. Read more about &lt;a href="https://www.eventcatalog.dev/docs/events/adding-schemas"&gt;managing your event schemas&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;5️⃣ &lt;strong&gt;Publish Your Catalog:&lt;/strong&gt; EventCatalog makes it easy to &lt;a href="https://www.eventcatalog.dev/docs/guides/deployment"&gt;build and deploy&lt;/a&gt; a static version of your catalog that can be hosted in a place easily accessible to your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  🖼️ Visualize your events
&lt;/h2&gt;

&lt;p&gt;EventCatalog includes a &lt;a href="https://app.eventcatalog.dev"&gt;simple web interface&lt;/a&gt; for anyone on your team to easily discover and visualize events using search and filters. Learn about specific services to see their dependencies with other services, and quickly contact the owner of the service or domain to answer questions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--VnTngUrK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/document-service-events-with-eventcatalog/event-catalog-service.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--VnTngUrK--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/document-service-events-with-eventcatalog/event-catalog-service.webp" alt="EventCatalog service page!" title="EventCatalog service page" width="800" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can see a high-level overview of all the producers, consumers and events in your system architecture. Then filter down the view to a domain to visualize a smaller subset.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--QV73Ztj9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/document-service-events-with-eventcatalog/event-catalog-visualizer.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--QV73Ztj9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/document-service-events-with-eventcatalog/event-catalog-visualizer.webp" alt="EventCatalog visualizer!" title="EventCatalog visualizer" width="800" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;EventCatalog is a great way to help people understand, document and discover events in your software architecture. Use it to facilitate collaborative team discussions and improve the design of your services and events.&lt;/p&gt;

&lt;p&gt;Give &lt;a href="https://www.eventcatalog.dev"&gt;EventCatalog&lt;/a&gt; a try if you haven’t already, and let us know how it goes. &lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>tooling</category>
    </item>
    <item>
      <title>Subscribe to your cloud updates with StackFeed</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Mon, 01 May 2023 16:04:29 +0000</pubDate>
      <link>https://dev.to/icepanel/subscribe-to-your-cloud-updates-with-stackfeed-i70</link>
      <guid>https://dev.to/icepanel/subscribe-to-your-cloud-updates-with-stackfeed-i70</guid>
      <description>&lt;p&gt;Create custom RSS feeds with release notes for your cloud stack&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://stackfeed.io"&gt;StackFeed.io&lt;/a&gt; saves AWS, GCP and Azure services in your cloud stack and provides a custom-tailored news feed of release notes and important updates.&lt;/li&gt;
&lt;li&gt;Receive real-time messages for your service updates directly to your Slack or Teams channel with a tailored RSS feed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;We’re excited to tell you about the motivation behind &lt;a href="https://stackfeed.io"&gt;StackFeed.io&lt;/a&gt;, a simple website we created to stay updated with the ever-evolving world of cloud services.&lt;/p&gt;

&lt;p&gt;As part of adding technology choices into &lt;a href="https://icepanel.io"&gt;IcePanel&lt;/a&gt;, we cataloged over 600 cloud services with descriptions, icons and release notes. But rather than sit on the data, we wanted to help everyone stay updated with the rapid pace of cloud for free with StackFeed. In this article, we’ll cover the problem it solves and dive into some core features.&lt;/p&gt;

&lt;h2&gt;
  
  
  🤯 Cloud providers release lots!
&lt;/h2&gt;

&lt;p&gt;The three major cloud providers have hundreds of services for all kinds of use cases and audiences. If you regularly check their update pages it can be like drinking from a firehose. You have to scan the never-ending list of release notes and filter through them to find the services you actually care about.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--On5dZBqB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/subscribe-to-your-cloud-updates-with-stackfeed/aws-updates.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--On5dZBqB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/subscribe-to-your-cloud-updates-with-stackfeed/aws-updates.webp" alt="AWS updates!" title="AWS updates" width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There are usually anywhere from 100 to 150 updates published &lt;strong&gt;every week&lt;/strong&gt; by &lt;a href="https://aws.amazon.com/new"&gt;Amazon Web Services&lt;/a&gt;, &lt;a href="https://cloud.google.com/release-notes"&gt;Google Cloud Platform&lt;/a&gt; and &lt;a href="https://azure.microsoft.com/en-us/updates"&gt;Microsoft Azure&lt;/a&gt; combined. This includes updates from popular services like AWS S3 and obscure services you’ve likely never heard of, such as &lt;a href="https://aws.amazon.com/ground-station"&gt;AWS ground station&lt;/a&gt;. Although it’s difficult to know exactly how many services there are, we estimate there are likely around 600-700 across the three major cloud providers.&lt;/p&gt;

&lt;p&gt;We thought there must be a better way to consume relevant updates from cloud providers.&lt;/p&gt;

&lt;h2&gt;
  
  
  😍 Tailored feeds with your cloud release notes
&lt;/h2&gt;

&lt;p&gt;When creating &lt;a href="https://stackfeed.io"&gt;StackFeed.io&lt;/a&gt;, our goal was to collect the overwhelming amount of release notes from the major cloud providers and allow you to create a custom-filtered news feed that’s always relevant to you.&lt;/p&gt;

&lt;p&gt;StackFeed allows you to search through our large catalog of cloud services and save them to your stack if they’re important to your team. Once you’ve created a stack we’ll show you a tailored news feed containing only the services you care about.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--eBcbjCYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/subscribe-to-your-cloud-updates-with-stackfeed/stackfeed.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--eBcbjCYJ--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/subscribe-to-your-cloud-updates-with-stackfeed/stackfeed.webp" alt="StackFeed interface!" title="StackFeed interface" width="800" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;StackFeed provides a tailored RSS feed for your stack that allows you to receive service updates directly into your Slack channel, teams chat or other RSS reader. Let’s go over how to set this up.&lt;/p&gt;

&lt;h2&gt;
  
  
  📰 Cloud release notes in your Slack or Teams channel
&lt;/h2&gt;

&lt;p&gt;Subscribing to StackFeed updates in your company Slack or Teams channel is a great way to keep you and your team up to date with news about your cloud services.&lt;/p&gt;

&lt;p&gt;First, install the official Slack RSS app into your workspace from the &lt;a href="https://slack.com/services/B051N6C1BC6"&gt;Slack App Directory&lt;/a&gt;. Choose your stack on StackFeed.io if you haven’t already, click the “Add to Slack” button and copy the feed URL provided in the text field. Then paste the feed URL into the RSS app and select a channel to post updates.&lt;/p&gt;

&lt;p&gt;To test this without creating a stack you can use &lt;a href="https://stackfeed.io/feed"&gt;https://stackfeed.io/feed&lt;/a&gt; to subscribe to all cloud updates from AWS, GCP and Azure.&lt;/p&gt;

&lt;p&gt;You may need to wait about 24 hours for a new cloud update to appear in the channel. If everything is working you should be able to see Slack updates like in the screenshot below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--proxnJjF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/subscribe-to-your-cloud-updates-with-stackfeed/slack-updates.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--proxnJjF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://assets.icepanel.io/blog/subscribe-to-your-cloud-updates-with-stackfeed/slack-updates.webp" alt="Slack channel cloud updates!" title="Slack channel cloud updates" width="800" height="496"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The process is very similar if you use Microsoft Teams or an RSS reader app, just select the “Add to Teams” or “RSS feed” buttons on the StackFeed website.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;We’ll soon be making this data available to users in &lt;a href="https://icepanel.io"&gt;IcePanel&lt;/a&gt; for selecting technology choices for apps and stores inside their architecture diagrams. We hope the data is valuable to you, and we’ll continue to maintain it over time.&lt;/p&gt;

&lt;p&gt;If this looks interesting then give &lt;a href="https://stackfeed.io"&gt;StackFeed.io&lt;/a&gt; a try and let us know how it went for you on our &lt;a href="https://docs.google.com/forms/d/e/1FAIpQLSfPxPN6GtWPR0mKXG8g6pOl30VmHnWP4Ryg8L0p2NaWO8d5Ug/viewform"&gt;feedback form&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;There’s scope to extend StackFeed further than just the three major cloud providers it supports today, so we’d love to hear any ideas you have in the comments.&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>tooling</category>
    </item>
    <item>
      <title>AsyncAPI for event-driven architectures</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Thu, 13 Apr 2023 14:32:25 +0000</pubDate>
      <link>https://dev.to/icepanel/asyncapi-for-event-driven-architectures-56an</link>
      <guid>https://dev.to/icepanel/asyncapi-for-event-driven-architectures-56an</guid>
      <description>&lt;p&gt;An industry standard for defining asynchronous APIs for event-driven architecture&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;AsyncAPI is a standard for describing the communication between services and applications for asynchronous event-driven architectures (EDA).&lt;/li&gt;
&lt;li&gt;AsyncAPI specs allow you to easily generate data models, client libraries, server code and documentation in various languages to speed up the development process.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;You’ve likely heard of the Swagger &lt;a href="https://swagger.io/specification" rel="noopener noreferrer"&gt;OpenAPI specification&lt;/a&gt;, as it’s widely used in software engineering to describe how systems communicate over REST APIs. However, one of the biggest challenges with Swagger has been describing event-driven systems, as this wasn’t what it was designed to do.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.asyncapi.com" rel="noopener noreferrer"&gt;AsyncAPI&lt;/a&gt; aims to solve this problem by making it easy to describe communication for bi-directional event-based architectures. This includes asynchronous technologies such as WebSockets, Kafka, RabbitMQ, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  💡 Key concepts
&lt;/h2&gt;

&lt;p&gt;AsyncAPI has seven core concepts that are used when writing the definition. They align closely with the terminology and concepts you hear about when discussing event-driven architectures.&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Server:&lt;/strong&gt; Servers represent message brokers that transmit messages between producers and consumers. Their job is to transmit and deliver asynchronous messages between one or more clients.&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Producer:&lt;/strong&gt; Producers are applications that publish messages, usually based on a state change or user action. When messages are published they’re delivered to other entities that subscribe to them.&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;Consumer:&lt;/strong&gt; A consumer is an application that subscribes to specific events from a server and reacts to them. They aren’t aware of other producers and consumers involved, only the messages they receive through subscriptions.&lt;/p&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;Channel:&lt;/strong&gt; Channels are created by the server and help organize the transmission of messages. They ensure the right messages are routed to the right consumers. You can define channels as a topic, queue, routing, key, path or subject.&lt;/p&gt;

&lt;p&gt;5️⃣ &lt;strong&gt;Application:&lt;/strong&gt; An application is one or more services, devices, processes, etc. They should either be a procedure of events, a consumer of events, or both.&lt;/p&gt;

&lt;p&gt;6️⃣ &lt;strong&gt;Protocol:&lt;/strong&gt; A protocol is a set of rules for communicating between many applications and/or servers. Examples of protocols that can be used are WebSockets, gRPC, HTTP, Kafka and MQTT.&lt;/p&gt;

&lt;p&gt;7️⃣ &lt;strong&gt;Message:&lt;/strong&gt; Messages transmit data from one sender to one or more receivers through a channel and can be defined as an event, query or command. Query and commands can be thought of as instructional messages carrying information, while an event provides details of something that’s already occurred. A payload can be included in messages and is formatted as JSON, XML, binary, etc.&lt;/p&gt;

&lt;h2&gt;
  
  
  📄 Specification
&lt;/h2&gt;

&lt;p&gt;AsyncAPI &lt;a href="https://medium.com/asyncapi/whats-new-on-asyncapi-lots-2d9019a1869d" rel="noopener noreferrer"&gt;started as an adaption of OpenAPI&lt;/a&gt;, making most parts of the specification similar. It was created with the intention that users could interchangeably reuse elements in either specification.&lt;/p&gt;

&lt;p&gt;The spec can be written as YAML or JSON and is usually checked into source control, either globally or per service/application exposing the interface. Below is a short example spec showing how to define an application that allows consumers to subscribe to a signed-up user.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;asyncapi&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;2.6.0&lt;/span&gt;
&lt;span class="na"&gt;info&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;title&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;Example&lt;/span&gt;
  &lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
&lt;span class="na"&gt;channels&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;user/signedup&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;subscribe&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;message&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;An event describing that a user just signed up.&lt;/span&gt;
        &lt;span class="na"&gt;payload&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
          &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;object&lt;/span&gt;
          &lt;span class="na"&gt;additionalProperties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;
          &lt;span class="na"&gt;properties&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
            &lt;span class="na"&gt;fullName&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
            &lt;span class="na"&gt;email&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;string&lt;/span&gt;
              &lt;span class="na"&gt;format&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;email&lt;/span&gt;
            &lt;span class="na"&gt;age&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
              &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;integer&lt;/span&gt;
              &lt;span class="na"&gt;minimum&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;18&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The following image from the AsyncAPI website gives a high-level overview of the structure.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fasyncapi-for-event-driven-architectures%2Fasyncapi-2.0-structure.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.icepanel.io%2Fblog%2Fasyncapi-for-event-driven-architectures%2Fasyncapi-2.0-structure.webp" title="AsyncAPI 2.0 structure" alt="AsyncAPI 2.0 structure!"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔨 Tools
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://studio.asyncapi.com" rel="noopener noreferrer"&gt;&lt;strong&gt;Studio&lt;/strong&gt;&lt;/a&gt;: Studio allows you to design, validate and visualize your AsyncAPI specs in a web browser. It includes a YAML-based editor and HTML documentation renderer.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/asyncapi/generator" rel="noopener noreferrer"&gt;&lt;strong&gt;Generator&lt;/strong&gt;&lt;/a&gt;: This generates documentation, server and client code from an AsyncAPI specification. There are many official and community-supported templates, including NodeJS, Java, Python, HTML, Markdown, Typescript, Golang, .NET and PHP.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/asyncapi/cli" rel="noopener noreferrer"&gt;&lt;strong&gt;CLI&lt;/strong&gt;&lt;/a&gt;: The CLI tool lets you create and validate AsyncAPI files from your command line. It also supports generating typed models for Typescript, C#, Golang, Java, Javascript, Dart, Rust and Kotlin.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/asyncapi/github-action-for-generator" rel="noopener noreferrer"&gt;&lt;strong&gt;GitHub Action&lt;/strong&gt;&lt;/a&gt;: An official GitHub action that makes it easy to generate HTML documentation from your AsyncAPI spec. You can then deploy it to GitHub pages or similar.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/asyncapi/parser-js" rel="noopener noreferrer"&gt;&lt;strong&gt;Parser&lt;/strong&gt;&lt;/a&gt;: Easily parse and validate AsyncAPI specs from YAML or JSON. The library also includes Typescript types for manipulating and accessing the properties of your spec.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/asyncapi/modelina" rel="noopener noreferrer"&gt;&lt;strong&gt;Modelina&lt;/strong&gt;&lt;/a&gt;: Automatically generate data model types from your AsyncAPI, OpenAPI or JSON schema documents into languages like Java, Typescript, C#, Go, Javascript, Dart, Rust, Python and Kotlin.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;AsyncAPI has been listed in the early adoption phase of the &lt;a href="https://www.infoq.com/articles/architecture-trends-2023" rel="noopener noreferrer"&gt;InfoQ Architecture Trends Report&lt;/a&gt; for the last 3 years, with adoption from companies like Slack, Salesforce and SAP. They are also part of the &lt;a href="https://www.linuxfoundation.org/press/press-release/linux-foundation-will-host-asyncapi-to-support-growth-and-collaboration-for-industrys-fastest-growing-api-spec" rel="noopener noreferrer"&gt;Linux Foundation&lt;/a&gt;, which is a non-profit that supports leading open-source software projects and standards.&lt;/p&gt;

&lt;p&gt;Check out the &lt;a href="https://www.asyncapi.com" rel="noopener noreferrer"&gt;AsyncAPI&lt;/a&gt; site for more info.&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>tooling</category>
    </item>
    <item>
      <title>Architecture decision records (ADRs)</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Wed, 29 Mar 2023 21:21:05 +0000</pubDate>
      <link>https://dev.to/icepanel/architecture-decision-records-adrs-36d7</link>
      <guid>https://dev.to/icepanel/architecture-decision-records-adrs-36d7</guid>
      <description>&lt;p&gt;ADRs document architecturally significant decisions made over time&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;p&gt;Architecture decision records (ADRs) are short text descriptions documenting architecturally significant decisions during the software development lifecycle. They capture high-level decisions that may not always be obvious from code or infrastructure. ADRs include important context for each decision, such as reasoning, consequences and tradeoffs.&lt;/p&gt;

&lt;p&gt;ADRs can be thought of as an immutable list of decisions over time. Each time a new decision is made and accepted by the team it gets appended to the end of the timeline with a timestamp. Newly created ADRs supersede previous ones and can be deprecated when they’re no longer relevant.&lt;/p&gt;

&lt;p&gt;If you want ADRs to be easily accessible to everyone on your team (including non-technical people) they can be stored in wiki tools such as Confluence or Notion. Checking ADRs into source control is also very powerful and provides all the benefits of Git, such as pull requests, version history and blame.&lt;/p&gt;

&lt;h2&gt;
  
  
  😮 The benefits of ADRs
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Align teams on important decisions&lt;/strong&gt;: ADRs can be published in a place accessible to everyone on the team, making it easy to communicate and align on important decisions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persist important decisions long-term&lt;/strong&gt;: Details about decisions are easily lost when people move between teams or companies, and ADRs ensure they are persisted long-term.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context of decisions for new team members&lt;/strong&gt;: ADRs give new team members valuable learning about the decisions and tradeoffs that were made before they joined the team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Document decisions that aren’t implemented&lt;/strong&gt;: Findings from investigations explored but not implemented are just as important to document as ADRs in case they’re revisited later.&lt;/p&gt;

&lt;h2&gt;
  
  
  📝 How to write an ADR
&lt;/h2&gt;

&lt;p&gt;ADRs can be customized to include the information you need, but there are standard templates, such as one created by &lt;a href="https://github.com/joelparkerhenderson/architecture-decision-record/blob/main/templates/decision-record-template-by-michael-nygard/index.md"&gt;Michael Nygard&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Title&lt;/strong&gt;: A descriptive title that’s usually included in the file or document name.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Status&lt;/strong&gt;: Current status of the ADR, for example: proposed, accepted, rejected, deprecated, superseded.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;: The motivation or problem that lead to decisions being made and any context needed to understand it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Decision&lt;/strong&gt;: Details and specifics about the change being proposed.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Consequences&lt;/strong&gt;: Any positive or negative effects this decision has on other parts of the architecture.&lt;/p&gt;

&lt;p&gt;ADRs can also be formatted similarly to user stories, as written out below.&lt;/p&gt;

&lt;p&gt;In the context of &lt;em&gt;&amp;lt;use case/user story u&amp;gt;&lt;/em&gt;, facing &lt;em&gt;&amp;lt;concern c&amp;gt;&lt;/em&gt; we decided for &lt;em&gt;&amp;lt;option o&amp;gt;&lt;/em&gt; to achieve &lt;em&gt;&amp;lt;quality q&amp;gt;&lt;/em&gt;, accepting &lt;em&gt;&amp;lt;downside d&amp;gt;&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--_HySq24y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/architecture-decision-records-adrs/adr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--_HySq24y--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/architecture-decision-records-adrs/adr.webp" alt="Architecture decision record!" title="Architecture decision record" width="880" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔨 Tooling for ADRs
&lt;/h2&gt;

&lt;p&gt;There are a few tools available for creating, viewing and managing your architecture decision records.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/adr/adr-manager"&gt;&lt;strong&gt;adr-manager&lt;/strong&gt;&lt;/a&gt; - Web-based application for creating and managing ADRs using Markdown stored in your GitHub repository.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mrwilson/adr-viewer"&gt;&lt;strong&gt;adr-viewer&lt;/strong&gt;&lt;/a&gt; - Show off your ADRs on a web page, either as a local web server or generated static content.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joelparkerhenderson/architecture-decision-record#adr-example-templates"&gt;&lt;strong&gt;ADR templates&lt;/strong&gt;&lt;/a&gt; - Collection of example ADR templates maintained by Joel Henderson.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://loqbooq.app"&gt;&lt;strong&gt;Loqbooq&lt;/strong&gt;&lt;/a&gt; - Web and Slack-based decision logs inspired by ADRs.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/thomvaill/log4brains"&gt;&lt;strong&gt;Log4Brains&lt;/strong&gt;&lt;/a&gt; - Log ADRs from your IDE and publish them automatically as a static website.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;Most teams make architecture decisions verbally in meetings that are easily lost or forgotten about. Documenting these important decisions as ADRs is something your future self and teammates will be grateful for!&lt;/p&gt;

&lt;p&gt;Check out &lt;a href="https://adr.github.io"&gt;adr.github.io&lt;/a&gt; for information on ADRs.&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>architecture</category>
    </item>
    <item>
      <title>Reimagining UML sequence diagrams in IcePanel</title>
      <dc:creator>IcePanel</dc:creator>
      <pubDate>Tue, 21 Mar 2023 15:18:28 +0000</pubDate>
      <link>https://dev.to/icepanel/reimagining-uml-sequence-diagrams-in-icepanel-17i4</link>
      <guid>https://dev.to/icepanel/reimagining-uml-sequence-diagrams-in-icepanel-17i4</guid>
      <description>&lt;p&gt;Sequence diagrams that are understandable to everyone in your team&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚡ Tl;dr
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Even though sequence diagrams are suited to visualizing low-level technical details, they are often used to communicate high-level flows with product and business stakeholders.&lt;/li&gt;
&lt;li&gt;At IcePanel we’re focused on making sequence diagrams easily understandable to your technical and non-technical team members. This article goes through some of the design decisions we made when creating the flows feature.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Let’s kick-off
&lt;/h2&gt;

&lt;p&gt;UML sequence diagrams are a popular tool for software engineers to describe the flow of messages in a software system. They’re great for showing interactions between different services or classes and the order in which they are executed. It paints a great picture of the dependencies involved in a particular process flow.&lt;/p&gt;

&lt;p&gt;Even though sequence diagrams are better suited for visualizing complex low-level technical details, they are also used to communicate flows to higher-level people such as product and business stakeholders. As you can imagine, this can overwhelm anyone who does not deal with low-level code daily. Even the simple UML sequence diagram below could cause non-technical people to glaze over and not fully understand what they read.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--DzvRdkgG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/simple-sequence-diagrams.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--DzvRdkgG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/simple-sequence-diagrams.png" alt="Simple UML sequence diagram!" title="Simple UML sequence diagram" width="340" height="337"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;IcePanel helps bridge the communication gap between product and engineering, so we felt there must be a friendly way to visualize sequence diagrams in a way that appeals to everyone on your team.&lt;/p&gt;

&lt;p&gt;Let’s dive into how we approached this.&lt;/p&gt;

&lt;h2&gt;
  
  
  🖼️ Overlaying sequences on existing diagrams
&lt;/h2&gt;

&lt;p&gt;Our initial consideration was the process of presenting diagrams and sequences to your team to tell a specific story. The cognitive load caused by completely switching layout and visual styling mid-presentation between regular and sequence diagrams can be distracting, especially for those unfamiliar with the UML sequence diagram notation. It requires your audience to re-read the layout of your objects and connections, which takes attention away from your ability to tell your story effectively.&lt;/p&gt;

&lt;p&gt;We chose to overlay sequences of messages onto your existing diagrams and let you seamlessly transition into a flow during a presentation or conversation without any distractions. This also reduces maintenance as you don’t need to create separate diagrams for each sequence you need to show.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--p5jqf6lp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/flow-screenshot.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--p5jqf6lp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/flow-screenshot.webp" alt="IcePanel flow screenshot!" title="IcePanel flow screenshot" width="880" height="407"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔎 Automatic zooming that keeps the focus
&lt;/h2&gt;

&lt;p&gt;Sequence diagrams can quickly become very high or wide, requiring scrolling to consume at a readable size. This makes it difficult to navigate your audience through the elements of your flow, especially if you keep having to scroll up and down to show different areas. For example, the sequence diagram below is unreadable when embedded into a word document.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KK1SxKbI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/large-uml-sequence-diagram.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KK1SxKbI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/large-uml-sequence-diagram.webp" alt="Large UML sequence diagram!" title="Large UML sequence diagram" width="880" height="451"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Being an interactive tool, we have luxuries that are impossible for static printed or image-based sequence diagrams exports. IcePanel shows you a list of steps so you can quickly flip through them one by one, automatically re-centring and zooming the camera to bring the important elements into focus for easy readability. It even applies a slight opacity to objects that are not used in the currently focused step and a more aggressive opacity to objects and connections that are not part of the flow at all. This helps break down the complexity and make it more digestible for your audience.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--LUNPlQak--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/flows.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--LUNPlQak--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/flows.gif" alt="IcePanel flows!" title="IcePanel flows" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👉 Showing the direction of travel
&lt;/h2&gt;

&lt;p&gt;It can also be difficult to see the direction of travel for connections in traditional sequence diagrams, especially if the arrowheads are small or the lines are drawn very wide. To help here, we added an animated pulsating line to communicate the direction of travel and bring focus to the current connection. Product and business people love this as it adds a cool visual element which helps them understand the flow.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qPgGchfL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/flow-pulsing-line.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qPgGchfL--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/flow-pulsing-line.gif" alt="IcePanel pulsing flow line!" title="IcePanel pulsing flow line" width="800" height="432"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔄 Alternate and parallel flow paths
&lt;/h2&gt;

&lt;p&gt;Showing concurrent and alternate paths can be a challenging concept to show non-technical audiences and requires some basic understanding of the UML notation. It can also be difficult to see where the second or third concurrent request happens with many other steps listed in between.&lt;/p&gt;

&lt;p&gt;Pulsating multiple connections at once easily communicates the concurrent nature of these requests in a way that’s much more obvious to everyone. A simple grouping of steps with a tab for switching between alternate flow paths allows you to easily communicate how thee paths run independently and focuses the conversation on the currently selected path.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PEY9eADo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/concurrent-sequence-diagrams.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PEY9eADo--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://assets.icepanel.io/blog/reimagining-uml-sequence-diagrams-in-icepanel/concurrent-sequence-diagrams.gif" alt="IcePanel concurrent sequence diagram!" title="IcePanel concurrent sequence diagram" width="800" height="422"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  💨 Rapid creation of flow sequences
&lt;/h2&gt;

&lt;p&gt;We believe that creating and editing sequence diagrams should be insanely fast and easy, especially to help keep up with the rate of change. Product and business people often have great insights into high-level non-technical flows but may not feel comfortable creating or editing sequence diagrams, especially if generated from a markup language. We want to make it easy and quick for everyone to make changes when needed.&lt;/p&gt;

&lt;p&gt;IcePanel already has context from the diagram about the objects being drawn and the direction of connections, so it can make helpful assumptions for you. Selecting a connection on the diagram and clicking “add step” will automatically infer the origin, receiver and connection for the flow step, leaving you to just fill in the description.&lt;/p&gt;

&lt;h2&gt;
  
  
  🏁 To wrap up
&lt;/h2&gt;

&lt;p&gt;We understand there are cases where a UML sequence diagram is the best tool for the job, especially when the audience is only engineers or it includes low-level implementation details. There may also be advanced UML notations you need to use that aren’t supported in IcePanel, where another tool would be better suited.&lt;/p&gt;

&lt;p&gt;IcePanel does allow flow export as code for rendering in tools like &lt;a href="https://plantuml.com"&gt;PlantUML&lt;/a&gt; or &lt;a href="https://sequencediagram.org"&gt;SequenceDiagrams.net&lt;/a&gt; for those that prefer visualizing in a traditional UML sequence diagrams format.&lt;/p&gt;

&lt;p&gt;We’ve spent a lot of time making it seamless to tell both high-level and technical stories in IcePanel in a way that’s digestible and engaging to all your team. I hope you’ve enjoyed the insight into our design decisions for flows.&lt;/p&gt;

&lt;p&gt;Stay chill 🧊&lt;/p&gt;

</description>
      <category>architecture</category>
    </item>
  </channel>
</rss>
