<?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: Igor Fraga</title>
    <description>The latest articles on DEV Community by Igor Fraga (@igorfragadev).</description>
    <link>https://dev.to/igorfragadev</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%2F1316199%2F8e156921-4323-4eef-9e7e-e7e2b28828e3.jpg</url>
      <title>DEV Community: Igor Fraga</title>
      <link>https://dev.to/igorfragadev</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/igorfragadev"/>
    <language>en</language>
    <item>
      <title>Choosing Technologies: The Beauty and the Beast Trap</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Fri, 12 Sep 2025 20:38:25 +0000</pubDate>
      <link>https://dev.to/igorfragadev/choosing-technologies-the-beauty-and-the-beast-trap-2b0e</link>
      <guid>https://dev.to/igorfragadev/choosing-technologies-the-beauty-and-the-beast-trap-2b0e</guid>
      <description>&lt;p&gt;&lt;strong&gt;Software Architecture Unveiled: A Series by Igor Fraga&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hi everyone, Igor Fraga here. This is the fourth article of these series to unveil the challenges and the role of what we do as a Software Architect.&lt;/p&gt;

&lt;p&gt;As an architect, one of my most important jobs is to choose technology. It is also one of the most dangerous jobs.&lt;/p&gt;

&lt;p&gt;We always see new, exciting tools that promise to be fast and wonderful. I call these tools the &lt;em&gt;Beauty&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;But we also have old, reliable tools that we know will work. They may not be exciting, but they are strong. I call these the &lt;em&gt;Beast&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;It is a big mistake to choose the &lt;em&gt;Beauty&lt;/em&gt; and forget the &lt;em&gt;Beast&lt;/em&gt;. I know this because I've seen this mistake happened multiple times, also on a project with a very good team. Here is what happened.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Story: The Dream of a Super-Fast System
&lt;/h2&gt;

