<?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: Said Olano</title>
    <description>The latest articles on DEV Community by Said Olano (@said_olano).</description>
    <link>https://dev.to/said_olano</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%2F1173572%2F559076dd-fc31-431a-bd48-19ed5af74573.jpeg</url>
      <title>DEV Community: Said Olano</title>
      <link>https://dev.to/said_olano</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/said_olano"/>
    <language>en</language>
    <item>
      <title>How to verify if SpringBoot is UP and Running</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Tue, 14 Oct 2025 01:46:02 +0000</pubDate>
      <link>https://dev.to/said_olano/how-to-verify-if-springboot-is-up-and-running-1k0f</link>
      <guid>https://dev.to/said_olano/how-to-verify-if-springboot-is-up-and-running-1k0f</guid>
      <description>&lt;p&gt;To verify if &lt;strong&gt;SpringBoot Actuator&lt;/strong&gt; is UP and Running we need to verify these items:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.- starter dependency properly located at the pom.xml:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhtqbquhr6vp8bp5nzdo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyhtqbquhr6vp8bp5nzdo.png" alt=" " width="599" height="145"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.- At the application.properties we specify what we want to examine:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym3ubeiltmmletb50pif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym3ubeiltmmletb50pif.png" alt=" " width="450" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3.- Finally, we run our app and verify if Actuator is UP and running:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qlopm94legctmtfz9oe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7qlopm94legctmtfz9oe.png" alt=" " width="800" height="47"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4.- In the browser:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9mctfswojjt4m7d85gg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9mctfswojjt4m7d85gg.png" alt=" " width="800" height="315"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>springboot</category>
      <category>monitoring</category>
      <category>java</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>⚙️ What is an Ingress Controller?</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Sun, 05 Oct 2025 17:54:02 +0000</pubDate>
      <link>https://dev.to/said_olano/2-what-is-an-ingress-controller-15df</link>
      <guid>https://dev.to/said_olano/2-what-is-an-ingress-controller-15df</guid>
      <description>&lt;p&gt;An Ingress is a configuration resource in Kubernetes that defines how external requests are routed to internal services.&lt;br&gt;
For example, with an Ingress you can define rules like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: my-ingress
spec:
  rules:
  - host: app.mydomain.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: my-service
            port:
              number: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;💡 Practical example&lt;/p&gt;

&lt;p&gt;Let’s say you have two services in your cluster:&lt;/p&gt;

&lt;p&gt;frontend (port 80)&lt;/p&gt;

&lt;p&gt;backend (port 8080)&lt;/p&gt;

&lt;p&gt;You could define a single Ingress:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
  name: app-ingress
spec:
  rules:
  - host: myapp.com
    http:
      paths:
      - path: /
        pathType: Prefix
        backend:
          service:
            name: frontend
            port:
              number: 80
      - path: /api
        pathType: Prefix
        backend:
          service:
            name: backend
            port:
              number: 8080
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;👉 This allows:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;myapp.com/ → routes to the frontend&lt;br&gt;
myapp.com/api → routes to the backend&lt;/p&gt;

</description>
      <category>devops</category>
      <category>kubernetes</category>
      <category>networking</category>
    </item>
    <item>
      <title>What is an SOW estimate?</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Wed, 01 Oct 2025 19:12:03 +0000</pubDate>
      <link>https://dev.to/said_olano/what-is-an-sow-estimate-4d94</link>
      <guid>https://dev.to/said_olano/what-is-an-sow-estimate-4d94</guid>
      <description>&lt;p&gt;&lt;strong&gt;A SOW estimate&lt;/strong&gt; is a detailed assessment of the costs, time, and resources required to complete the specific tasks outlined in a Statement of Work (SOW), which is a document that defines the scope, objectives, deliverables, and responsibilities of a project. Unlike a ballpark estimate or a budget estimate, an SOW estimate is based on a more concrete and specific plan, aligned with the details of the SOW. It often serves as the basis for contracts or agreements with clients or vendors.&lt;br&gt;
For example:&lt;/p&gt;

