<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Software Engineering on João Vieira (JV)</title>
    <link>https://joaovieira.ca/categories/software-engineering/</link>
    <description>Recent content in Software Engineering on João Vieira (JV)</description>
    <image>
      <title>João Vieira (JV)</title>
      <url>https://joaovieira.ca/profile.jpeg</url>
      <link>https://joaovieira.ca/profile.jpeg</link>
    </image>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Sat, 08 Aug 2026 10:30:00 -0700</lastBuildDate>
    <atom:link href="https://joaovieira.ca/categories/software-engineering/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Upgrading to Spring Boot 4: Lessons From an AI-First Migration</title>
      <link>https://joaovieira.ca/spring-boot-4-upgrade/</link>
      <pubDate>Sat, 08 Aug 2026 08:30:00 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-boot-4-upgrade/</guid>
      <description>What made our Spring Boot 3.5 to 4.1 upgrade easier than the 2 to 3 one, including the AI-first knowledge base we built and shared across service teams.</description>
    </item>
    <item>
      <title>MongoDB Server Timeout: When Client Timeouts Aren&#39;t Enough</title>
      <link>https://joaovieira.ca/mongodb-server-timeout/</link>
      <pubDate>Wed, 03 Jun 2026 22:30:00 -0800</pubDate>
      <guid>https://joaovieira.ca/mongodb-server-timeout/</guid>
      <description>Discovered why a query ran for 14 hours on MongoDB server despite client timeout: missing server-side timeout configuration. Solutions for MongoClientSettings.</description>
    </item>
    <item>
      <title>Improving MongoDB Observability with Spring Data</title>
      <link>https://joaovieira.ca/mongodb-observability-spring-data/</link>
      <pubDate>Thu, 07 May 2026 18:07:11 -0700</pubDate>
      <guid>https://joaovieira.ca/mongodb-observability-spring-data/</guid>
      <description>How we improved MongoDB tracing spans in Spring Data by adding a custom command listener to surface query details while keeping sensitive values sanitized.</description>
    </item>
    <item>
      <title>IntelliJ AI Chat Window Is Better Than the Copilot Plugin</title>
      <link>https://joaovieira.ca/intellij-ai-chat-window-better-than-copilot-plugin/</link>
      <pubDate>Thu, 19 Mar 2026 19:00:00 -0700</pubDate>
      <guid>https://joaovieira.ca/intellij-ai-chat-window-better-than-copilot-plugin/</guid>
      <description>After using both tools in daily work, I found the IntelliJ AI chat window flow more productive than the Copilot plugin.</description>
    </item>
    <item>
      <title>JPA Delete Queries and Optimistic Locking: Why Batching Fails</title>
      <link>https://joaovieira.ca/jpa-delete-all-query-not-batching/</link>
      <pubDate>Thu, 22 Jan 2026 22:30:00 -0800</pubDate>
      <guid>https://joaovieira.ca/jpa-delete-all-query-not-batching/</guid>
      <description>Discovered why JPA deleteAll wasn&amp;rsquo;t batching: @Version fields force entity loading for optimistic locking. The fix: explicit @Query annotation.</description>
    </item>
    <item>
      <title>Spring Boot 4 Migration Analysis</title>
      <link>https://joaovieira.ca/spring-boot-4-analysis/</link>
      <pubDate>Mon, 19 Jan 2026 19:00:00 -0800</pubDate>
      <guid>https://joaovieira.ca/spring-boot-4-analysis/</guid>
      <description>A detailed analysis of the major changes in Spring Boot 4, including Jackson 3 migration, Java 17 baseline, and dependency updates.</description>
    </item>
    <item>
      <title>Getting Observability Right with Spring AI and WebFlux</title>
      <link>https://joaovieira.ca/spring-ai-webflux-observability/</link>
      <pubDate>Sat, 01 Nov 2025 12:30:24 -0900</pubDate>
      <guid>https://joaovieira.ca/spring-ai-webflux-observability/</guid>
      <description>How I got observability working in my reactive Spring AI app using WebFlux, after hours debugging tracing and context propagation issues.</description>
    </item>
    <item>
      <title>Why Task Snacking Feels Productive But Holds You Back</title>
      <link>https://joaovieira.ca/task-snacking/</link>
      <pubDate>Sat, 01 Feb 2025 08:35:24 -0800</pubDate>
      <guid>https://joaovieira.ca/task-snacking/</guid>
      <description>Task snacking feels productive but can keep you from meaningful work. Stay aware, balance small tasks with big ones, and make sure progress truly matters</description>
    </item>
    <item>
      <title>Fixing Tracing Propagation in Spring WebFlux: A One-Line Solution</title>
      <link>https://joaovieira.ca/micrometer-tracing-spring-webflux-propagation/</link>
      <pubDate>Mon, 27 Jan 2025 17:15:24 -0800</pubDate>
      <guid>https://joaovieira.ca/micrometer-tracing-spring-webflux-propagation/</guid>
      <description>Upgrading to Spring Boot 3.2 revealed tracing issues in a WebFlux service. A single line of code fixed broken span propagation and improved debugging.</description>
    </item>
    <item>
      <title>Enhance GitLab Release Notes with Automated Library Changelogs</title>
      <link>https://joaovieira.ca/enhance-gitlab-release-notes-automated-library-changelogs/</link>
      <pubDate>Mon, 16 Sep 2024 20:00:05 -0700</pubDate>
      <guid>https://joaovieira.ca/enhance-gitlab-release-notes-automated-library-changelogs/</guid>
      <description>Learn how to automate GitLab library changelogs for streamlined release notes, improving efficiency and consistency in your development workflow</description>
    </item>
    <item>
      <title>Navigating a Major Spring Boot Upgrade: Key Takeaways</title>
      <link>https://joaovieira.ca/spring-boot-upgrade-key-takeaways/</link>
      <pubDate>Tue, 27 Aug 2024 20:55:24 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-boot-upgrade-key-takeaways/</guid>
      <description>Learn key insights from upgrading Spring Boot from 2.7 to 3.2. Discover practical tips, challenges faced, and best practices for a smooth transition</description>
    </item>
    <item>
      <title>Backwards compatible migration for Spring Batch 5 params table</title>
      <link>https://joaovieira.ca/spring-batch-5-migration-params-table/</link>
      <pubDate>Mon, 19 Aug 2024 20:08:24 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-batch-5-migration-params-table/</guid>
      <description>From Spring Batch 4 to 5 there were changes in the rows on BATCH_JOB_EXECUTION_PARAMS we show an approach that makes the migration easy and backward-compatible</description>
    </item>
    <item>
      <title>90% of distributed traces observability gone after Spring Boot upgrade</title>
      <link>https://joaovieira.ca/spring-boot-3-tracing-sampling-default-probability/</link>
      <pubDate>Wed, 17 Jul 2024 08:44:24 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-boot-3-tracing-sampling-default-probability/</guid>
      <description>After upgrading Spring Boot version to 3.3.1 we notice that 90% of our distributed tracing in our observability tool were gone. In this post we tell the story</description>
    </item>
    <item>
      <title>How upgrading from Spring Boot 3.2.5 to 3.3.1 broke our object mapper</title>
      <link>https://joaovieira.ca/spring-boot-3-3-1-jackson-jdk8module/</link>
      <pubDate>Mon, 15 Jul 2024 21:23:24 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-boot-3-3-1-jackson-jdk8module/</guid>
      <description>After upgrading Spring Boot from version 3.2.5 to 3.3.1 we started to have a serialization issue with the Optional class. Check how to fix it in this post</description>
    </item>
    <item>
      <title>Migration from Netflix Zuul to Spring Cloud Gateway Server MVC</title>
      <link>https://joaovieira.ca/migration-netflix-zuul-to-spring-cloud-gateway-server-mvc/</link>
      <pubDate>Thu, 27 Jun 2024 20:55:24 -0700</pubDate>
      <guid>https://joaovieira.ca/migration-netflix-zuul-to-spring-cloud-gateway-server-mvc/</guid>
      <description>I have recently migrated our API gateway from Spring Cloud Starter Netflix Zuul to Spring Cloud Gateway Server MVC and here is a complete guide on how to do it</description>
    </item>
    <item>
      <title>How to Migrate Spring Boot from 2.7 to 3.2: A detailed migration guide</title>
      <link>https://joaovieira.ca/spring-boot-3-migration/</link>
      <pubDate>Sat, 27 Apr 2024 08:55:24 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-boot-3-migration/</guid>
      <description>I have recently migrated several projects and libraries from Spring Boot 2.7.15 to Spring Boot 3.2.4 and I would like to share some insights into the changes</description>
    </item>
    <item>
      <title>Migrating Spring Sleuth to Micrometer Observability in Spring Boot 3</title>
      <link>https://joaovieira.ca/spring-boot-3-spring-sleuth-micrometer-migration/</link>
      <pubDate>Thu, 11 Apr 2024 20:55:24 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-boot-3-spring-sleuth-micrometer-migration/</guid>
      <description>Spring Sleuth was removed in Spring Boot version 3 in favor of Micrometer and I recently migrated many services and want to share the learnings with you.</description>
    </item>
    <item>
      <title>Replacing deprecated @EnableResourceServer with Spring Security</title>
      <link>https://joaovieira.ca/spring-security-resource-server-jwt/</link>
      <pubDate>Mon, 01 Apr 2024 19:08:24 -0700</pubDate>
      <guid>https://joaovieira.ca/spring-security-resource-server-jwt/</guid>
      <description>We recently replaced the deprecated @EnableResourceServer with Spring Security and in this post I will share what we did and the new code.</description>
    </item>
    <item>
      <title>Root causes are usually simpler than they appear</title>
      <link>https://joaovieira.ca/root-cause-simpler-than-appear/</link>
      <pubDate>Sat, 03 Feb 2024 11:25:37 -0700</pubDate>
      <guid>https://joaovieira.ca/root-cause-simpler-than-appear/</guid>
      <description>We are smart engineers and sometimes when we face a problem we may tend to think the root cause is very complex, but usually, they are simpler than they appear</description>
    </item>
    <item>
      <title>RabbitMQ Tips: The importance of poisonous message handling for DLQs</title>
      <link>https://joaovieira.ca/rabbitmq-dlq-poisonous-message/</link>
      <pubDate>Mon, 18 Dec 2023 19:20:50 -0700</pubDate>
      <guid>https://joaovieira.ca/rabbitmq-dlq-poisonous-message/</guid>
      <description>Poisonous message handling is very important in the Dead Letter Queue (DLQ) and this post we will show what happen when we do not take that into account</description>
    </item>
    <item>
      <title>How Dependabot is helping us keep our dependencies up to date</title>
      <link>https://joaovieira.ca/dependabot-benefits/</link>
      <pubDate>Sat, 04 Nov 2023 10:15:11 -0700</pubDate>
      <guid>https://joaovieira.ca/dependabot-benefits/</guid>
      <description>Keeping project dependencies up to date is always a challenge. Fortunately, Dependabot can help with that.</description>
    </item>
    <item>
      <title>My Software Engineering Philosophy: Principles that guide my work-life</title>
      <link>https://joaovieira.ca/software-engineer-philosophy/</link>
      <pubDate>Wed, 13 Sep 2023 19:05:37 -0700</pubDate>
      <guid>https://joaovieira.ca/software-engineer-philosophy/</guid>
      <description>This document is a set of principles that are part of my software engineering philosophy</description>
    </item>
    <item>
      <title>Insights from Mentorship: Three Key Learnings</title>
      <link>https://joaovieira.ca/insights-from-mentorship-key-learnings/</link>
      <pubDate>Mon, 14 Aug 2023 10:22:27 -0700</pubDate>
      <guid>https://joaovieira.ca/insights-from-mentorship-key-learnings/</guid>
      <description>The mentorship with Aleksey provided an invaluable opportunity to learn from his extensive experience and gain insights into his approach to work</description>
    </item>
    <item>
      <title>The importance of the prefetch count in RabbiMQ consumers</title>
      <link>https://joaovieira.ca/rabbitmq-prefetch-count/</link>
      <pubDate>Sat, 24 Jun 2023 08:57:50 -0700</pubDate>
      <guid>https://joaovieira.ca/rabbitmq-prefetch-count/</guid>
      <description>Prefetch count is a very important parameter that we have when configuring consumers in RabbitMQ, this real-case scenario shows an example of this</description>
    </item>
    <item>
      <title>RabbitMQ Quorum queues definition arguments</title>
      <link>https://joaovieira.ca/rabbitmq-quorum-queues/</link>
      <pubDate>Tue, 02 May 2023 19:15:50 -0700</pubDate>
      <guid>https://joaovieira.ca/rabbitmq-quorum-queues/</guid>
      <description>Classic queues are deprecated and are going to be replaced by Quorum queues, which are durable, replicated FIFO queues build with data safety as a top priority</description>
    </item>
    <item>
      <title>Observability Basics</title>
      <link>https://joaovieira.ca/observability-basics/</link>
      <pubDate>Sat, 21 Jan 2023 10:59:18 -0800</pubDate>
      <guid>https://joaovieira.ca/observability-basics/</guid>
      <description>Learn what is Observability and the basic signals that allows system to be observable</description>
    </item>
    <item>
      <title>Cache in a microservice environment: A short overview</title>
      <link>https://joaovieira.ca/cache-overview/</link>
      <pubDate>Mon, 07 Nov 2022 20:25:46 -0800</pubDate>
      <guid>https://joaovieira.ca/cache-overview/</guid>
      <description>Caching frequently used information is a very good approach to speed up your microservice. In this post we show a brief overview about caching</description>
    </item>
    <item>
      <title>Platform team: What it does and how it helps the company grows</title>
      <link>https://joaovieira.ca/platform-team/</link>
      <pubDate>Wed, 26 Oct 2022 19:25:37 -0700</pubDate>
      <guid>https://joaovieira.ca/platform-team/</guid>
      <description>Our main goal as the platform team is to help improve the developer experience and help the company to deliver more</description>
    </item>
    <item>
      <title>PostgreSQL&#39;s GIN index: Long random queries can happen on data updates</title>
      <link>https://joaovieira.ca/postgresql-gin-index-long-queries/</link>
      <pubDate>Sat, 10 Sep 2022 12:00:05 -0700</pubDate>
      <guid>https://joaovieira.ca/postgresql-gin-index-long-queries/</guid>
      <description>We were seeing random queries taking as much a 35 seconds on our Postgres DB. The cause was GIN index feature that you have to get to know</description>
    </item>
    <item>
      <title>RabbitMQ High Availability: Tips to make your message broker better</title>
      <link>https://joaovieira.ca/rabbitmq-high-availability/</link>
      <pubDate>Sat, 04 Jun 2022 09:07:50 -0700</pubDate>
      <guid>https://joaovieira.ca/rabbitmq-high-availability/</guid>
      <description>When taking RabbitMQ to production, one of the main concerns is how to have high availability of the queues and exchanges</description>
    </item>
    <item>
      <title>Interview Preparation to help you get better Software Engineering jobs</title>
      <link>https://joaovieira.ca/interview-preparation-guide-software-engineering/</link>
      <pubDate>Tue, 17 May 2022 19:20:51 -0700</pubDate>
      <guid>https://joaovieira.ca/interview-preparation-guide-software-engineering/</guid>
      <description>I have compiled the list of resources and questions that will help prepare for the interview and in the process of looking for a Software Engineering Job</description>
    </item>
    <item>
      <title>Choosing Service Level Objective(SLO): Lessons from Google&#39;s team</title>
      <link>https://joaovieira.ca/choosing-service-level-objectives-slo/</link>
      <pubDate>Wed, 04 May 2022 20:20:26 -0700</pubDate>
      <guid>https://joaovieira.ca/choosing-service-level-objectives-slo/</guid>
      <description>Learn with the mistakes and experience of the Google&amp;rsquo;s team how to choose the Service Level Objectives (SLOs) for your services</description>
    </item>
    <item>
      <title>Pact Contract Testing flow on a CI pipeline</title>
      <link>https://joaovieira.ca/pact-contract-testing-flow-ci-pipeline/</link>
      <pubDate>Mon, 18 Apr 2022 19:08:24 -0700</pubDate>
      <guid>https://joaovieira.ca/pact-contract-testing-flow-ci-pipeline/</guid>
      <description>Check out how is the Pact Contract Testing flow in a CI pipeline in both feature branches and also master branches and how to safely deploy your services</description>
    </item>
    <item>
      <title>Using Pact for Consumer-Driven Contract Testing</title>
      <link>https://joaovieira.ca/pact-contract-testing/</link>
      <pubDate>Sat, 19 Feb 2022 11:07:02 -0300</pubDate>
      <guid>https://joaovieira.ca/pact-contract-testing/</guid>
      <description>Pact is a consumer-driven testing tool that helps with contract tests. In this post, we explore more about Pact and how it works and check out a sample code</description>
    </item>
    <item>
      <title>Contract Testing: Helping your microservices keep communicating</title>
      <link>https://joaovieira.ca/contract-testing/</link>
      <pubDate>Sun, 06 Feb 2022 18:02:26 -0300</pubDate>
      <guid>https://joaovieira.ca/contract-testing/</guid>
      <description>Contract testing bring more confidence and less anxiety for the whole engineering team. It also helps in the documentation of the code and communication</description>
    </item>
    <item>
      <title>What is it that makes bad code smell so bad?</title>
      <link>https://joaovieira.ca/what-makes-bad-code-smell-bad/</link>
      <pubDate>Sat, 29 Jan 2022 09:15:11 -0300</pubDate>
      <guid>https://joaovieira.ca/what-makes-bad-code-smell-bad/</guid>
      <description>We know that code smells are bad. But what is it that makes bad code smell so bad? In this post, I will list 4 main reasons for a code to smell bad.</description>
    </item>
    <item>
      <title>Reflections on Clean Code: Insights from Uncle Bob and Others</title>
      <link>https://joaovieira.ca/clean-code/</link>
      <pubDate>Sat, 22 Jan 2022 19:41:57 -0300</pubDate>
      <guid>https://joaovieira.ca/clean-code/</guid>
      <description>Clean code is elegant, efficient, simple, and written with care. It’s about writing code that&amp;rsquo;s easy for humans to understand, not just for computers to execute</description>
    </item>
    <item>
      <title>Building My Blog: The Platform and Tech Stack</title>
      <link>https://joaovieira.ca/blog-stack/</link>
      <pubDate>Sat, 08 Jan 2022 10:08:08 -0300</pubDate>
      <guid>https://joaovieira.ca/blog-stack/</guid>
      <description>Learn why I chose a static blog powered by Hugo, the pros and cons of static vs dynamic blogs, and how I&amp;rsquo;m hosting it for free</description>
    </item>
  </channel>
</rss>