&lt;p&gt;Some years ago, a company called X (I'll not reveal the name here, of course) needed a new system to handle many events from thousands of users worldwide, integrating their platforms that until then, were separated.&lt;/p&gt;

&lt;p&gt;The goal was to process these events very quickly, with very little delay. Our team was smart and experienced, but the architect thought a reactive Java system was the best way to do this.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Beauty&lt;/em&gt; he wanted us to use was a technology called Project Reactor and Spring WebFlux. It promised amazing things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It was non-blocking.&lt;/strong&gt; This means it could handle many tasks at the same time without waiting. It would be much faster than old systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;It used fewer resources.&lt;/strong&gt; It could manage thousands of connections with only a few threads. The old way needed one thread for each connection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The code was clean.&lt;/strong&gt; It was a modern and simple way to write complex code.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The other choice was the &lt;em&gt;Beast&lt;/em&gt; we knew very well: the classic Spring MVC. We used it for many of our other systems. It was strong and our whole team understood it.&lt;/p&gt;

&lt;p&gt;The team was kind of skeptical about using reactive but the architect insisted on saying it was the only way to be fast enough.&lt;/p&gt;

&lt;p&gt;I was worried it would be hard to learn and maintain but over all, if this paradigm were really necessary within a virtually all legacy arrangement.&lt;/p&gt;

&lt;p&gt;But we had no choice, and he didn't listened to anyone, he just came out with a skeleton of the service so we should work above that.&lt;/p&gt;

&lt;p&gt;So, let's build the modern, super-fast system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problems Begin: When the Dream Becomes Hard
&lt;/h2&gt;

&lt;p&gt;We built a small test system, and it was very fast. We were happy and thought we made the right choice.&lt;/p&gt;

&lt;p&gt;Despite the learning curve and the complete coding paradigm shift, we've managed to make it out somehow.&lt;/p&gt;

&lt;p&gt;But then, we started building the real system for production. That is when the problems started.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Debugging was a nightmare.&lt;/strong&gt; The code was made of VERY long chains of operators. When there was an error, the error message was very hard to understand. It was difficult to see where the problem happened.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Other tools did not work well with it.&lt;/strong&gt; We used many other tools for things like security and data. We found that these tools were not reactive. They were blocking. When we used them, they broke our new system’s non-blocking design.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;There were new kinds of bugs.&lt;/strong&gt; We had problems that were very hard to find. For example, the system would slowly use more and more memory, and then crash. We did not know why.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Our team stopped building new features. Instead, they spent all their time trying to fix these new, hard problems.&lt;/p&gt;

&lt;p&gt;The beautiful, super-fast non-blocking code we wanted was now full of complex fixes and we were losing our hairs on it.&lt;/p&gt;

&lt;p&gt;I'm not saying that the reactive programming is bad and should be avoided or that it doesn't works. What I'm saying that, for this case, it never made sense at all. It was a real nightmare without any real business benefit for this particular project.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Solution: A Checklist to Help Us Choose Better
&lt;/h2&gt;

&lt;p&gt;This bad experience taught me an important lesson.&lt;/p&gt;

&lt;p&gt;Now, when I'm choosing tech stack, I use a simple framework to help me choose new technology.&lt;/p&gt;

&lt;p&gt;It is not to stop new ideas.&lt;/p&gt;

&lt;p&gt;It is to make sure we choose new ideas in a smart way that makes sense to each purpose.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technology Checklist
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1. Is it Ready and Stable?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Version:&lt;/strong&gt; Is it a stable version (like 1.0 or higher)? Early versions can change suddenly. Take for instance, the disruptive changes from Spring AI M5 (milestone release) to final 1.0.0 GA public release.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Team Skills:&lt;/strong&gt; Does our team already know how to use this? Or is it completely new for everyone? Consider specially the schedule and available time when looking at this.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Community:&lt;/strong&gt; Is there a big community of users? A good community helps fix bugs and answer questions.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Does it Work with Our Other Tools?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compatibility:&lt;/strong&gt; Do our other important tools work well with this new technology?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Integration:&lt;/strong&gt; Is it easy to connect with our systems for monitoring, security, and deployment?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Is it Easy to Learn?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Good Documentation:&lt;/strong&gt; Is there clear documentation with good examples? Does it explain common problems?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Learning Time:&lt;/strong&gt; How long will it take for our team to learn it well?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Is it the Right Choice for Our Project?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Good Fit:&lt;/strong&gt; Is this technology a good solution for our specific problem? Or do we just think it is cool?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Small Test:&lt;/strong&gt; Can we build a small test project first? This test should check the riskiest parts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Backup Plan:&lt;/strong&gt; If it does not work, is it easy to change to a different technology?&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How you can decide
&lt;/h2&gt;

&lt;p&gt;Today, when thinking about a new technology, follow three simple steps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Use the Checklist:&lt;/strong&gt; The team fills out the checklist together.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Build a Small Test:&lt;/strong&gt; Building a small test project to check the most dangerous parts.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Write Down the Decision:&lt;/strong&gt; Write down why the team chose it (both architect and developers, TOGETHER), what the risks are, and how they will be managed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Choosing technology is about managing risk.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Beauty&lt;/em&gt; of new tools is exciting, but they can be immature and risky.&lt;/p&gt;

&lt;p&gt;The &lt;em&gt;Beast&lt;/em&gt; of old tools is predictable and safe.&lt;/p&gt;

&lt;p&gt;A good architect understands both.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;They know the most important thing is that a system works well and the team can maintain it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the next article, we will talk about how to design systems that can change easily, like building with Lego blocks.&lt;/p&gt;

&lt;p&gt;See you then!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>programming</category>
      <category>reactive</category>
      <category>spring</category>
    </item>
    <item>
      <title>The Architect Communication Challenge: Speaking Multiple Languages</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Mon, 25 Aug 2025 14:53:02 +0000</pubDate>
      <link>https://dev.to/igorfragadev/the-architect-communication-challenge-speaking-multiple-languages-4pja</link>
      <guid>https://dev.to/igorfragadev/the-architect-communication-challenge-speaking-multiple-languages-4pja</guid>
      <description>&lt;p&gt;&lt;strong&gt;Software Architecture Unveiled: A Series by Igor Fraga&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hi everyone, Igor Fraga here. This is the third article of these series to unveil the challenges and the role of what we do as a Software Architect. As a software architect, a big part of the job is translation. Not between human languages, but between roles: product managers speak in outcomes, developers in constraints, designers in flows, security in risk, and executives in priorities. When these “languages” don’t align, projects slow down—or fail.&lt;/p&gt;

&lt;p&gt;Here’s a true-to-life story from a health-tech launch that shows how ambiguity around a single word—security—nearly derailed the timeline, and how we turned it around with simple tools and habits.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Setup: One Word, Many Meanings
&lt;/h2&gt;

&lt;p&gt;We were building a new feature for a health-tech platform: secure patient messaging between clinics and patients. Everyone agreed security was “critical.” But “security” meant different things to each group:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Product meant “users trust us; no scary headlines.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security team meant “no PHI leaks, strong controls, audits.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Developers meant “auth is solid, data is encrypted, requests are safe.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Legal meant “compliance with privacy laws and auditability.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Design meant “simple, safe, not scary to use.”&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Operations meant “we can detect incidents and respond fast.”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All reasonable. But because we didn’t define the word together, each team moved in a slightly different direction. That “slight” drift compounds fast.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Misalignment Emerges
&lt;/h2&gt;

&lt;p&gt;Two weeks before launch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Product expected end-to-end encryption (E2EE) in the messaging feature.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Engineering implemented encryption in transit and at rest, with role-based access control—strong, but not E2EE.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security assumed message redaction in logs and minimal retention; Ops had verbose logs with message snippets to debug issues quickly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Design shipped a friendly “secure” badge with no explanation; Legal needed explicit consent text and retention policy visible to users.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Same goal, multiple interpretations. Our risk: delay the launch or ship something we’d need to rework under pressure.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Reset: Define the Word Together
&lt;/h2&gt;

&lt;p&gt;We paused. In a one-hour workshop, we agreed on the meaning of &lt;strong&gt;“security”&lt;/strong&gt; for this feature, written in plain language with testable criteria.&lt;/p&gt;

&lt;p&gt;Security definition for patient messaging (v1):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Data protection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  TLS 1.2+ in transit; AES-256 at rest.&lt;/li&gt;
&lt;li&gt;  No message bodies in logs; IDs and metadata only.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Access control:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Only sender, recipient, and authorized clinicians can read messages.&lt;/li&gt;
&lt;li&gt;  Support can access metadata for troubleshooting; message content access requires explicit, auditable approval.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Privacy and retention:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Retain message bodies for 180 days (legal requirement X), then delete or anonymize.&lt;/li&gt;
&lt;li&gt;  Users can request deletion; we honor within Y days.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Auditability:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Every read/write is logged with user/service ID, timestamp, purpose.&lt;/li&gt;
&lt;li&gt;  Alerting on anomalous access patterns.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;UX:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Clear security copy: what “secure” means, how data is used, and retention.&lt;/li&gt;
&lt;li&gt;  Consent flow before first message; link to policy.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;

&lt;p&gt;Out of scope (v1):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  End-to-end encryption.&lt;/li&gt;
&lt;li&gt;  Message export by patients.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;With this aligned definition, we could make decisions without guessing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tools and Habits That Keep Teams Aligned
&lt;/h2&gt;

&lt;p&gt;We didn’t rely on “being careful.” We changed how we communicate.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Vocabulary Glossary&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We created a living glossary for high-risk words: security, retention, consent, audit, incident, E2EE.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Each term had a one-line definition and acceptance test (how we verify it’s done).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We pinned this in our docs and Slack channel.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Architecture Decision Records (ADRs)&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We wrote short ADRs for key choices:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  “No E2EE in v1; enforce encryption in transit/at rest, with audited content access. Rationale: supportability, time-to-launch, legal needs. Revisit in v2.”&lt;/li&gt;
&lt;li&gt;  “Logs exclude message bodies. Rationale: minimize PHI exposure; add correlation IDs instead.”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;ADRs made decisions visible and durable, so we didn’t re-argue them weekly.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Two Diagrams, Max&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Context diagram: who can access what data paths (patient, clinician, support; services; storage).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sequence diagram: “send message” and “read message,” with security controls marked at each step (authentication, authorization, encryption, logging).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;We annotated diagrams with the glossary terms, e.g., “no bodies in logs.”&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Regular Check-ins with Purpose&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Weekly cross-functional “quality attributes” check-in (security, privacy, performance, reliability).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Agenda format:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What changed?&lt;/li&gt;
&lt;li&gt;  Risks detected?&lt;/li&gt;
&lt;li&gt;  Decisions needed?&lt;/li&gt;
&lt;li&gt;  Actions and owners.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;30 minutes, timeboxed. The goal: detect drift early.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;User-Facing Copy as an Artifact&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;We reviewed the exact text users would see: what “secure” means, what we store, how long we keep it, and how consent works.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;This made legal, product, and design align on the same facts and tone.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt; &lt;strong&gt;Logging and Access Drills&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;We ran small drills:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Verify logs don’t contain message bodies.&lt;/li&gt;
&lt;li&gt;  Try to access content as a support user—ensure it’s blocked or requires explicit approval.&lt;/li&gt;
&lt;li&gt;  Review audit logs to confirm “who read what, when, and why” is traceable.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Drills convert policy into confidence.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  The Turnaround: From Confusion to Clarity
&lt;/h2&gt;

&lt;p&gt;Once we aligned:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Engineering added a redaction layer to the logger and updated access policies.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Design adjusted the badge to link to a “How your data is protected” page.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Legal approved the consent flow and retention copy.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Security set alerts for unusual access and added a data retention job with reports.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Product updated the timeline with a small buffer to complete the drills.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We shipped on time—with fewer post-launch surprises—because we shared the same map.&lt;/p&gt;

&lt;h2&gt;
  
  
  Practical Templates You Can Reuse
&lt;/h2&gt;

&lt;p&gt;Use these verbatim or adapt to your context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Definition Template (per feature)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Data protection: [in transit], [at rest], [redaction].&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access control: [who can read], [who can’t], [approval path].&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Privacy/retention: [duration], [user rights], [deletion SLA].&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Auditability: [events logged], [alert thresholds], [review cadence].&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;UX: [copy], [consent], [policy links].&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Out of scope (this release): [items].&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Architecture Decision Record (ADR)&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Title:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Context:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decision:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Rationale:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Alternatives considered:&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consequences (positive/negative):&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Review date:&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Meeting Cadence&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Weekly quality-attributes sync (30 min).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agenda: changes, risks, decisions, actions.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Owner: architect or tech lead; recorder rotates.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Two-Diagram Rule&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Context diagram with data boundaries and actors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Sequence diagram for 1–2 critical flows with controls marked.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Keep both updated; remove obsolete diagrams.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Glossary Entry&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Term: Security (Messaging v1)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Definition: [one sentence]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Acceptance test: [how we verify it’s true]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Owner: [role]&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Next review: [date]&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Communication Patterns That Scale
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Say the quiet parts out loud&lt;/strong&gt;: If a term has multiple meanings, pause and define it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prefer artifacts over memory&lt;/strong&gt;: If it matters, write it down where everyone can see it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Make decisions easy to find&lt;/strong&gt;: ADRs prevent decision amnesia.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Show, don’t only tell&lt;/strong&gt;: Diagrams reveal gaps words hide.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Close loops fast&lt;/strong&gt;: Short, regular check-ins remove surprises.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;Architecture is a team sport. My job is to help the team speak a shared language so we solve the same problem in the same way. Words like “security,” “performance,” or “MVP” are not self-explanatory. When we define them together, document decisions, and keep a steady rhythm of check-ins, we trade confusion for momentum—and ship with confidence.&lt;/p&gt;

&lt;p&gt;In the next article, we will dive deep into a more technical subject that is key to the success of a project, &lt;strong&gt;"Choosing Technologies: The Beauty and the Beast Trap"&lt;/strong&gt;. Selecting the right tool for the job matters. Do you chase the new, shiny technology, or stick to the tried and tested? See you in the next post!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>architect</category>
      <category>software</category>
      <category>career</category>
    </item>
    <item>
      <title>Translating Business Needs into Technical Solutions</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Sun, 17 Aug 2025 15:57:36 +0000</pubDate>
      <link>https://dev.to/igorfragadev/translating-business-needs-into-technical-solutions-3gld</link>
      <guid>https://dev.to/igorfragadev/translating-business-needs-into-technical-solutions-3gld</guid>
      <description>&lt;p&gt;&lt;strong&gt;Software Architecture Unveiled: A Series by Igor Fraga&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Hi everyone, Igor Fraga here. This is the second article of these series to unveil the challenges and the role of what we do as a Software Architect. We are going to understand more about one of the key aspects of this role that is translating business into technical solutions. Here is where we start to draw from ideas, goals into a plan to build a concrete system that accomplishes it's goal.&lt;/p&gt;

&lt;p&gt;Business leaders speak in goals. Developers think in systems and constraints. A software architect stands in the middle, turning goals into a clear, realistic plan the team can build. This work is not about fancy words—it’s about questions, choices, and &lt;strong&gt;shared understanding&lt;/strong&gt;, and keep this word, &lt;strong&gt;UNDERSTANDING&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;This work unfolds over a focused week with questions, experiments, and decisions. Here, I'm bringing how this process looks like, sometimes even more than a week depending on time responses and availability from the parts in my experience with these processes.&lt;/p&gt;

&lt;p&gt;Let's explore this process with the story of the development of a real-time tracking feature:&lt;/p&gt;

&lt;h2&gt;
  
  
  Monday — Framing the Goal
&lt;/h2&gt;

&lt;p&gt;9:00 AM. A product manager, Laura, brings a request:&lt;br&gt;&lt;br&gt;
“We need a new mobile feature: instant order tracking. Customers should see the courier on a map in real time. This will help retention and reduce support calls.”&lt;/p&gt;

&lt;p&gt;This is a goal with a suggested solution. As an architect, the first step is to separate the goal from the implementation.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Business goal: improve retention and reduce support.&lt;/li&gt;
&lt;li&gt;  Hypothesis: real-time tracking will help.&lt;/li&gt;
&lt;li&gt;  Initial solution idea: show courier location on a live map.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I respond with curiosity, not with code:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What metrics will define success? (Retention + fewer support calls)&lt;/li&gt;
&lt;li&gt;  What is the deadline and why? (Marketing campaign next month)&lt;/li&gt;
&lt;li&gt;  Which user segments need this first? (Returning customers? All?)&lt;/li&gt;
&lt;li&gt;  What are the legal or security constraints? (Location data handling)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Defining success early avoids building the wrong thing fast.&lt;/p&gt;

&lt;p&gt;By the end of the day, we agreed on success metrics:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Reduce delivery-status support tickets by 30% in 60 days.&lt;/li&gt;
&lt;li&gt;  Increase repeat purchase rate by 10% among users who use tracking in 90 days.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We aligned on a realistic plan: discovery and design this week; delivery planning next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tuesday — From Wish List to Requirements
&lt;/h2&gt;

&lt;p&gt;We run a discovery session with product, design, support, and engineering leads. I guide the conversation to transform the “wish list” into actionable requirements.&lt;/p&gt;

&lt;p&gt;We write the first version of the requirements as simple statements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Must-have

&lt;ul&gt;
&lt;li&gt;  Show order status updates within 10s of change.&lt;/li&gt;
&lt;li&gt;  Provide a map pin for courier location updated every 15–30s.&lt;/li&gt;
&lt;li&gt;  Work on iOS and Android with the same API.&lt;/li&gt;
&lt;li&gt;  Respect user privacy and allow opt-out of location sharing.&lt;/li&gt;
&lt;li&gt;  Provide helpful fallback when courier location is unavailable.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Nice-to-have

&lt;ul&gt;
&lt;li&gt;  Precise route line on the map.&lt;/li&gt;
&lt;li&gt;  Push notifications for major status changes.&lt;/li&gt;
&lt;li&gt;  ETA predictions.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Out of scope (for now)

&lt;ul&gt;
&lt;li&gt;  Live chat with courier.&lt;/li&gt;
&lt;li&gt;  Historical route playback.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Now we have clarity. Not perfect, but enough to start technical exploration.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Right Questions
&lt;/h3&gt;

&lt;p&gt;Before picking technologies, the architect validates constraints:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Data source: Do we get courier GPS from partners or our own app?&lt;/li&gt;
&lt;li&gt;  Frequency vs. cost: How often do we really need updates?&lt;/li&gt;
&lt;li&gt;  Scale: Peak concurrent tracked orders? Expected QPS (queries per second)?&lt;/li&gt;
&lt;li&gt;  Offline behavior: What happens when the app loses connectivity?&lt;/li&gt;
&lt;li&gt;  Privacy: How long do we store location data? Who can access it?&lt;/li&gt;
&lt;li&gt;  Failure modes: What do users see if couriers’ apps stop sending updates?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions prevent hidden risks from appearing late.&lt;/p&gt;

&lt;p&gt;By the end of Tuesday, we had a refined requirement set and a risk list to guide the architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wednesday — Options and Trade-offs
&lt;/h2&gt;

&lt;p&gt;I sketch three approaches and discuss trade-offs with the team.&lt;/p&gt;

&lt;p&gt;Option A: Pure Pull (Client Polling)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Mobile app fetches tracking data every 15–30s.&lt;/li&gt;
&lt;li&gt;  Pros: Simple, easy to cache, lower server complexity.&lt;/li&gt;
&lt;li&gt;  Cons: Less “instant,” wasted requests when nothing changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Option B: Server Push (WebSockets or SSE)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Persistent connection for pushing updates in near real time.&lt;/li&gt;
&lt;li&gt;  Pros: Responsive, fewer unnecessary requests.&lt;/li&gt;
&lt;li&gt;  Cons: More complex infra, connection management, scaling challenges.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Option C: Hybrid (Push for status changes, Pull for location)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Push major status changes; poll for location at a steady cadence.&lt;/li&gt;
&lt;li&gt;  Pros: Good balance of cost and responsiveness; simpler than full push.&lt;/li&gt;
&lt;li&gt;  Cons: Slightly more moving parts; needs clear client logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Given the deadline and the need for predictable costs, we choose the Hybrid approach for version 1. It gives a “live” feel without building the most complex system first.&lt;/p&gt;

&lt;h2&gt;
  
  
  Thursday — The Concrete Design
&lt;/h2&gt;

&lt;p&gt;We convert the chosen approach into a concrete, testable design.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Mobile App

&lt;ul&gt;
&lt;li&gt;  Poll location every 20s when the tracking screen is open.&lt;/li&gt;
&lt;li&gt;  Receive push notifications for major status changes (picked up, near destination, delivered).&lt;/li&gt;
&lt;li&gt;  Cache last known location for 2 minutes to handle brief drops.&lt;/li&gt;
&lt;li&gt;  Show clear states: “Waiting for courier data,” “Last updated Xs ago.”&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Backend Services

&lt;ul&gt;
&lt;li&gt;  Tracking API: GET /orders/{id}/tracking returns location, status, ETA.&lt;/li&gt;
&lt;li&gt;  Event Service: publishes status-change events to push notification service.&lt;/li&gt;
&lt;li&gt;  Integrations: adapters for courier partners; standardized internal model.&lt;/li&gt;
&lt;li&gt;  Rate limiting and caching to protect core systems.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Data

&lt;ul&gt;
&lt;li&gt;  Store current location and last N updates (e.g., last 15 minutes) for troubleshooting.&lt;/li&gt;
&lt;li&gt;  Anonymize or delete precise location after retention window.&lt;/li&gt;
&lt;li&gt;  Audit logging for access to location data.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Security &amp;amp; Privacy

&lt;ul&gt;
&lt;li&gt;  Auth: only the authenticated buyer (or support with permission) can access tracking.&lt;/li&gt;
&lt;li&gt;  Opt-out and consent flow for sharing location.&lt;/li&gt;
&lt;li&gt;  Clear privacy policy and retention period.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Observability

&lt;ul&gt;
&lt;li&gt;  Metrics: update latency, API p95 latency, error rates, connection failures.&lt;/li&gt;
&lt;li&gt;  Logging: anonymized tracing across adapters.&lt;/li&gt;
&lt;li&gt;  Alerts: spikes in failures from any courier partner.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Fallbacks

&lt;ul&gt;
&lt;li&gt;  If live location is missing, show last known point with timestamp and a helpful message.&lt;/li&gt;
&lt;li&gt;  If partner API is down, degrade gracefully: show status without map and notify support.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Friday — Delivery Plan, Risks, and Alignment
&lt;/h2&gt;

&lt;p&gt;In the morning, along with the development team, we've turned the design into a delivery plan we could trust.&lt;/p&gt;

&lt;p&gt;Milestone 1 (1–2 weeks):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Tracking API with mock data.&lt;/li&gt;
&lt;li&gt;  Mobile UI skeleton with polling and fallback states.&lt;/li&gt;
&lt;li&gt;  Push notification path for status changes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Milestone 2 (2–3 weeks):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Integration with one courier partner.&lt;/li&gt;
&lt;li&gt;  Caching, rate limiting, and basic observability.&lt;/li&gt;
&lt;li&gt;  Privacy and consent flows in the app.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Milestone 3 (2 weeks):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Add a second courier partner and resilience handling.&lt;/li&gt;
&lt;li&gt;  Performance tests at expected peak.&lt;/li&gt;
&lt;li&gt;  Feature flag rollout to 10% of users.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We reviewed the risks and how we mitigate them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Partner instability: contract tests, synthetic monitoring, circuit breakers.&lt;/li&gt;
&lt;li&gt;  Mobile background limits: adaptive polling; clear UX when the app is backgrounded.&lt;/li&gt;
&lt;li&gt;  Cost creep: usage caps, alarms, and tuning the polling cadence based on real usage.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the afternoon, we ran an alignment session. I present a one-page architecture brief and two diagrams:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Context diagram: users, mobile apps, backend, partners, notifications.&lt;/li&gt;
&lt;li&gt;  Sequence diagram: user opens tracking screen → app polls → backend fetches → returns → status change triggers push.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I close with a simple story: “Maria orders dinner on the way home. She opens the app and sees ‘Picked up 3 minutes ago’ and a map pin moving every 20s. If the courier app pauses, Maria sees ‘Waiting for live data—last update 45s ago.’ She still feels informed. Support calls drop. Marketing has a solid feature to promote.”&lt;/p&gt;

&lt;p&gt;The team nods. We have clarity, boundaries, and a path to value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reusable Toolkit: Questions and Templates
&lt;/h2&gt;

&lt;p&gt;Keep these handy for future translation work:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  Business Questions

&lt;ul&gt;
&lt;li&gt;  What specific outcome do we want? How will we measure it?&lt;/li&gt;
&lt;li&gt;  What is the real deadline and why?&lt;/li&gt;
&lt;li&gt;  Which user group gets this first?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Technical Questions

&lt;ul&gt;
&lt;li&gt;  What are the data sources and their reliability?&lt;/li&gt;
&lt;li&gt;  What are the scale and cost targets?&lt;/li&gt;
&lt;li&gt;  What privacy/security requirements apply?&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Definition of Done

&lt;ul&gt;
&lt;li&gt;  Functionality meets must-haves.&lt;/li&gt;
&lt;li&gt;  Observability in place (metrics, logs, alerts).&lt;/li&gt;
&lt;li&gt;  Privacy and security checks complete.&lt;/li&gt;
&lt;li&gt;  Rollout plan with feature flags and fallback.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;  Lightweight Artifacts

&lt;ul&gt;
&lt;li&gt;  One-page architecture brief.&lt;/li&gt;
&lt;li&gt;  Context and sequence diagrams.&lt;/li&gt;
&lt;li&gt;  Risk list with mitigations.&lt;/li&gt;
&lt;li&gt;  Success metrics and tracking plan.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;h2&gt;
  
  
  Final Thought
&lt;/h2&gt;

&lt;p&gt;An architect’s value is not just in knowing frameworks or patterns. It is in making the path from idea to impact clear, safe, and achievable. By asking the right questions, shaping scope, and choosing balanced designs, architects turn big business goals into technical steps that teams can deliver with confidence.&lt;/p&gt;

&lt;p&gt;We have seen a happy path of an architectural process to translate business into technical solutions. Most of the times, there are more back and forward on the definitions than explained here but the overall well established process looks much like this.&lt;/p&gt;

&lt;p&gt;From my personal experience, many times I've been the architect and the development team, specially in startups, and other times, on bigger companies, I've worked with teams dealing with well defined roles as presented in this article, that is the ideal.&lt;/p&gt;

&lt;p&gt;Both of these can happen to you, specially in the AI era where businesses believe that this tool is the holy grail and will solve everything magically (and that is not true at all) but you must need to know how to use it at your favor without any doubt of it.&lt;/p&gt;

&lt;p&gt;Being a Software or a Solutions Architect is also to make business understand and participate of this process as much as possible, speaking on their own language.&lt;/p&gt;

&lt;p&gt;That's why my next article is about "&lt;strong&gt;The Communication Challenge: Speaking Multiple Languages&lt;/strong&gt;" and how you communicate with the Project Manager, the CEO, CTO and the development team is completely different and that is KEY to your success as a Software Architect.&lt;/p&gt;

&lt;p&gt;See you on the next article!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>architect</category>
      <category>software</category>
      <category>career</category>
    </item>
    <item>
      <title>What Does a Software Architect Actually Do?</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Fri, 15 Aug 2025 12:33:41 +0000</pubDate>
      <link>https://dev.to/igorfragadev/what-does-a-software-architect-actually-do-4dnf</link>
      <guid>https://dev.to/igorfragadev/what-does-a-software-architect-actually-do-4dnf</guid>
      <description>&lt;h2&gt;
  
  
  &lt;strong&gt;Software Architecture Unveiled: A Series by Igor Fraga&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Welcome to a series of articles meant to shine a light on the everyday life of a software architect. My goal is to bridge the gap between complex architectural topics and practical, real-world examples. Each article focuses on a key aspect of the role, told with stories and lessons that are immediately useful.&lt;/p&gt;

&lt;p&gt;If you noticed, I've rebranded the blog to bring you much more content about the architect role that is part of the everyday live of a software architect, along with the technical content and career that I usually share.&lt;/p&gt;

&lt;p&gt;So, let's get started with our very first article:&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Does a Software Architect Actually Do?&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;If you ask someone on a software team, “What does a software architect do?” you might get a confused answer. Some might say, “They’re the most senior developer.” Others may say, “They decide how our systems are built.” There’s truth in both, but the real role goes deeper.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guiding the Technical Ship
&lt;/h2&gt;

&lt;p&gt;Let’s imagine a story.&lt;/p&gt;

&lt;p&gt;A group of friends wants to start an &lt;strong&gt;e-commerce company&lt;/strong&gt;. They have a great idea: a platform where small local sellers can easily open online shops. The budget is tight, and the timeline is even tighter. The team hires developers, designers, and someone with the title “Software Architect.” Let’s call her Ana.&lt;/p&gt;

&lt;p&gt;Most people on the team write code every day. Ana does too, but she spends a lot of her time doing something different—she listens.&lt;/p&gt;

&lt;p&gt;She listens to the business founders talk about goals:&lt;br&gt;&lt;br&gt;
“We must launch before Christmas!”&lt;br&gt;&lt;br&gt;
“We expect 10,000 users in the first month!”&lt;br&gt;&lt;br&gt;
“We absolutely can’t lose any customer data!”&lt;/p&gt;

&lt;p&gt;Then, she talks with the developers:&lt;br&gt;&lt;br&gt;
“What framework will let us move quickly?”&lt;br&gt;&lt;br&gt;
“How do we keep the platform secure?”&lt;br&gt;&lt;br&gt;
“What will happen if traffic doubles?”&lt;/p&gt;

&lt;h2&gt;
  
  
  Drawing the First Map
&lt;/h2&gt;

&lt;p&gt;Ana’s most important work happens before the first line of code is written. She creates a &lt;strong&gt;map&lt;/strong&gt; for the project—just like a captain charts the course before the ship sails.&lt;/p&gt;

&lt;p&gt;This map is called the &lt;strong&gt;architecture&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  What pieces need to be built? (Shopping cart, user accounts, payment processing…)&lt;/li&gt;
&lt;li&gt;  How will these pieces talk to each other?&lt;/li&gt;
&lt;li&gt;  Where is data stored?&lt;/li&gt;
&lt;li&gt;  How will they grow if thousands of users join overnight?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ana chooses the structures and technologies that make sense for the team’s skills and the company’s goals. Maybe she recommends using a cloud provider, so the website can handle big traffic spikes. Perhaps she picks a simple, secure payment system because speed and safety are crucial.&lt;/p&gt;

&lt;h2&gt;
  
  
  Making Hard Choices
&lt;/h2&gt;

&lt;p&gt;Sometimes, the business wants everything perfect and fast—but that’s impossible. Ana explains that to add new features later, the foundation must be solid now. She draws a line between “must-have” and “nice-to-have,” making sure the team is focused.&lt;/p&gt;

&lt;p&gt;Once, in this e-commerce story, a founder says:&lt;br&gt;&lt;br&gt;
“I want video reviews from buyers, right from launch!”&lt;br&gt;&lt;br&gt;
Ana explains: “That would need lots of servers for video storage. Let’s start with text and photo reviews, and add video later when we’re ready.”&lt;br&gt;&lt;br&gt;
By saying “&lt;strong&gt;no&lt;/strong&gt;” to some requests, Ana keeps the project realistic and on schedule.&lt;/p&gt;

&lt;h2&gt;
  
  
  Communication: The Secret Ingredient
&lt;/h2&gt;

&lt;p&gt;Good architects are also &lt;strong&gt;translators&lt;/strong&gt;. Ana writes clear documents and draws simple diagrams. Developers understand where their code fits in the bigger picture, testers know what to check, and business leaders see how their goals are being built in, and the way you talk to each of these groups, from business to developers, is completely different.&lt;/p&gt;

&lt;p&gt;For example, when Ana shares a big diagram showing all the parts—and which are most important for launch—everyone feels calmer. The road ahead is clearer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Responsible for the Big Picture
&lt;/h2&gt;

&lt;p&gt;When the website finally launches, and people start shopping, Ana is still there. If bugs appear or traffic surges, she works with the team to fix things—always thinking about how today’s solution will impact tomorrow.&lt;/p&gt;

&lt;p&gt;She teaches the team to ask, “How will this change affect everything else?” She helps make the system strong, secure, and able to grow.&lt;/p&gt;




&lt;h2&gt;
  
  
  In Summary
&lt;/h2&gt;

&lt;p&gt;A software architect is more than a senior developer.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  They are map-makers, guiding teams safely through unknown waters.&lt;/li&gt;
&lt;li&gt;  They listen, translate, and make hard choices.&lt;/li&gt;
&lt;li&gt;  They focus on the big picture, so every part works together smoothly.
And while you may not always see them writing code, you always feel their impact—through systems that are strong, clear, and ready for the future.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;In my next article, we’ll see how architects help business and tech teams speak the same language, and why that matters so much.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;See you in the next post!&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>architect</category>
      <category>software</category>
      <category>career</category>
    </item>
    <item>
      <title>Finding Your Own Voice in the Tech Community</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Wed, 02 Apr 2025 19:26:34 +0000</pubDate>
      <link>https://dev.to/igorfragadev/finding-your-own-voice-in-the-tech-community-2e2a</link>
      <guid>https://dev.to/igorfragadev/finding-your-own-voice-in-the-tech-community-2e2a</guid>
      <description>&lt;p&gt;Hello everyone, Igor Fraga here resuming the posting series after an amazing "The Developers Conference" that happened some days ago! We will talk about that in a separated post, showing you some pictures and sharing my experience of being a speaker at that event, and today's post is related to this subject, about &lt;strong&gt;Finding Your Own Voice in the Tech Community&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Today, we will continue with the series of posts from &lt;strong&gt;Interviewing Java Champions&lt;/strong&gt;, from the interview with &lt;strong&gt;Elder Moraes&lt;/strong&gt;, writer, mentor and Java Champion. This is the seventh post from this series.&lt;/p&gt;

&lt;p&gt;During our episode of &lt;strong&gt;The Out of the Box Developer podcast&lt;/strong&gt;, in our conversation, we have explored the idea of finding your own voice as a developer in the tech community. In a world full of content and opinions, it's important to stand out and share your unique perspective.&lt;/p&gt;

&lt;p&gt;Elder shared his thoughts with us on how to develop a distinctive voice. He explained, &lt;strong&gt;"your voice is what makes you unique. It's about sharing your authentic perspective, your experiences, and your way of seeing the tech world."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I believe that finding your voice is essential for building a &lt;strong&gt;strong personal brand&lt;/strong&gt;. As I discussed with Elder, &lt;strong&gt;"when you have your own voice, people connect with you on a deeper level. They are not just hearing information; they are hearing &lt;em&gt;you&lt;/em&gt;. This is what makes you stand out from the others or from AI generated content"&lt;/strong&gt; - I added*&lt;em&gt;.&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;Here are some ways we discussed to find and develop your own voice in tech:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Be Authentic:&lt;/strong&gt; Share your genuine thoughts and experiences. Don't try to be someone you're not.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Focus on Your Strengths and Interests:&lt;/strong&gt; Talk about topics you are passionate about and knowledgeable in. Your enthusiasm will shine through.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Share Your Personal Experiences:&lt;/strong&gt; Your unique journey and experiences are valuable. Share your successes, failures, and lessons learned.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Develop Your Own Style:&lt;/strong&gt; Experiment with different writing styles, presentation styles, or video formats to find what feels natural and effective for you.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Engage in Conversations:&lt;/strong&gt; Participate in discussions, share your opinions, and respond to others in the community. This helps you refine your voice and connect with others.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Elder encouraged us, &lt;strong&gt;"don't be afraid to be yourself and share your unique perspective. Your voice matters, and there's an audience out there who wants to hear what you have to say."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Embrace your individuality and let your authentic voice be heard in the tech community.&lt;/p&gt;

&lt;p&gt;Sadly, we are reaching closer to the end of this amazing series. In the next and last post from this series from the interview with Elder, we will talk about &lt;strong&gt;“Finding Your Audience as a Tech Content Creator"&lt;/strong&gt;, and the hints that Elder brought to us on this subject. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://igorfragadev.com/level-up-your-dev-career-with-a-java-champion/" rel="noopener noreferrer"&gt;If you didn’t watched the whole interview, you can do it clicking here.&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;&lt;a href="https://igorfragadev.com/newsletter/" rel="noopener noreferrer"&gt;If you like this content, don’t forget to subscribe to my mail list to receive it first-hand by clicking here&lt;/a&gt; &lt;/p&gt;

&lt;p&gt;See you in the next post!&lt;/p&gt;

</description>
      <category>community</category>
      <category>career</category>
      <category>techtalks</category>
      <category>writing</category>
    </item>
    <item>
      <title>Simplifying Multi-line Strings with Text Blocks in Java</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Fri, 21 Mar 2025 18:38:05 +0000</pubDate>
      <link>https://dev.to/igorfragadev/simplifying-multi-line-strings-with-text-blocks-in-java-159a</link>
      <guid>https://dev.to/igorfragadev/simplifying-multi-line-strings-with-text-blocks-in-java-159a</guid>
      <description>&lt;p&gt;Hello, Java developers! I'm Igor Fraga, and I'm back after a short pause of some days that I've been busy with the book I'm writing (I will bring it here very soon)&lt;/p&gt;

&lt;p&gt;This is the third post from a series called &lt;strong&gt;“The upgraded Java Developer”&lt;/strong&gt; about the latest Java programming language enhancements to be up to date and use these features in your daily work. We will look into some enhancements Java had during these last years regarding String handling before jumping into more advanced stuff.&lt;/p&gt;

&lt;p&gt;Today we're exploring &lt;strong&gt;Text Blocks&lt;/strong&gt;, a feature that has revolutionized how we handle multi-line strings in Java. Introduced as a preview feature in Java 13 and standardized in Java 15, Text Blocks are now a robust part of Java 21, offering a cleaner and more intuitive way to work with complex string literals.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Text Blocks?
&lt;/h2&gt;

&lt;p&gt;Text Blocks are a new way to represent multi-line string literals in Java. They allow you to write strings spanning multiple lines without the need for most escape sequences or explicit line breaks.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Text Blocks Work
&lt;/h2&gt;

&lt;p&gt;Here's an example of how to use a Text Block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;    String json = """
        {
            "name": "John Doe",
            "age": 30,
            "city": "New York",
            "hobbies": [
                "reading",
                "swimming",
                "hiking"
            ]
        }
        """;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the Text Block is denoted by triple quotes (&lt;code&gt;"""&lt;/code&gt;) and preserves the formatting of the JSON structure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why are Text Blocks Better?