&lt;p&gt;For a software development project, an SOW estimate might include costs for design, coding, testing, and maintenance, with a range such as "between $20,000 and $25,000" based on the defined scope.&lt;br&gt;
It is used in negotiation or execution stages to ensure all parties understand the resources required.&lt;/p&gt;

&lt;p&gt;In industries such as IT, construction, and consulting, it is common to formalize commitments and accurately plan projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhe1smu9eaxvbo50d7il.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flhe1smu9eaxvbo50d7il.png" alt=" " width="720" height="960"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un SOW estimate (en español, estimación de un Statement of Work) es una evaluación detallada de costos, tiempo y recursos requeridos para completar las tareas específicas descritas en un Statement of Work (SOW), que es un documento que define el alcance, objetivos, entregables y responsabilidades de un proyecto. A diferencia de un ballpark estimate o un budget estimate, el SOW estimate se basa en un plan más concreto y específico, alineado con los detalles del SOW, y suele servir como base para contratos o acuerdos con clientes o proveedores.&lt;br&gt;
Por ejemplo:&lt;/p&gt;

&lt;p&gt;Para un proyecto de desarrollo de software, un SOW estimate podría incluir costos de diseño, codificación, pruebas y mantenimiento, con un rango como "entre 20,000 y 25,000 dólares" basado en el alcance definido.&lt;br&gt;
Se utiliza en etapas de negociación o ejecución para garantizar que todas las partes entiendan los recursos necesarios.&lt;/p&gt;

&lt;p&gt;Es común en industrias como TI, construcción y consultoría para formalizar compromisos y planificar proyectos con precisión.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is a budget estimate?</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Wed, 01 Oct 2025 19:05:44 +0000</pubDate>
      <link>https://dev.to/said_olano/what-is-a-budget-estimate-1b11</link>
      <guid>https://dev.to/said_olano/what-is-a-budget-estimate-1b11</guid>
      <description>&lt;p&gt;&lt;strong&gt;A budget estimate&lt;/strong&gt; is a more detailed and structured assessment of the costs associated with a project, plan, or activity, based on available information and preliminary analysis. Unlike a ballpark estimate, which is a general approximation, a budget estimate seeks to provide a more realistic and substantiated range of costs, although it remains preliminary and subject to adjustment as more data becomes available.&lt;br&gt;
For example:&lt;/p&gt;

&lt;p&gt;For a construction project, a budget estimate might calculate costs for materials, labor, and permits, giving a range such as "between $50,000 and $60,000" based on initial estimates.&lt;br&gt;
It is used in the early planning stages to allocate resources and establish an initial budget.&lt;/p&gt;

&lt;p&gt;It is common in project management, finance, and business to guide decision-making prior to a final detailed budget.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsblo8nbnsfywvdfux3bo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsblo8nbnsfywvdfux3bo.png" alt=" " width="720" height="960"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Un budget estimate&lt;/strong&gt; (en español, estimación presupuestaria) es una evaluación más detallada y estructurada de los costos asociados a un proyecto, plan o actividad, basada en información disponible y análisis preliminar. A diferencia de un ballpark estimate, que es una aproximación general, el budget estimate busca proporcionar un rango de costos más realista y fundamentado, aunque sigue siendo preliminar y sujeto a ajustes a medida que se obtienen más datos.&lt;br&gt;
Por ejemplo:&lt;/p&gt;

&lt;p&gt;Para un proyecto de construcción, un budget estimate podría calcular costos de materiales, mano de obra y permisos, dando un rango como "entre 50,000 y 60,000 dólares" basado en estimaciones iniciales.&lt;br&gt;
Se utiliza en etapas tempranas de planificación para asignar recursos y establecer un presupuesto inicial.&lt;/p&gt;

&lt;p&gt;Es común en gestión de proyectos, finanzas y negocios para guiar la toma de decisiones antes de un presupuesto final detallado.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>¿Qué es un ballpark estimate?</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Wed, 01 Oct 2025 18:35:21 +0000</pubDate>
      <link>https://dev.to/said_olano/que-es-un-ballpark-estimate-1ae7</link>
      <guid>https://dev.to/said_olano/que-es-un-ballpark-estimate-1ae7</guid>
      <description>&lt;p&gt;A ballpark estimate (in Spanish, estimación aproximada or estimación a grandes rasgos) is a quick and rough evaluation of a value, cost, time, or quantity, which does not aim to be precise but rather to provide a general idea. The term comes from English, referring to a "baseball park" (ballpark), where it is used to indicate something that is "within the range" but not exact.&lt;/p&gt;

&lt;p&gt;For example:&lt;/p&gt;

&lt;p&gt;If someone asks how much it will cost to renovate a house, a ballpark estimate might be: "Between 10,000 and 15,000 dollars," without going into specific details.&lt;br&gt;
It is used when exact data is not available or when a preliminary response is desired.&lt;/p&gt;

&lt;p&gt;It is common in contexts such as business, projects, or informal conversations to give a general idea without committing to precise numbers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvfyzpg8k5pjz753d8tr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkvfyzpg8k5pjz753d8tr.png" alt=" " width="537" height="704"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Un &lt;strong&gt;ballpark estimate&lt;/strong&gt; (en español, estimación aproximada o estimación a grandes rasgos) es una evaluación rápida y aproximada de un valor, costo, tiempo o cantidad, que no busca ser precisa, sino dar una idea general. El término proviene del inglés, haciendo referencia a un "parque de béisbol" (ballpark), donde se usa para indicar algo que está "dentro del rango" pero no exacto.&lt;/p&gt;

&lt;p&gt;Por ejemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Si alguien pregunta cuánto costará renovar una casa, un &lt;strong&gt;ballpark estimate&lt;/strong&gt; podría ser: "Entre 10,000 y 15,000 dólares", sin entrar en detalles específicos.&lt;/li&gt;
&lt;li&gt;Se usa cuando no se tienen todos los datos exactos o cuando se quiere dar una respuesta preliminar.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Es común en contextos como negocios, proyectos o conversaciones informales para dar una idea general sin comprometerse con números precisos.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Introducing My Project: Microservices Architecture with Spring Boot and ELK</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Tue, 30 Sep 2025 00:59:49 +0000</pubDate>
      <link>https://dev.to/said_olano/microservices-architecture-communicates-with-each-other-and-sends-log-info-to-elk-12id</link>
      <guid>https://dev.to/said_olano/microservices-architecture-communicates-with-each-other-and-sends-log-info-to-elk-12id</guid>
      <description>&lt;p&gt;&lt;a href="https://youtu.be/E7knezUQaQ0" rel="noopener noreferrer"&gt;https://youtu.be/E7knezUQaQ0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I’m thrilled to share a project I developed as part of my Java with Spring Boot course! In this project, I’ve created a microservices architecture that not only showcases the power of Spring Boot for building modular and scalable systems but also integrates an advanced logging and monitoring solution using the ELK stack (Elasticsearch, Logstash, Kibana). &lt;/p&gt;

&lt;p&gt;I present all of this in a video that demonstrates the system in action, highlighting its design, functionality, and benefits.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does this project do?&lt;/strong&gt;&lt;br&gt;
The project features a microservices architecture where multiple services, built with Spring Boot, communicate seamlessly to meet the needs of a modern application. Each microservice is designed to be independent, yet they collaborate through RESTful APIs, ensuring smooth communication and a scalable design.&lt;br&gt;
&lt;strong&gt;One of the standout features is the integration with the ELK stack,&lt;/strong&gt; which enables:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Centralized logging:&lt;/strong&gt; Each microservice generates log information that is sent in real-time to Logstash for processing.&lt;br&gt;
&lt;strong&gt;Advanced storage and search:&lt;/strong&gt; Processed logs are stored in Elasticsearch, allowing for fast and efficient searches.&lt;br&gt;
&lt;strong&gt;Intuitive visualization:&lt;/strong&gt; Using Kibana, I’ve created interactive dashboards that display key metrics, usage patterns, and potential issues, making monitoring and decision-making straightforward.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is this project interesting?&lt;/strong&gt;&lt;br&gt;
This project not only applies advanced backend development concepts, such as microservices architecture and log management, but also addresses real-world challenges in modern software development:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scalability:&lt;/strong&gt; The architecture allows new microservices to be added without impacting the rest of the system.&lt;br&gt;
Proactive monitoring: The ELK integration provides clear insights into the application’s behavior, essential for quickly identifying and resolving issues.&lt;br&gt;
Professional relevance: The technologies used (Spring Boot and ELK) are widely adopted in the industry, making this project a practical case study applicable to enterprise environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What you’ll see in the video&lt;/strong&gt;&lt;br&gt;
In the video, I showcase the system in action, including:&lt;/p&gt;