&lt;/h2&gt;

&lt;p&gt;Compared to traditional string concatenation, Text Blocks offer several advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Improved Readability&lt;/strong&gt;: They eliminate the need for escape characters and string concatenation operators.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Preserved Formatting&lt;/strong&gt;: The structure of the text is visually represented in the code.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reduced Errors&lt;/strong&gt;: Fewer escape sequences mean fewer opportunities for syntax errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Better Maintainability&lt;/strong&gt;: Updating multi-line strings becomes much easier.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Use Text Blocks for multi-line strings like SQL queries, JSON, HTML, or any formatted text.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Be mindful of indentation, as it affects the resulting string.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;code&gt;\&lt;/code&gt; character at the end of a line to suppress the following new line if needed.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Text Blocks, fully supported in Java 21, represent a significant improvement in how we handle multi-line strings in Java. They make our code cleaner, more readable, and easier to maintain, especially when dealing with structured text formats like JSON, SQL, or HTML.&lt;/p&gt;

&lt;p&gt;In our next article, we'll explore &lt;strong&gt;String Templates&lt;/strong&gt;, that is the evolution of Text Blocks that has been introduced in Java 21 and how it has evolved from String concatenation, to Text Blocks and finally into String Templates. See you then!&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>beginners</category>
    </item>
    <item>
      <title>How to (NOT) be a boring Tech speaker</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Fri, 14 Mar 2025 21:35:43 +0000</pubDate>
      <link>https://dev.to/igorfragadev/how-to-not-be-a-boring-tech-speaker-15nh</link>
      <guid>https://dev.to/igorfragadev/how-to-not-be-a-boring-tech-speaker-15nh</guid>
      <description>&lt;p&gt;Hello everyone, Igor Fraga here for another exciting post! Today, we will continue with the series of posts from &lt;strong&gt;Interviewing Java Champions&lt;/strong&gt;, from the interview with &lt;strong&gt;Elder Moraes&lt;/strong&gt;, writer, mentor and as I've mentioned, Java Champion. This is the sixth post from this series.&lt;/p&gt;