&lt;p&gt;A clear explanation of the microservices architecture and how the services communicate with each other.&lt;br&gt;
Live demonstrations of the interactions between microservices, highlighting the robustness and efficiency of the design.&lt;br&gt;
The configuration and operation of the logging pipeline, from log generation in the microservices to visualization in Kibana.&lt;br&gt;
Practical examples of how Kibana dashboards can be used to analyze performance and detect issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is this project special?&lt;/strong&gt;&lt;br&gt;
This project reflects my passion for backend development and my interest in building technological solutions that are not only functional but also maintainable and scalable. The combination of Spring Boot with a microservices architecture and the power of the ELK stack for log monitoring demonstrates how modern tools can be integrated to create robust, real-world-ready systems.&lt;br&gt;
I invite all technology enthusiasts, developers, and professionals to watch the video and explore this project. I hope it serves as an inspiring and practical example of what can be achieved with Java, Spring Boot, and ELK!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://youtu.be/E7knezUQaQ0" rel="noopener noreferrer"&gt;https://youtu.be/E7knezUQaQ0&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>What is Jaeger in Microservices?</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Sat, 27 Sep 2025 16:28:01 +0000</pubDate>
      <link>https://dev.to/said_olano/spring-boot-jaeger-4c4e</link>
      <guid>https://dev.to/said_olano/spring-boot-jaeger-4c4e</guid>
      <description>&lt;p&gt;Jaeger is an open-source tool designed for distributed tracing in microservices architectures. Its purpose is to monitor and diagnose the behavior of complex systems where multiple services interact, allowing the tracking of request flows across these services to identify performance issues, errors, or bottlenecks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does Jaeger do in microservices?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Request Tracing:&lt;/strong&gt; Jaeger tracks the journey of a request as it passes through different microservices, showing how much time it takes in each and how it propagates through the system.&lt;br&gt;
&lt;strong&gt;Latency Visualization:&lt;/strong&gt; Provides a visual representation of request latency, helping to identify where delays occur.&lt;br&gt;
&lt;strong&gt;Dependency Analysis:&lt;/strong&gt; Displays relationships and dependencies between services, making it easier to understand the system’s architecture.&lt;br&gt;
&lt;strong&gt;Error Diagnosis:&lt;/strong&gt; Helps locate failures by showing where in the chain of microservices an issue occurs.&lt;br&gt;
&lt;strong&gt;Distributed Monitoring:&lt;/strong&gt; In microservices environments, where traditional logs are insufficient, Jaeger offers a unified view of request behavior.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ednfyni79iodeq3uhs3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4ednfyni79iodeq3uhs3.png" alt=" " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Circuit breaker - A helpful and saving microservice Pattern.</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Sun, 21 Sep 2025 19:44:49 +0000</pubDate>
      <link>https://dev.to/said_olano/circuit-breaker-a-helpful-and-saving-microservice-pattern-ppp</link>
      <guid>https://dev.to/said_olano/circuit-breaker-a-helpful-and-saving-microservice-pattern-ppp</guid>
      <description>&lt;p&gt;In a microservices architecture built with Spring Boot, ensuring robust communication between distributed services is critical, yet &lt;strong&gt;the failure of remote microservice calls can disrupt system reliability&lt;/strong&gt;. Unreliable network conditions, service downtime, or high latency can cascade into broader system failures if not properly managed. To address this, developers must implement &lt;strong&gt;resilient design patterns&lt;/strong&gt; that anticipate and mitigate such issues, ensuring seamless operation and maintaining a &lt;strong&gt;high-quality user experience&lt;/strong&gt; even under adverse conditions.&lt;/p&gt;