&lt;p&gt;I am tired of seeing boring presentations that almost make me sleep, so &lt;strong&gt;this is a great advice to not fall on the trap that "my content is awesome and that's what matter the most". NO, IT'S NOT, if you are boring as hell, nobody cares how much awesome can be your content.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's why we will discuss about how to create an awesome tech presentation that is engaging and transforming at the same time.&lt;/p&gt;

&lt;p&gt;In our conversation on &lt;strong&gt;The Out of the Box Developer podcast&lt;/strong&gt;, we have talked about giving presentations in the tech world. For many developers, presenting can be nerve-wracking, but it's a valuable skill for career growth and knowledge sharing.&lt;/p&gt;

&lt;p&gt;Elder shared some great advice with us on how to create presentations that really connect with a tech audience. He mentioned, "&lt;strong&gt;when you're presenting to developers, remember they want to learn something practical and useful. Focus on clear explanations and real-world examples.&lt;/strong&gt;"&lt;/p&gt;

&lt;p&gt;I agree that &lt;strong&gt;understanding your audience is key&lt;/strong&gt;. As I discussed with Elder, &lt;strong&gt;"tech audiences appreciate presentations that are well-organized, get to the point, and offer actionable insights they can use in their own work."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are some tips we discussed for creating effective tech presentations:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Know Your Audience:&lt;/strong&gt; Think about who you are presenting to. What are their skill levels and interests? Tailor your content to their needs.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Focus on Practical Value:&lt;/strong&gt; Developers want to learn things they can actually use. Emphasize practical takeaways and real-world applications of your topic.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Keep it Clear and Concise:&lt;/strong&gt; Avoid jargon and overly complex language. Use clear and simple explanations.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Use Visuals Effectively:&lt;/strong&gt; Diagrams, code examples, and demos can make your presentation more engaging and easier to understand. Don't just rely on slides full of text.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Practice, Practice, Practice:&lt;/strong&gt; Rehearsing your presentation helps you feel more confident and ensures a smooth delivery.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Elder emphasized: &lt;strong&gt;"don't try to impress people with fancy slides or complex theories. Focus on delivering valuable information in a clear and engaging way."&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%2F8s7v83z29qi8i50mwrv9.jpg" 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%2F8s7v83z29qi8i50mwrv9.jpg" alt="Google I/O Conference" width="800" height="535"&gt;&lt;/a&gt; Google I/O Conference&lt;/p&gt;

&lt;p&gt;We also discussed &lt;strong&gt;how to keep your audience interested and engaged during tech talks&lt;/strong&gt;. It's not enough to just have good content; you also need to connect with your audience.&lt;/p&gt;

&lt;p&gt;He said, "&lt;strong&gt;engagement is about making your audience feel like they are part of the conversation. Ask questions, encourage interaction, and make it a two-way street."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I believe that audience engagement is crucial for a successful presentation. As I mentioned to Elder, &lt;strong&gt;"a presentation shouldn't be just you talking &lt;em&gt;at&lt;/em&gt; people. It should be a conversation &lt;em&gt;with&lt;/em&gt; people, even in a large setting."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here are some techniques we discussed for engaging your audience during tech talks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Ask Questions:&lt;/strong&gt; Start with questions to gauge the audience's knowledge and interest. Ask questions throughout your presentation to keep them thinking and involved.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Use Polls and Interactive Tools:&lt;/strong&gt; Tools like polls and quizzes can make your presentation more interactive and fun.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Tell Stories and Use Real-Life Examples:&lt;/strong&gt; Stories and examples make your topic more relatable and memorable.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Encourage Q&amp;amp;A:&lt;/strong&gt; Make sure to leave plenty of time for questions and answers. This is a great way to address audience concerns and deepen understanding.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Move Around and Use Body Language:&lt;/strong&gt; Don't just stand behind the podium. Move around the stage and use gestures to keep the audience engaged visually.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Elder advised us, &lt;strong&gt;"don't be afraid to step outside of your slides and interact with the audience. A little bit of interaction can make a big difference in keeping people engaged."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;And I totally agree, this is something that I tend to do &lt;strong&gt;a lot&lt;/strong&gt;, to &lt;strong&gt;look a people eyes, see their reaction and look to establish this connections that goes much beyond just information transfer. And don't ever get nervous with that, use that information to know how much more you will interact with your audience to get then engaged.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;By using these engagement techniques, you can create a more dynamic and impactful presentation experience.&lt;/p&gt;