&lt;p&gt;One powerful solution to this challenge is the &lt;strong&gt;circuit breaker pattern&lt;/strong&gt;, a proven mechanism for managing the risks associated with remote service calls. By leveraging libraries like &lt;strong&gt;Resilience4j&lt;/strong&gt; or Spring Cloud Circuit Breaker in a Spring Boot application, the circuit breaker pattern monitors service interactions, detects failures, and prevents cascading errors by temporarily halting requests to a failing service. This approach not only enhances fault tolerance but also allows for graceful degradation, &lt;strong&gt;enabling the system to recover efficiently while maintaining operational stability&lt;/strong&gt;. Embracing this pattern empowers developers to build robust, &lt;strong&gt;scalable microservices&lt;/strong&gt; that thrive in dynamic and unpredictable environments.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Git Repo&lt;/strong&gt;:&lt;a href="https://github.com/josesaid/shopping-microservices" rel="noopener noreferrer"&gt;https://github.com/josesaid/shopping-microservices&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnmq6e0tkhf33e0ijs0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnmq6e0tkhf33e0ijs0e.png" alt=" " width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In a Spring Boot microservices architecture, the &lt;strong&gt;order-service&lt;/strong&gt; may interact with services such as &lt;strong&gt;inventory-service&lt;/strong&gt; and &lt;strong&gt;notifications-service&lt;/strong&gt;, but these interactions are prone to failure due to network issues or service unavailability. To maintain system &lt;strong&gt;reliability&lt;/strong&gt;, implementing &lt;strong&gt;fault-tolerance&lt;/strong&gt; mechanisms is critical to prevent cascading failures and &lt;strong&gt;ensure a seamless user experience&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The circuit breaker pattern&lt;/strong&gt;, supported by tools like &lt;strong&gt;Resilience4j&lt;/strong&gt; or Spring Cloud Circuit Breaker, effectively manages these risks by &lt;strong&gt;monitoring service calls and halting requests to failing services.&lt;/strong&gt; For example, if the &lt;strong&gt;order-service&lt;/strong&gt; cannot reach the inventory-service, the circuit breaker intervenes to allow graceful degradation, enhancing system stability and enabling developers to build resilient microservices.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Creating your first Angular app</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Thu, 18 Sep 2025 18:27:06 +0000</pubDate>
      <link>https://dev.to/said_olano/creating-my-first-angular-app-2bio</link>
      <guid>https://dev.to/said_olano/creating-my-first-angular-app-2bio</guid>
      <description>&lt;p&gt;Here I go again (like the song). In this post, I am sharing the steps to create your first Angular app.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Run this command to create an Angular project:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;ng new proyecto-angular
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Move into your new project directory:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cd proyecto-angular
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Start the Angular server/project:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm start
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Finally, you will get this:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frotfvvt29lqiav1bs6r3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frotfvvt29lqiav1bs6r3.png" alt=" " width="800" height="344"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Deploy a Spring Boot application in Kubernetes</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Wed, 17 Sep 2025 03:57:15 +0000</pubDate>
      <link>https://dev.to/said_olano/deploy-a-spring-boot-application-in-kubernetes-19gj</link>
      <guid>https://dev.to/said_olano/deploy-a-spring-boot-application-in-kubernetes-19gj</guid>
      <description>&lt;p&gt;Hi Followers, &lt;br&gt;