&lt;p&gt;Last time I told you guys that this was the last post of this series. Well, I lied, we had sooooo much awesome subjects in this interview that I will continue with some more posts and bringing the highlights of this interview here. And our next subject will be &lt;strong&gt;"Finding Your Own Voice in the Tech Community"&lt;/strong&gt; with the insights I had and the tips from Elder on this subject.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://igorfragadev.com/level-up-your-dev-career-with-a-java-champion/" rel="noopener noreferrer"&gt;If you didn't watched the whole interview, you can do it clicking here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://igorfragadev.com/newsletter/" rel="noopener noreferrer"&gt;If you like this content, don't forget to subscribe to my mail list to receive it first-hand by clicking here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See you in the next post!&lt;/p&gt;

</description>
      <category>career</category>
      <category>speaking</category>
      <category>techtalks</category>
      <category>conferences</category>
    </item>
    <item>
      <title>The all-new Switch Case with steroids in Java 21</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Tue, 11 Mar 2025 16:09:04 +0000</pubDate>
      <link>https://dev.to/igorfragadev/the-all-new-switch-case-with-steroids-in-java-21-2e76</link>
      <guid>https://dev.to/igorfragadev/the-all-new-switch-case-with-steroids-in-java-21-2e76</guid>
      <description>&lt;p&gt;Hello, Java developers! I'm Igor Fraga, and this is the second post from a series called &lt;strong&gt;“The upgraded Java Developer”&lt;/strong&gt; about the latest Java programming language enhancements to be up to date and use these features in your daily work.&lt;/p&gt;

&lt;p&gt;Today we're &lt;strong&gt;diving into two powerful features&lt;/strong&gt; that have revolutionized how we handle conditional logic in Java: &lt;strong&gt;Switch Expressions and Pattern Matching for Switch&lt;/strong&gt;. Both features have evolved significantly since their introduction and are now fully supported in Java 21.&lt;/p&gt;

&lt;p&gt;Wow, you will have it all in a single post, isn't that great?&lt;/p&gt;

&lt;p&gt;Sure it is, you will find everything you need to know here, so let's get started!&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Switch Expressions?
&lt;/h2&gt;

&lt;p&gt;Switch Expressions allow the switch construct to be used as either a statement or an expression. They introduce a new, more compact syntax and eliminate common pitfalls associated with the traditional switch statement.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before Switch Expressions
&lt;/h2&gt;