Here you can find a recording where I explain how to deploy 2 microservices PRODUCTOS (products) &amp;amp; CLIENTES (clients), on a local Kubernetes instance running on localhost (I am using minikube).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spanish Recording:&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://youtu.be/cZeSIvqGOfU?si=lj8v0kZnrtQBuhev&amp;amp;t=5240" rel="noopener noreferrer"&gt;https://youtu.be/cZeSIvqGOfU?si=lj8v0kZnrtQBuhev&amp;amp;t=5240&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Screenshots:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;K8s configuration files:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6b2yrsb03zyyua6x3i8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz6b2yrsb03zyyua6x3i8.png" alt=" " width="800" height="360"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Minikube (kubernetes local)&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmu22tgasu0t9n9eorlo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnmu22tgasu0t9n9eorlo.png" alt=" " width="800" height="574"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes local running:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fia9j4p7qg4pxbosxs3ni.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fia9j4p7qg4pxbosxs3ni.png" alt=" " width="800" height="754"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes Pods:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqky9mmji6kni7e2dcan.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flqky9mmji6kni7e2dcan.png" alt=" " width="800" height="682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Kubernetes Secrets:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1z59w7l90wq1y7udo7y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fo1z59w7l90wq1y7udo7y.png" alt=" " width="756" height="923"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Increasing the number of the pods running the product microservice:&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnmpea5sqced4z6mzdn4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbnmpea5sqced4z6mzdn4.png" alt=" " width="800" height="700"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Running the products microservice exposed on the PORT given by K8s (minikube with the minikube service command):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffm3d21eu9gvr2ipp73ms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffm3d21eu9gvr2ipp73ms.png" alt=" " width="800" height="1059"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Finally, when you remove all the k8s components, you get something like this where you can see how the components start to turn off (gray circle on the right side of the screen):&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ei6yg13aer20gbd4dp0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6ei6yg13aer20gbd4dp0.png" alt=" " width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>k8s</category>
      <category>springboot</category>
      <category>cloud</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>How to configure DBeaver to use Cassandra as a NoSQL DB</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Wed, 17 Sep 2025 00:33:12 +0000</pubDate>
      <link>https://dev.to/said_olano/how-to-configure-dbeaver-to-use-cassandra-as-a-nosql-db-k4g</link>
      <guid>https://dev.to/said_olano/how-to-configure-dbeaver-to-use-cassandra-as-a-nosql-db-k4g</guid>
      <description>&lt;p&gt;To configure DBeaver to use Cassandra as a NoSQL DB:&lt;/p&gt;

&lt;p&gt;1.- Download the client:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43f5iw7mvra5pq0rlnw0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F43f5iw7mvra5pq0rlnw0.png" alt=" " width="131" height="197"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2.- Open it up:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fakf91fqst9nxy3k4t91k.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fakf91fqst9nxy3k4t91k.png" alt=" " width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;3.- Right click in the UI:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1q6gkn8z66l6celrswb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu1q6gkn8z66l6celrswb.png" alt=" " width="725" height="682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;4.- Create Connection option:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97rb0zrbx0f2wls1kolj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F97rb0zrbx0f2wls1kolj.png" alt=" " width="416" height="205"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5.- Type Cassandra:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhf09bwm1iaqu092b8vv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuhf09bwm1iaqu092b8vv.png" alt=" " width="800" height="542"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6.- Select it, then Next:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0z2lel6257gma75pph5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq0z2lel6257gma75pph5.png" alt=" " width="721" height="565"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;7.- Leave the default options:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwlg7h6gjalkxlams3v9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjwlg7h6gjalkxlams3v9.png" alt=" " width="800" height="629"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;8.- Test Connection (button):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfiugu3r1zgjxvhhnuvs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdfiugu3r1zgjxvhhnuvs.png" alt=" " width="731" height="685"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>How to Set Up a circuit break API microservice pattern in a simple REST Architecture</title>
      <dc:creator>Said Olano</dc:creator>
      <pubDate>Mon, 15 Sep 2025 19:44:31 +0000</pubDate>
      <link>https://dev.to/said_olano/how-to-set-up-a-circuit-break-api-microservice-pattern-in-a-simple-rest-architecture-548</link>
      <guid>https://dev.to/said_olano/how-to-set-up-a-circuit-break-api-microservice-pattern-in-a-simple-rest-architecture-548</guid>
      <description>&lt;p&gt;Simple, isn't it?&lt;br&gt;
Define in your microservice B (Order Service)a call to the microservice A (Inventory Service). If Microservice B tries to call Microservice "A", then the circuit breaker takes place with the configuration setup, and it will notify you as you wish, which will be super helpful to avoid headaches for the final user, and will log ALL into files for future research and improvements.&lt;/p&gt;

&lt;p&gt;In your microservice B, you need to explicitly mention microservice A:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk851cloq8oiyt062g7lt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk851cloq8oiyt062g7lt.png" alt=" " width="589" height="110"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Then, you need to mention the API pattern desired:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7szzvu5mjz2szcsel6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa7szzvu5mjz2szcsel6f.png" alt=" " width="800" height="230"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