&lt;p&gt;Before Java 12, achieving similar functionality required more verbose code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Traditional switch statement
String day = "MONDAY";
String typeOfDay;
switch (day) {
    case "MONDAY":
    case "TUESDAY":
    case "WEDNESDAY":
    case "THURSDAY":
    case "FRIDAY":
        typeOfDay = "Weekday";
        break;
    case "SATURDAY":
    case "SUNDAY":
        typeOfDay = "Weekend";
        break;
    default:
        typeOfDay = "Invalid day";
        break;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  How Switch Expressions Work
&lt;/h2&gt;

&lt;p&gt;Here's an example of how to use Switch Expressions:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String day = "MONDAY";
String typeOfDay = switch (day) {
    case "MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY" -&amp;gt; "Weekday";
    case "SATURDAY", "SUNDAY" -&amp;gt; "Weekend";
    default -&amp;gt; "Invalid day";
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the new &lt;code&gt;-&amp;gt;&lt;/code&gt; syntax to directly yield a value for each case. The switch construct is now an expression that returns a value.&lt;/p&gt;

&lt;p&gt;As you can see, Switch Expressions offer a more concise and readable syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the Yield Keyword
&lt;/h2&gt;

&lt;p&gt;For more complex cases where you need to execute multiple statements, you can use the &lt;code&gt;yield&lt;/code&gt; keyword:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;String result = switch (day) {
    case "MONDAY" -&amp;gt; {
        System.out.println("It's Monday!");
        yield "Weekday";
    }
    case "SATURDAY", "SUNDAY" -&amp;gt; "Weekend";
    default -&amp;gt; {
        System.out.println("Invalid day provided.");
        yield "Invalid day";
    }
};
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, the &lt;code&gt;yield&lt;/code&gt; keyword is used to return a value from a block of code within a case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why are Switch Expressions Better?
&lt;/h2&gt;

&lt;p&gt;Compared to traditional switch statements, Switch Expressions offer several advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conciseness&lt;/strong&gt;: They allow multiple cases to be handled in a single line.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Safety&lt;/strong&gt;: They enforce exhaustive handling of all cases, reducing bugs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Expressiveness&lt;/strong&gt;: They can be used in contexts where an expression is expected.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No Fall-through&lt;/strong&gt;: Each case is self-contained, eliminating accidental fall-through errors.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Evolution from Java 12 to Java 21
&lt;/h2&gt;

&lt;p&gt;Switch Expressions were first introduced as a preview feature in Java 12. In Java 14, they became a standard feature. Java 21 fully supports them and introduces additional pattern matching capabilities (which we are going to cover in the next lines).&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Use Switch Expressions when you need to assign the result of a switch to a variable.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prefer the &lt;code&gt;-&amp;gt;&lt;/code&gt; syntax for simple, single-line cases.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;code&gt;yield&lt;/code&gt; keyword for more complex cases that require multiple statements.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Next, we're exploring Pattern Matching for Switch, a powerful feature that has evolved since its preview in Java 17 and is now a standard feature in Java 21. If you're used to Java 8, this enhancement will significantly change how you handle complex conditional logic in your code.&lt;/p&gt;

&lt;h2&gt;
  
  
  Revolutionizing Conditional Logic with Pattern Matching for Switch
&lt;/h2&gt;

&lt;p&gt;Pattern Matching for Switch extends the capabilities of the switch statement and expression by allowing patterns in case labels. This feature enables more expressive and concise code when dealing with complex data structures and type-based comparisons.&lt;/p&gt;

&lt;p&gt;Pattern Matching for Switch allows you to check not just simple values, but also types of objects and their contents. It's like a smarter, more powerful switch statement.&lt;/p&gt;

&lt;p&gt;Here's an example of how to use Pattern Matching for Switch:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String describeShape(Shape shape) {
    return switch (shape) {
        case Circle c -&amp;gt; "Circle with radius " + c.radius;
        case Rectangle r -&amp;gt; "Rectangle " + r.width + " x " + r.height;
        case Triangle t -&amp;gt; "Triangle with base " + t.base + " and height " + t.height;
        case null -&amp;gt; "No shape";
        default -&amp;gt; "Unknown shape";
    };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use type patterns to match against different subclasses of Shape, extracting their properties directly in the case label.&lt;/p&gt;

&lt;p&gt;Pattern Matching for Switch also supports the &lt;code&gt;when&lt;/code&gt; clause for additional conditional refinements within a case. Here's an example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static String describeRectangle(Rectangle rectangle) {
    return switch (rectangle) {
        case Rectangle r when r.width == r.height -&amp;gt; "Square with side " + r.width;
        case Rectangle r -&amp;gt; "Rectangle " + r.width + " x " + r.height;
        case null -&amp;gt; "No rectangle";
        default -&amp;gt; "Unknown shape";
    };
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this example, we use the &lt;code&gt;when&lt;/code&gt; clause to check if the rectangle is a square (i.e., its width equals its height). This allows us to provide more specific handling for certain conditions.&lt;/p&gt;

&lt;p&gt;Before Java 17, achieving similar functionality required more verbose code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Traditional if-else chain
static String describeShape(Shape shape) {
    if (shape instanceof Circle) {
        Circle c = (Circle) shape;
        return "Circle with radius " + c.radius;
    } else if (shape instanceof Rectangle) {
        Rectangle r = (Rectangle) shape;
        return "Rectangle " + r.width + " x " + r.height;
    } else if (shape instanceof Triangle) {
        Triangle t = (Triangle) shape;
        return "Triangle with base " + t.base + " and height " + t.height;
    } else if (shape == null) {
        return "No shape";
    } else {
        return "Unknown shape";
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, Pattern Matching for Switch offers a more concise and readable syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why is Pattern Matching for Switch Better?
&lt;/h2&gt;

&lt;p&gt;Pattern Matching for Switch offers several advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Conciseness&lt;/strong&gt;: It reduces boilerplate code, eliminating the need for explicit type checks and casts, so no need to add tons of &lt;code&gt;instanceof&lt;/code&gt; and casts anymore to validate the types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Type Safety&lt;/strong&gt;: The compiler ensures exhaustive matching, reducing the risk of runtime errors.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Readability&lt;/strong&gt;: Complex conditional logic becomes more straightforward and easier to understand.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;: It allows matching against types, constants, and even null values in a unified syntax.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Evolution from Java 17 to Java 21
&lt;/h2&gt;

&lt;p&gt;Pattern Matching for Switch has evolved through several preview versions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Introduced as a preview in Java 17 (JEP 406)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refined in Java 18 (JEP 420) and Java 19 (JEP 427)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Further enhanced in Java 20 (JEP 433)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Finally standardized in Java 21 (JEP 441)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each iteration brought improvements based on community feedback, resulting in a more robust and versatile feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Best Practices
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Use Pattern Matching for Switch when dealing with complex type hierarchies or data structures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Leverage the null case for explicit null handling.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Combine with record patterns for even more powerful data extraction.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use the &lt;code&gt;when&lt;/code&gt; clause for additional conditional refinements within a case.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Switch Expressions and Pattern Matching for Switch in Java 21 represent a significant leap forward in Java's ability to handle complex conditional logic. They make our code more expressive, safer, and easier to maintain, especially when working with polymorphic types or intricate data structures.&lt;/p&gt;

&lt;p&gt;In our next article from this series, we'll explore &lt;strong&gt;Text Blocks&lt;/strong&gt;, another feature that has greatly improved string handling in Java. Stay tuned to learn how this feature can make working with multi-line strings a breeze!&lt;/p&gt;

</description>
      <category>java</category>
      <category>programming</category>
      <category>tutorial</category>
      <category>java21</category>
    </item>
    <item>
      <title>The right language to share Tech Content</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Mon, 10 Mar 2025 15:27:36 +0000</pubDate>
      <link>https://dev.to/igorfragadev/the-right-language-to-share-tech-content-3l12</link>
      <guid>https://dev.to/igorfragadev/the-right-language-to-share-tech-content-3l12</guid>
      <description>&lt;p&gt;On The Out of the Box Developer podcast, we talked about something important for people who create tech content like me: &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What language should you use to reach the most people?&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;I asked Java Champion Elder Moraes if only using English might stop some people from seeing my content, especially developers who don't speak English as their first language.&lt;/p&gt;

&lt;p&gt;This is the fifth post from a series bringing you insights from the interview with Elder Moraes, Java Champion, Red Hat Advocate, Mentor and Writer. &lt;/p&gt;

&lt;p&gt;Elder shared some helpful ideas with us about this. &lt;br&gt;
He said, &lt;strong&gt;"English is like the main language of the tech world now. If you publish in English, you can reach a very big audience all over the world."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;We know that some people might not be able to understand English easily, but he also talked about what is realistic when you are creating content. &lt;/p&gt;

&lt;p&gt;During our talk, I asked Elder if only using English could be a problem for developers around the world who could learn from tech content. I wondered if I might be missing out on reaching some people by not using other languages. &lt;/p&gt;

&lt;p&gt;Elder's answer to us was very thoughtful. He explained, &lt;strong&gt;"It would be great to reach everyone in their own language, but it's often hard for one person or a small team to do that. Making content in many languages takes a lot of time and effort."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;He also talked about why using English is helpful, saying, &lt;strong&gt;"because so many people in tech use English, most developers can understand tech content in English, even if it's not their first language. So, using English is a practical way to reach as many people as you can with the resources you have."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;That's why I write my articles and content mainly in English and you can use the resources in &lt;a href="https://igorfragadev.com/" rel="noopener noreferrer"&gt;igorfragadev.com&lt;/a&gt; blog to read my articles in any language if you don't fully understand it. &lt;/p&gt;

&lt;p&gt;However, Elder also gave us some other things to think about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;  &lt;strong&gt;Think about who you want to reach&lt;/strong&gt;: Who are you trying to talk to? If you want to reach people in a specific area who speak a certain language, then using that language might be very good. This is specially true when you are giving in person talks at a non-English country, for example.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Start with English and add more languages later&lt;/strong&gt;: If you want to reach people everywhere, English is a good place to start. When you have more time and help, you can think about translating your best content into other languages.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Use translation tools&lt;/strong&gt;: Tools that translate languages can be useful, even if they are not perfect. You can use them to add subtitles to videos or translate blog posts like you have here at &lt;a href="https://igorfragadev.com/" rel="noopener noreferrer"&gt;igorfragadev.com&lt;/a&gt; blog.&lt;/li&gt;
&lt;li&gt;  &lt;strong&gt;Join groups with people who speak other languages&lt;/strong&gt;: Be active in online groups where developers who speak different languages meet. This can help you connect with more people, even if your main content is in English.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Elder finished by saying to us, &lt;strong&gt;"there's no single right answer for everyone. It depends on what you want to do, what you can do, and who you want to talk to. English helps you reach a lot of people, but it's always good to think about different languages and how to make your content easier for more people to understand."&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;In the end, our talk showed that choosing a language for your tech content is an important decision. English can help you reach a huge audience, but thinking about different languages and finding ways to help people understand your content can help you reach even more developers around the world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://igorfragadev.com/level-up-your-dev-career-with-a-java-champion/" rel="noopener noreferrer"&gt;If you didn't watched the whole interview, you can do it clicking here.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the next and last post from this series from the interview with Elder, we will talk about &lt;strong&gt;"Creating Engaging Tech Talks Presentations&lt;/strong&gt;, in a special post and the hints that Elder brought to us on this subject.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://igorfragadev.com/newsletter/" rel="noopener noreferrer"&gt;If you like this content, don't forget to subscribe to my mail list to receive it first-hand by clicking here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See you in the next post!&lt;/p&gt;

</description>
      <category>sharing</category>
      <category>career</category>
      <category>languages</category>
    </item>
    <item>
      <title>Enhancing Collections with Sequenced Interfaces in Java</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Sat, 08 Mar 2025 14:23:07 +0000</pubDate>
      <link>https://dev.to/igorfragadev/enhancing-collections-with-sequenced-interfaces-in-java-e7e</link>
      <guid>https://dev.to/igorfragadev/enhancing-collections-with-sequenced-interfaces-in-java-e7e</guid>
      <description>&lt;p&gt;Hi and welcome, Igor Fraga here!&lt;/p&gt;

&lt;p&gt;Today I'm starting a series of posts called &lt;strong&gt;"The upgraded Java Developer"&lt;/strong&gt; about the latest Java programming language enhancements for you that are old school Java like me and for you that are learning to program in Java as well, to be up to date and use these features in your daily work.&lt;/p&gt;

&lt;p&gt;Each article from these series will bring new language resources that came to make our lives much easier, enhance performance and evolve the Java language, so Java is not the ugly duck anymore that guys from other languages liked to complain about.&lt;/p&gt;

&lt;p&gt;It has evolved considerably these last years and with this series you will learn in a easy to understand approach and how to apply in practice everything that is presented here. We will be covering the evolution since Java 8, going through the many version changes until the latest LTS version by the time of this writting that is Java 21. So, let's get started!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Today we're exploring Sequenced Collections, an exciting feature introduced in Java 21&lt;/strong&gt;. If you're used to Java 8, this addition will significantly improve how you work with ordered data structures.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are Sequenced Collections?
&lt;/h2&gt;

&lt;p&gt;Sequenced Collections are a set of new interfaces added to the Java Collections Framework. They provide a uniform way to work with collections that have a defined encounter order, such as lists, sorted sets, and linked hash sets.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Sequenced Collections Work
&lt;/h2&gt;

&lt;p&gt;Here's a simple example of how to use a Sequenced Collection:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;SequencedCollection&amp;lt;String&amp;gt; sequenced = new ArrayList&amp;lt;&amp;gt;();
sequenced.addFirst("First");
sequenced.addLast("Last");
sequenced.add("Middle");

System.out.println(sequenced.getFirst()); // Outputs: First
System.out.println(sequenced.getLast());  // Outputs: Last

SequencedCollection&amp;lt;String&amp;gt; reversed = sequenced.reversed();
System.out.println(reversed.getFirst()); // Outputs: Last
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In this example, we use new methods like &lt;code&gt;addFirst()&lt;/code&gt;, &lt;code&gt;addLast()&lt;/code&gt;, &lt;code&gt;getFirst()&lt;/code&gt;, and &lt;code&gt;getLast()&lt;/code&gt; which are now available on collections that implement the &lt;code&gt;SequencedCollection&lt;/code&gt; interface.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why are Sequenced Collections Better?
&lt;/h2&gt;

&lt;p&gt;Sequenced Collections offer several advantages:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Consistency&lt;/strong&gt;: They provide a uniform API for working with ordered collections.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Simplicity&lt;/strong&gt;: Accessing first and last elements is now straightforward across different collection types.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Reversibility&lt;/strong&gt;: The &lt;code&gt;reversed()&lt;/code&gt; method allows easy creation of a reverse view of the collection.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Enhanced Functionality&lt;/strong&gt;: New methods like &lt;code&gt;addFirst()&lt;/code&gt; and &lt;code&gt;addLast()&lt;/code&gt; add flexibility to collection manipulation.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  New Interfaces in Java 21
&lt;/h2&gt;

&lt;p&gt;Java 21 introduces three new interfaces:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;SequencedCollection&lt;/code&gt;: For collections with a defined order.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;SequencedSet&lt;/code&gt;: For sets that maintain insertion order.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;code&gt;SequencedMap&lt;/code&gt;: For maps that maintain a specific entry order.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Sequenced Collections in Java 21 represent a significant improvement in how we work with ordered data structures. They simplify common operations, enhance readability, and provide a more intuitive API for developers working with collections that have a defined order.&lt;/p&gt;

&lt;p&gt;In our next article, we'll explore Pattern Matching for switch, another powerful feature that has evolved Java's syntax. Stay tuned to learn how this feature can simplify your conditional logic!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>java</category>
      <category>tutorial</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The most important programming language in 2025</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Tue, 04 Mar 2025 21:04:35 +0000</pubDate>
      <link>https://dev.to/igorfragadev/the-most-important-programming-language-in-2025-19n3</link>
      <guid>https://dev.to/igorfragadev/the-most-important-programming-language-in-2025-19n3</guid>
      <description>&lt;p&gt;Hi there, Igor Fraga here, so... &lt;/p&gt;

&lt;p&gt;Do you know which is the most important programming language in 2025? &lt;/p&gt;

&lt;p&gt;Java? &lt;/p&gt;

&lt;p&gt;People say that Java is dead for almost 20 years and there are still plenty of people making millions from it. &lt;/p&gt;

&lt;p&gt;But it's not Java... &lt;/p&gt;

&lt;p&gt;So, maybe Python? &lt;/p&gt;

&lt;p&gt;Because of all the AI revolution, this should be the one, right? &lt;/p&gt;

&lt;p&gt;Nah... it's growing significantly in the last years but this is still not the MOST important one that you SHOULD dedicate in 2025. &lt;/p&gt;

&lt;p&gt;So, which one is it, then? &lt;/p&gt;

&lt;p&gt;The answer may surprise you... &lt;/p&gt;

&lt;p&gt;.... &lt;/p&gt;

&lt;p&gt;It is......... &lt;/p&gt;

&lt;p&gt;English! &lt;/p&gt;

&lt;p&gt;What are you talking about? It's not even a programming language? &lt;/p&gt;

&lt;p&gt;Are you sure about it? &lt;/p&gt;

&lt;p&gt;What are you typing when you're writing code? &lt;/p&gt;

&lt;p&gt;I'm pretty sure it's not binary..... 01110011... (the machine does that for you by interpreting what you code) &lt;/p&gt;

&lt;p&gt;If you are a non-native English speaker, &lt;strong&gt;you must&lt;/strong&gt; dedicate to learn more and more on how to communicate better in English &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Both written and spoken.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Because this is the global language, either for reading documentations, forums, learning from tutorials (written or recorded), to deal with foreign customers, doing interviews, presentations or even to communicate during that travel you've ever dreamed about across the world. &lt;/p&gt;

&lt;p&gt;You will find much more content in English online than in any other language &lt;/p&gt;

&lt;p&gt;But your whole career growth also depends on how much you dedicate on this subject. &lt;/p&gt;

&lt;p&gt;No matter how good you are technically, if you don't speak English, you will be limited to a certain region that maybe, will not provide the grow you're seeking for your life and career &lt;/p&gt;

&lt;p&gt;And limit you to content in your own language only &lt;/p&gt;

&lt;p&gt;Because when you are in a interview, or in a stage presenting to people, the translator will not be there for you... &lt;/p&gt;

&lt;p&gt;But you can use it before to learn as much as you can &lt;/p&gt;

&lt;p&gt;So, if you are a tech guy or girl and wanna conquer the World in 2025 &lt;/p&gt;

&lt;p&gt;Learn, breathe, practice and speak English, my friend!&lt;/p&gt;

&lt;p&gt;In the next post, I'll bring some insights regarding to &lt;strong&gt;Sharing Tech Content in English&lt;/strong&gt; that came from the interview with the Java Champion Elder Moraes.&lt;/p&gt;

&lt;p&gt;See you then!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>python</category>
      <category>java</category>
    </item>
    <item>
      <title>Becoming an AI-augmented developer (and why you have to)</title>
      <dc:creator>Igor Fraga</dc:creator>
      <pubDate>Wed, 26 Feb 2025 18:18:42 +0000</pubDate>
      <link>https://dev.to/igorfragadev/becoming-an-ai-augmented-developer-and-why-you-have-to-57h7</link>
      <guid>https://dev.to/igorfragadev/becoming-an-ai-augmented-developer-and-why-you-have-to-57h7</guid>
      <description>&lt;p&gt;Hi everyone, Igor Fraga here! We recently had a really interesting live talk on the &lt;strong&gt;Out of the Box Developer podcast&lt;/strong&gt;. It was called &lt;strong&gt;"How to become an AI-augmented developer"&lt;/strong&gt; and we talked about how AI is changing how we code. We had some great experts who explained how AI is becoming a big part of software development. I want to share the main points we talked about, so you can learn how to use AI to improve your coding!&lt;/p&gt;

&lt;p&gt;Here's what we discussed:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Think Like an AI-Augmented Developer (It's Important!)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We started by talking about what it means to be "AI-augmented." As we said in the live stream, it's important to know this isn't just a short trend. It's not just about being an AI engineer or a regular coder. It's something new and very important. We said that using AI is &lt;strong&gt;key to staying up-to-date&lt;/strong&gt; in tech today. AI isn't going to replace us, but it's like a &lt;strong&gt;helper that makes us better developers&lt;/strong&gt;, making us faster and more skilled.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. AI Tools on Your Computer: Using Local AI&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I was really happy to talk about &lt;strong&gt;local AI tools&lt;/strong&gt;. Luis Real showed us cool tools like &lt;strong&gt;Ollama&lt;/strong&gt;, which lets you use AI models on your own computer, and &lt;strong&gt;CodeGPT&lt;/strong&gt;, which works inside your IntelliJ IDE. We also talked about how well these tools work and what computer parts you need. Like I mentioned, if you want local AI to run well, a good graphics card like the RTX 3090 suggested by Douglas is a good idea.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Cloud or Local AI: Which is Best?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We spent time comparing &lt;strong&gt;cloud AI services&lt;/strong&gt; (like GitHub Copilot and Cursor) with &lt;strong&gt;local AI models&lt;/strong&gt;. We looked at the good and bad of each. We talked about &lt;strong&gt;saving money&lt;/strong&gt;, different uses – like making images that aren't controlled or when company rules limit cloud use – and &lt;strong&gt;following rules and laws&lt;/strong&gt;. We suggested using private AI servers for a whole company, and we discussed if that was possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. AI Makes You Faster and Helps Fix Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Pedro Cavalero explained how AI is becoming more and more involved in coding. He talked about different levels, from not using AI at all to being a full AI engineer. Then, he showed us &lt;strong&gt;GitHub Copilot's "agent mode,"&lt;/strong&gt; which is really amazing. It can do things automatically like write code, test it, and even fix mistakes! We all agreed AI tools are great for &lt;strong&gt;changing code to be better (refactoring)&lt;/strong&gt; and doing boring tasks automatically. This lets us focus on the more important and creative parts of coding.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. AI in Action: Real Examples&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To show how AI works, Pedro did a live demo! He made a &lt;strong&gt;snake game in Python using Pygame, with help from Copilot.&lt;/strong&gt; It was incredible to see AI write code and help solve problems right there and then. We also looked at &lt;strong&gt;testing code&lt;/strong&gt; and how AI can &lt;strong&gt;fix errors&lt;/strong&gt;, showing how AI can improve our coding process. We brought up using AI in &lt;strong&gt;big projects with lots of code&lt;/strong&gt;, which led to a good talk about how to do that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;6. Future Coding: "Vibe Coding" and AI Teams&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Looking to the future, Douglas talked about &lt;strong&gt;"Vibe Coding."&lt;/strong&gt; I think this is where coding is going – imagine just telling AI what to do with your voice or by typing! We also talked about how &lt;strong&gt;AI can help smaller teams, or even single developers, do as much as big teams&lt;/strong&gt;. This is a big change in how teams work and how much they can do. &lt;strong&gt;Like I said in the stream, if you want to be a good developer in the future,&lt;/strong&gt; &lt;strong&gt;you need to use AI.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7. Learn Tools and Keep Learning: Your Next Steps&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The experts gave clear advice: &lt;strong&gt;don't try to learn every AI tool at once.&lt;/strong&gt; Instead, &lt;strong&gt;focus on learning one or two well&lt;/strong&gt; to become good at using AI. We told everyone to try out tools like Cursor and Copilot to see what works best for them. And, like I always say, &lt;strong&gt;learning never stops!&lt;/strong&gt; AI is changing fast, so we need to keep learning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;8. Worries and Doing Things Right: Think About Ethics&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We also talked about some problems. We discussed if new developers might &lt;strong&gt;rely too much on AI&lt;/strong&gt;, and not learn how to find and fix problems themselves. We know that &lt;strong&gt;AI tools aren't always right&lt;/strong&gt; – they can sometimes give wrong answers, so we still need to check their work. And, of course, we talked about important &lt;strong&gt;ethical things&lt;/strong&gt; like following rules, keeping data safe, and using AI in a good way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;9. Tool Suggestions: Cursor, Copilot, and Good AI Models&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We suggested some specific tools. &lt;strong&gt;Cursor&lt;/strong&gt; was mentioned as a really good one, especially for finding code and using tools. We talked a lot about &lt;strong&gt;GitHub Copilot&lt;/strong&gt;, including its agent mode and different model choices. We also mentioned &lt;strong&gt;Claude 3.5 Sonnet models&lt;/strong&gt; as great for coding and working well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;10. Last Words: Start Using AI Now!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To finish, we all agreed on a strong message. &lt;strong&gt;Start using AI tools now!&lt;/strong&gt; Use them to code faster and stay ahead. Like I advised, &lt;strong&gt;start simple&lt;/strong&gt;, try the basic things, and then explore the more advanced AI features. Becoming an AI-augmented developer is a journey, and it means always learning and changing in the tech world.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Main Point:&lt;/strong&gt; Our live stream on Out of the Box Developer gave you a simple guide for becoming an AI-augmented developer. By using these tools, always learning, and carefully adding AI to your work, you can become much more productive and creative in the age of AI.&lt;/p&gt;

&lt;p&gt;If you missed the live stream, or want to watch it again, you can find it here below. Let me know what you think, and which AI tools you are excited to try!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://igorfragadev.com/becoming-an-ai-augmented-developer-and-why-you-have-to/" rel="noopener noreferrer"&gt;https://igorfragadev.com/becoming-an-ai-augmented-developer-and-why-you-have-to/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;See you in the next post!&lt;/p&gt;

</description>
      <category>programming</category>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
