<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: joedev090</title>
    <description>The latest articles on Forem by joedev090 (@joedev090).</description>
    <link>https://forem.com/joedev090</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%2F616785%2Ff39e429a-f2d7-4ffa-b531-ebf5acd43d53.png</url>
      <title>Forem: joedev090</title>
      <link>https://forem.com/joedev090</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/joedev090"/>
    <language>en</language>
    <item>
      <title>📚 AI Skills for Software Developers: Zero to Expert Guide 🤖</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Thu, 26 Feb 2026 01:30:31 +0000</pubDate>
      <link>https://forem.com/joedev090/ai-skills-for-software-developers-zero-to-expert-guide-1m1p</link>
      <guid>https://forem.com/joedev090/ai-skills-for-software-developers-zero-to-expert-guide-1m1p</guid>
      <description>&lt;p&gt;&lt;strong&gt;🌟 Introduction&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;AI is no longer just about "generating text" or "creating images." Today, skills enable AI agents to perform specialized, modular, and collaborative tasks, completely transforming how we develop software. In this guide, we’ll take you from the basics to advanced implementation of skills, using practical examples and real resources. Let’s dive in! 💡&lt;/p&gt;

&lt;p&gt;1️⃣ What Is an AI Skill?&lt;/p&gt;

&lt;p&gt;A skill is an atomic, reusable ability that an AI agent can execute. Think of it as a function in programming, but designed for specific AI tasks.&lt;/p&gt;

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

&lt;ul&gt;
&lt;li&gt;Skill "SummarizeDocument" → Takes a PDF and returns a summary.&lt;/li&gt;
&lt;li&gt;Skill "TranslateCode" → Converts code from Python to JavaScript.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🔍 Why Are Skills Important?&lt;/p&gt;

&lt;p&gt;Modularity: Reuse logic across different projects.&lt;br&gt;
Specialization: Each skill does one thing, but does it very well.&lt;br&gt;
Collaboration: Skills can be combined to solve complex problems.&lt;/p&gt;

&lt;p&gt;2️⃣ Key Concepts to Understand Skills&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;AI Agents&lt;br&gt;
An agent is a program that acts autonomously to perform tasks. It can be as simple as a chatbot or as complex as a DevOps automation system.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Subagents&lt;br&gt;
Subagents are smaller, specialized agents that use one or more skills to perform part of a larger task.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example: A "CodeValidator" subagent might use the "DetectErrors" and "CheckBestPractices" skills.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;MCP (Model Context Protocol)
A protocol that allows multiple agents/subagents to share context and collaborate. It’s like HTTP for communication between AI agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;3️⃣ How Do Skills Work? (Step by Step) 🛠️&lt;/p&gt;

&lt;p&gt;Step 1: &lt;br&gt;
Skill Discovery&lt;/p&gt;

&lt;p&gt;Skills are organized in folders, each containing a SKILL.md file with metadata (name, description, instructions).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/skills/
  ├── SummarizeDocument/
  │   ├── SKILL.md
  │   └── script.py
  └── TranslateCode/
      ├── SKILL.md
      └── script.py

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 2: &lt;br&gt;
Loading Metadata&lt;/p&gt;

&lt;p&gt;At startup, the agent scans skill folders and loads metadata (name, description) from the SKILL.md file.&lt;/p&gt;

&lt;p&gt;Recommended format (frontmatter in SKILL.md):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
name: SummarizeDocument
description: "Summarizes a document in 3 paragraphs."
---

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 3: &lt;br&gt;
Injecting into Agent Context&lt;/p&gt;

&lt;p&gt;Skill metadata is included in the system prompt so the model knows what skills are available.&lt;/p&gt;

&lt;p&gt;Example in XML (for models like Claude)&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;available_skills&amp;gt;
  &amp;lt;skill&amp;gt;
    &amp;lt;name&amp;gt;SummarizeDocument&amp;lt;/name&amp;gt;
    &amp;lt;description&amp;gt;Summarizes a document in 3 paragraphs.&amp;lt;/description&amp;gt;
    &amp;lt;location&amp;gt;/skills/SummarizeDocument/SKILL.md&amp;lt;/location&amp;gt;
  &amp;lt;/skill&amp;gt;
&amp;lt;/available_skills&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Step 4: &lt;br&gt;
Activation and Execution&lt;/p&gt;

&lt;p&gt;When the agent receives a task, it finds the relevant skill and executes the associated script.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
User requests: "Summarize this PDF."&lt;br&gt;
Agent activates the "SummarizeDocument" skill and runs script.py.&lt;/p&gt;

&lt;p&gt;4️⃣ Approaches to Skill Integration&lt;/p&gt;

&lt;p&gt;🖥️ A. Filesystem-Based Agents&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Operate in a Unix/Bash environment.&lt;/li&gt;
&lt;li&gt;Skills are activated via shell commands (e.g., cat /skills/SummarizeDocument/SKILL.md).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Advantage: Direct access to system resources.&lt;/p&gt;

&lt;p&gt;🛠️ B. Tool-Based Agents&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Do not require a filesystem environment.&lt;/li&gt;
&lt;li&gt;Implement custom tools to trigger skills.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Advantage: More flexible and portable.&lt;/p&gt;

&lt;p&gt;5️⃣ Security Considerations 🔒&lt;br&gt;
When executing scripts, it’s critical to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sandboxing: Run scripts in isolated environments.&lt;/li&gt;
&lt;li&gt;Allowlisting: Only allow skills from trusted sources.&lt;/li&gt;
&lt;li&gt;Confirmation: Ask for user permission before running risky operations.&lt;/li&gt;
&lt;li&gt;Logging: Record all executions for auditing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;6️⃣ Practical Implementation&lt;br&gt;
📚 A. Reference Library: skills-ref&lt;br&gt;
The skills-ref library (Python) provides utilities for working with skills: (&lt;a href="https://github.com/agentskills/agentskills/tree/main/skills-ref" rel="noopener noreferrer"&gt;https://github.com/agentskills/agentskills/tree/main/skills-ref&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Validate skill directories.&lt;br&gt;
Generate XML for agent prompts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;from skills_ref import validate_skill, generate_skills_xml

# Validate a skill
validate_skill("/skills/SummarizeDocument")

# Generate XML for the agent prompt
skills_xml = generate_skills_xml("/skills/")
print(skills_xml)

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;📝 B. Example Skill: "SummarizeDocument"&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Skill structure:
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;/skills/SummarizeDocument/
  ├── SKILL.md
  └── script.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Content of SKILL.md
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;---
name: SummarizeDocument
description: Summarizes a document in 3 paragraphs.
---
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ol&gt;
&lt;li&gt;Script
&lt;/li&gt;
&lt;/ol&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;def summarize(document):
    # Logic to summarize using AI
    return summary
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;7️⃣ Real-World Example: E-Commerce System with Skills 🛒&lt;br&gt;
📦 Scenario:&lt;/p&gt;

&lt;p&gt;A user places an order on an online store.&lt;br&gt;
🔄 Flow with Skills and MCP:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;"Frontend" Agent: Receives the order.&lt;/li&gt;
&lt;li&gt;"Inventory" Subagent: Checks stock (skill: "CheckStock").&lt;/li&gt;
&lt;li&gt;"Payments" Subagent: Processes payment (skill: "ProcessPayment").&lt;/li&gt;
&lt;li&gt;"Shipping" Subagent: Generates shipping label (skill: "GenerateLabel").&lt;/li&gt;
&lt;li&gt;Result: The order is completed in seconds, with each subagent specialized in its task. ✅&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;8️⃣ Resources to Learn More 📚&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Documentation: Agent Skills (&lt;a href="https://agentskills.io/" rel="noopener noreferrer"&gt;https://agentskills.io/&lt;/a&gt;)
Libraries:

&lt;ul&gt;
&lt;li&gt;skills-ref (Python) (&lt;a href="https://github.com/agentskills/agentskills/tree/main/skills-ref" rel="noopener noreferrer"&gt;https://github.com/agentskills/agentskills/tree/main/skills-ref&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;AutoGen (Microsoft) (&lt;a href="https://github.com/microsoft/autogen" rel="noopener noreferrer"&gt;https://github.com/microsoft/autogen&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Communities:&lt;/p&gt;

&lt;p&gt;AI forums on Stack Overflow and Discord.&lt;br&gt;
Open skill repositories on GitHub.&lt;/p&gt;

&lt;p&gt;Conclusion: The Future Is Modular 🌐&lt;/p&gt;

&lt;p&gt;Skills are democratizing AI development, allowing any developer to create intelligent systems without being a machine learning expert. Start with a simple skill, experiment, and scale. The future of AI is collaborative and modular! 🚀&lt;/p&gt;

&lt;p&gt;Skills like MCP comes to make a revolution on the GEN AI era, be part of this, so let's learn more about it!! :)&lt;/p&gt;

&lt;p&gt;See you coders, hope this article is useful, let me know if you want to add something else or we can check about this article...&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%2F1wijuxpgfbsj4rtj5yrx.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1wijuxpgfbsj4rtj5yrx.webp" alt=" " width="300" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>genai</category>
      <category>mcp</category>
      <category>aiskill</category>
    </item>
    <item>
      <title>🚀 2026 Software Development Roadmap: How to Start (or Reinvent) Your Career in Tech</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Sat, 07 Feb 2026 16:04:35 +0000</pubDate>
      <link>https://forem.com/joedev090/2026-software-development-roadmap-how-to-start-or-reinvent-your-career-in-tech-18oa</link>
      <guid>https://forem.com/joedev090/2026-software-development-roadmap-how-to-start-or-reinvent-your-career-in-tech-18oa</guid>
      <description>&lt;h2&gt;
  
  
  💡 &lt;strong&gt;Why 2026 Is the Perfect Year to Jump Into Tech&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The tech industry isn’t just growing—it’s exploding. With 350,000+ new jobs annually in the U.S. alone, there’s never been a better time to start (or pivot) your career. Whether you’re a complete beginner, a junior dev looking to level up, or a seasoned programmer stuck in legacy tech, this guide is your no-BS roadmap to thriving in 2026.&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%2Fti3igz6edpay5c01ka35.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fti3igz6edpay5c01ka35.webp" alt=" " width="800" height="427"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here’s the truth:&lt;br&gt;
✅ Companies are desperate for skilled talent.&lt;br&gt;
✅ Salaries are higher than ever (even for remote roles).&lt;br&gt;
✅ You don’t need a CS degree—just the right skills and hustle.&lt;br&gt;
✅ Legacy devs: Your experience is gold—you just need to modernize it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Let’s break it down. No fluff. Just actionable advice.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Step 1: Pick One Path (Stop Trying to Learn Everything!)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;The biggest mistake I see? &lt;/li&gt;
&lt;li&gt;People jumping between languages/frameworks without mastering any. In 2026, companies want specialists, not jacks-of-all-trades. Here’s how to choose:&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;🔥 Best Entry-Level Roles for Beginners (Low Barrier, High Demand)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.- Cloud Engineer 🌥️&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What you’ll do: &lt;br&gt;
Build and manage cloud infrastructure (AWS, Azure, GCP).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: &lt;br&gt;
6M+ job openings worldwide. Certifications like AWS Certified Cloud Practitioner can get you hired in 3–6 months.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Salary: U.S.: $110K–$160K&lt;br&gt;
LatAm/Europe: €30K–€60K (remote jobs pay more!).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Beginners who want a fast, stable entry into tech.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2.- Full-Stack Developer 💻&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What you’ll do: &lt;br&gt;
Build both frontend (React, Vue) and backend (Node.js, Django).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: &lt;br&gt;
Startups and scale-ups love versatile devs. You can transition into architecture or AI later.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Salary: U.S.: $80K–$130K&lt;br&gt;
LatAm/Europe: €25K–€50K (remote: up to $70K).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Creators who enjoy seeing their code come to life.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3.- Data Analyst 📊&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What you’ll do: Turn raw data into actionable insights (SQL, Python, Tableau).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: 30–35% annual growth. Easier to break into than Data Science.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Salary:&lt;br&gt;
U.S.: $70K–$100K&lt;br&gt;
LatAm/Europe: €30K–€50K.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Logical thinkers who love solving puzzles with data.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;💎 Mid-Level Roles for Upskilling (Higher Pay, More Challenge)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.- DevOps Engineer 🔄&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What you’ll do: Automate CI/CD pipelines, manage Kubernetes, and bridge dev + ops.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: High demand, but not for absolute beginners (need sysadmin/scripting experience).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Salary: U.S.: $100K–$140K, LatAm/Europe: €40K–€70K.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Devs who love automation and scalability.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2. Cybersecurity Specialist 🛡️&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What you’ll do: Protect systems from attacks, implement security protocols.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: 3.5M+ unfilled jobs. Zero risk of AI replacement.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Salary: U.S.: $90K–$150K (seniors: $250K+)&lt;br&gt;
LatAm/Europe: €40K–€70K.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Paranoid problem-solvers (in a good way!).&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3.- Blockchain Developer ⛓️&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What you’ll do: &lt;br&gt;
Build smart contracts (Solidity, Rust) for DeFi, NFTs, and Web3.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: &lt;br&gt;
Niche but lucrative. Companies pay premium salaries for blockchain expertise.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Salary: U.S.: $120K–$180K&lt;br&gt;
LatAm/Europe: €45K–€80K.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Devs fascinated by decentralization and crypto.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🚀 Advanced Roles (For Experienced Devs Ready to Specialize)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;1.- AI/ML Engineer 🤖&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What you’ll do: 
Build machine learning models (TensorFlow, PyTorch).&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: &lt;br&gt;
Highest salaries in tech, but not beginner-friendly (requires math + CS fundamentals).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Salary: U.S.: $120K–$180K&lt;br&gt;
LatAm/Europe: €50K–€80K.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Devs who love algorithms and innovation.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2.- Software Architect 🏗️&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What you’ll do: &lt;br&gt;
Design large-scale systems (microservices, cloud-native apps).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Why it’s great: &lt;br&gt;
Top-tier salaries ($200K+ in the U.S.). Requires years of experience.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Perfect for: Senior devs ready to lead technical vision.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🛠️ Step 2: How to Break Into Tech (Even Without Experience)
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;👉  If You’re a Complete Beginner:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Pick one role (Cloud, Full-Stack, or Data Analyst)&lt;br&gt;
Get certified:&lt;br&gt;
Cloud: AWS Cloud Practitioner&lt;br&gt;
Full-Stack: The Odin Project (free!)&lt;br&gt;
Data: Google Data Analytics Certificate (Coursera).&lt;/p&gt;

&lt;p&gt;✅ Build projects:&lt;br&gt;
Cloud: Deploy a serverless app on AWS.&lt;br&gt;
Full-Stack: Create a CRUD app (e.g., a task manager).&lt;br&gt;
Data: Analyze a public dataset (Kaggle) and publish insights.&lt;/p&gt;

&lt;p&gt;✅ Apply to jobs:&lt;br&gt;
Use LinkedIn, AngelList, and RemoteOK.&lt;br&gt;
Pro tip: Start with startups or freelance gigs to gain experience.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 If You’re a Legacy Dev (COBOL, PHP, VB, etc.):&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Leverage your experience:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Your problem-solving skills are timeless&lt;br&gt;
Learn one modern stack (e.g., JavaScript + React + Node.js).&lt;/p&gt;

&lt;p&gt;✅ Transition gradually:&lt;br&gt;
Example: If you know PHP, learn Laravel (still in demand).&lt;br&gt;
If you know SQL, pivot to Data Engineering.&lt;/p&gt;

&lt;p&gt;✅ Highlight transferable skills:&lt;br&gt;
Debugging, system design, and legacy system maintenance are valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 If You’re a Junior Dev Looking to Level Up:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Specialize:&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ Pick one advanced area (DevOps, Cybersecurity, AI).&lt;br&gt;
✅ Contribute to open-source:&lt;br&gt;
✅ GitHub is your resume.&lt;br&gt;
✅ Network aggressively:&lt;br&gt;
Join Dev.to, Stack Overflow, and local meetups.&lt;/p&gt;

&lt;h2&gt;
  
  
  ⚠️ Step 3: Avoid These Costly Mistakes
&lt;/h2&gt;

&lt;p&gt;❌ Learning obsolete tech (e.g., VB6, Flash).&lt;br&gt;
Fix: Focus on cloud, JavaScript, Python, or Go.&lt;/p&gt;

&lt;p&gt;❌ Ignoring soft skills.&lt;br&gt;
Fix: Practice explaining technical concepts simply.&lt;/p&gt;

&lt;p&gt;❌ Not building a portfolio.&lt;br&gt;
Fix: GitHub + personal website = your ticket to interviews.&lt;/p&gt;

&lt;p&gt;❌ Skipping English.&lt;br&gt;
Fix: Remote jobs pay in USD—English is non-negotiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  💰 Step4: Salary Expectations:
&lt;/h2&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%2Fv89ze88w2cg1kef9pgsk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv89ze88w2cg1kef9pgsk.png" alt=" " width="800" height="418"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✅ Pro tip: Remote jobs (especially in U.S./EU companies) can 2–3x your salary if you’re outside the U.S.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎓 Step 5: Resources to Get Started Today
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Goal,Free/Paid Resources&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Learn Cloud,&lt;a href="https://aws.amazon.com/free/" rel="noopener noreferrer"&gt;AWS Free Tier&lt;/a&gt;, &lt;/li&gt;
&lt;li&gt;&lt;a href="https://acloudguru.com/" rel="noopener noreferrer"&gt;A Cloud Guru&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Learn Full-Stack,&lt;a href="https://www.theodinproject.com/" rel="noopener noreferrer"&gt;The Odin Project&lt;/a&gt;, &lt;a href="https://scrimba.com/" rel="noopener noreferrer"&gt;Scrimba&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn Data Analysis,&lt;a href="https://www.kaggle.com/" rel="noopener noreferrer"&gt;Kaggle&lt;/a&gt;, &lt;a href="https://www.coursera.org/professional-certificates/google-data-analytics" rel="noopener noreferrer"&gt;Google Data Analytics Certificate&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn DevOps,&lt;a href="https://kubernetes.io/docs/tutorials/kubernetes-basics/" rel="noopener noreferrer"&gt;Kubernetes Basics&lt;/a&gt;, &lt;a href="https://www.udemy.com/" rel="noopener noreferrer"&gt;DevOps Bootcamp (Udemy)&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn Cybersecurity,&lt;a href="https://tryhackme.com/" rel="noopener noreferrer"&gt;TryHackMe&lt;/a&gt;, &lt;a href="https://www.cybrary.it/" rel="noopener noreferrer"&gt;Cybrary&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Learn Blockchain,&lt;a href="https://cryptozombies.io/" rel="noopener noreferrer"&gt;CryptoZombies&lt;/a&gt;, &lt;a href="https://docs.soliditylang.org/" rel="noopener noreferrer"&gt;Solidity Docs&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🚀 Final Advice: Your 2026 Action Plan&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;This week: Pick one role from this guide.&lt;/li&gt;
&lt;li&gt;This month: Start a certification or course.&lt;/li&gt;
&lt;li&gt;Next 3 months: Build 2–3 portfolio projects.&lt;/li&gt;
&lt;li&gt;Next 6 months: Apply to 10+ jobs/day (yes, it’s a numbers game).&lt;/li&gt;
&lt;li&gt;Always: Network, contribute to open-source, and keep learning.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;💬 Your Turn!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;👉 Which path excites you the most? Cloud? Full-Stack? AI?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Drop a comment below—I’ll help you craft a personalized roadmap!&lt;/p&gt;

&lt;p&gt;P.S. If you found this useful, share it with a friend who’s thinking about tech. Let’s get more people into this life-changing industry! 🚀&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>techcareers</category>
      <category>cloudcomputing</category>
      <category>coding2026techtrends</category>
    </item>
    <item>
      <title>🚀 The Essential Patterns Behind Modern AI Agents</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Wed, 03 Dec 2025 00:59:36 +0000</pubDate>
      <link>https://forem.com/joedev090/the-essential-patterns-behind-modern-ai-agents-43j2</link>
      <guid>https://forem.com/joedev090/the-essential-patterns-behind-modern-ai-agents-43j2</guid>
      <description>&lt;h2&gt;
  
  
  🚀 The Essential Patterns Behind Modern AI Agents
&lt;/h2&gt;

&lt;p&gt;A Practical Guide for Developers, PMs, Analysts &amp;amp; Business Leaders&lt;/p&gt;

&lt;p&gt;✅ Artificial Intelligence agents are quickly becoming the backbone of next-generation software systems. They automate decision-making, coordinate tasks, call APIs, analyze data, and even interact with users like mini-employees who work 24/7.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;Regardless of the framework you use (LangChain, LangGraph, CrewAI, LlamaIndex, AutoGPT…), the smartest AI agents rely on the same set of architectural patterns.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Understanding these patterns is the difference between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Building a confusing chatbot, or&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Designing a reliable multi-agent system that solves real business problems.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This article breaks them down in a simple, real-world, business-friendly way.&lt;/p&gt;

&lt;p&gt;🧩 &lt;strong&gt;What Is an AI Agent, Really?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;✅ Think of an AI agent as a software component with initiative:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;It reads an instruction&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Decides what needs to be done&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uses tools, APIs, or other agents&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;And delivers a result&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ This makes agents useful not only for developers, but also for:&lt;/p&gt;

&lt;p&gt;Customer support automation&lt;br&gt;
Logistics and operational workflows&lt;br&gt;
Financial analysis&lt;br&gt;
Marketing content creation&lt;br&gt;
Data cleanup&lt;br&gt;
Decision-making pipelines&lt;/p&gt;

&lt;p&gt;✅ The magic is NOT the tools — it’s the patterns behind the architecture.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧱 The 5 Core Patterns Behind Every Effective AI Agent
&lt;/h2&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Chaining Pattern — Step-by-Step Workflows&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This pattern executes a sequence of steps, one after another.&lt;/p&gt;

&lt;p&gt;🔍 Real-world example:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Flight-change notifications for an airline&lt;/li&gt;
&lt;li&gt;Extract flight details from an internal system&lt;/li&gt;
&lt;li&gt;Ask the LLM to classify if the message needs an apology or not&lt;/li&gt;
&lt;li&gt;Generate a personalized message&lt;/li&gt;
&lt;li&gt;Validate tone before sending&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a classic chain:&lt;br&gt;
Input → Process → Transform → Output&lt;/p&gt;

&lt;p&gt;Simple, predictable, powerful.&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Routing Pattern — Direct Users to the Right Specialist&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A routing agent acts like a triage nurse in a hospital:&lt;br&gt;
It reads the request and decides which specialized agent should handle it.&lt;/p&gt;

&lt;p&gt;🔍 Real-world example:&lt;/p&gt;

&lt;p&gt;Customer Support in E-commerce&lt;/p&gt;

&lt;p&gt;A routing agent receives a message:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“My package arrived broken.” → Send to Claims Agent&lt;/li&gt;
&lt;li&gt;“I want to change my delivery address.” → Send to Order Modification Agent&lt;/li&gt;
&lt;li&gt;“How do I return an item?” → Send to Self-Service FAQ Agent&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Routing turns one big bot into a coordinated team of experts.&lt;/p&gt;

&lt;p&gt;3️⃣ Parallelization Pattern — Multiple Agents Working at Once&lt;/p&gt;

&lt;p&gt;Instead of running tasks one by one, this pattern launches several agents simultaneously.&lt;/p&gt;

&lt;p&gt;🔍 Real-world example:&lt;/p&gt;

&lt;p&gt;Code Review Automation&lt;/p&gt;

&lt;p&gt;A developer submits code.&lt;br&gt;
Three AI agents run in parallel:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;🔐 Security Agent checks for vulnerabilities&lt;/li&gt;
&lt;li&gt;🎨 Style Agent checks formatting and conventions&lt;/li&gt;
&lt;li&gt;⚙️ Complexity Agent analyzes maintainability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The orchestrator merges results into a single, clean review.&lt;/p&gt;

&lt;p&gt;Parallelization = speed.&lt;/p&gt;

&lt;p&gt;4️⃣ Orchestrator Pattern — The Project Manager Agent&lt;/p&gt;

&lt;p&gt;The orchestrator doesn’t do the tasks.&lt;br&gt;
It manages agents that do the tasks.&lt;/p&gt;

&lt;p&gt;It’s like a PM assigning work to the right specialists.&lt;/p&gt;

&lt;p&gt;🔍 Real-world example:&lt;/p&gt;

&lt;p&gt;Launching a new product landing page&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Orchestrator receives request&lt;/li&gt;
&lt;li&gt;Assigns tasks:&lt;/li&gt;
&lt;li&gt;UX Agent → Write the main message&lt;/li&gt;
&lt;li&gt;Marketing Agent → Create persuasive copy&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Technical Agent → Generate HTML/CSS&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Orchestrator merges and finalizes&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Returns a complete project output&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This enables scalable teamwork between AI agents.&lt;/p&gt;

&lt;p&gt;The last pattern is awesome!!&lt;/p&gt;

&lt;p&gt;5️⃣ Evaluator Pattern — AI Checking AI&lt;/p&gt;

&lt;p&gt;This pattern lets one agent evaluate the output of another.&lt;/p&gt;

&lt;p&gt;🔍 Real-world example:&lt;/p&gt;

&lt;p&gt;✅ Financial email generation&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Agent A generates the financial explanation&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Evaluator Agent checks:&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;Accuracy&lt;/li&gt;
&lt;li&gt;Tone compliance&lt;/li&gt;
&lt;li&gt;Clarity&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;If it fails, evaluator requests improvement until it meets standards&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Evaluators reduce errors and add control.&lt;/p&gt;

&lt;h2&gt;
  
  
  🎯 Why These Patterns Matter (Even if You’re Not an Engineer)
&lt;/h2&gt;

&lt;p&gt;Whether you’re a developer, PM, analyst, or business leader:&lt;/p&gt;

&lt;p&gt;✅ They help you design better AI solutions&lt;/p&gt;

&lt;p&gt;Knowing the patterns lets you break down complex problems strategically.&lt;/p&gt;

&lt;p&gt;✅ They prevent over-engineering&lt;/p&gt;

&lt;p&gt;Most business use cases don’t need a “super-agent”—just the right pattern.&lt;/p&gt;

&lt;p&gt;✅ They make your product scalable&lt;/p&gt;

&lt;p&gt;As your workload grows, patterns give structure and reliability.&lt;/p&gt;

&lt;p&gt;✅ They align tech and business teams&lt;/p&gt;

&lt;p&gt;Patterns act as a shared vocabulary between engineering, product, and ops.&lt;/p&gt;

&lt;p&gt;🧠 Final Takeaway&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You don’t need to memorize every AI framework.&lt;/li&gt;
&lt;li&gt;You only need to understand the patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;✅ These five concepts — chaining, routing, parallelization, orchestration, and evaluation — will allow you to design, analyze, and implement AI systems that are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scalable&lt;/li&gt;
&lt;li&gt;Maintainable&lt;/li&gt;
&lt;li&gt;Aligned with business goals&lt;/li&gt;
&lt;li&gt;And capable of real, measurable value&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI agents aren’t magic.&lt;br&gt;
They’re architecture — just like any good software system&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%2Foqpyxyt6zh2lwlqyfq0f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Foqpyxyt6zh2lwlqyfq0f.png" alt=" " width="700" height="441"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What do you think about these patterns? Are there one is most used or maybe we have to add a new one?&lt;/p&gt;

&lt;p&gt;This article is based on this youtube video made by #nicobytes:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=oR0GqQ8wMfk" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=oR0GqQ8wMfk&lt;/a&gt;&lt;/p&gt;

</description>
      <category>agentai</category>
      <category>orchestator</category>
      <category>llm</category>
      <category>ai</category>
    </item>
    <item>
      <title>🚀 Lean Startup: La guía moderna para crear productos que la gente realmente quiere</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Sat, 22 Nov 2025 17:12:55 +0000</pubDate>
      <link>https://forem.com/joedev090/lean-startup-la-guia-moderna-para-crear-productos-que-la-gente-realmente-quiere-ocl</link>
      <guid>https://forem.com/joedev090/lean-startup-la-guia-moderna-para-crear-productos-que-la-gente-realmente-quiere-ocl</guid>
      <description>&lt;p&gt;Cada vez mas me sorprende como la metodologia Lean Startup puede hacer que suceda cosas maravillosas, tanto en proyectos empresariales como en startups.&lt;/p&gt;

&lt;p&gt;Pero Eric Ries, con su libro The Lean Startup, propone algo distinto: una forma más científica, ágil y basada en datos para crear productos exitosos bajo incertidumbre.&lt;/p&gt;

&lt;p&gt;Este artículo resume sus ideas principales de forma clara y accionable 👇&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;¿Qué es Lean Startup?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Lean Startup es un método que ayuda a emprendedores y equipos de producto a minimizar el desperdicio, aprender rápido y construir solo lo que realmente importa.&lt;/p&gt;

&lt;p&gt;Se basa en ciclos cortos de experimentación, observación del cliente y decisiones guiadas por datos, no por suposiciones.&lt;/p&gt;

&lt;p&gt;Es ideal para startups, proyectos de innovación o cualquier iniciativa que se desarrolle en ambientes de incertidumbre.&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%2Fffzcly3oce8mf0c2jyfr.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffzcly3oce8mf0c2jyfr.webp" alt=" " width="800" height="1060"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Principios Fundamentales del Método&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2.1 Emprendedores en todas partes&lt;/em&gt; 👥&lt;br&gt;
No importa si estás en una startup, en una corporación o creando un proyecto paralelo: el espíritu emprendedor puede surgir en cualquier lugar donde haya innovación.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2.2 El emprendimiento es management&lt;/em&gt; 📊&lt;br&gt;
Crear un producto nuevo requiere un estilo de gestión especial, diferente al tradicional, porque las decisiones se toman con información incompleta.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2.3 Aprendizaje Validado&lt;/em&gt; 🎯&lt;br&gt;
El objetivo principal de una startup no es lanzar rápido, sino aprender rápido.&lt;br&gt;
Cada hipótesis sobre tu producto debe validarse con experimentos reales.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2.4 El Ciclo Crear → Medir → Aprender&lt;/em&gt; 🔁&lt;br&gt;
El corazón del método Lean:&lt;/p&gt;

&lt;p&gt;Crear un experimento o prototipo mínimo&lt;br&gt;
Medir cómo reaccionan los usuarios&lt;br&gt;
Aprender qué funciona y qué no&lt;/p&gt;

&lt;p&gt;Este ciclo debe repetirse constantemente.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;2.5 Contabilidad de la Innovación&lt;/em&gt; 📈&lt;br&gt;
Para saber si una idea progresa, se necesitan métricas reales (retención, conversión, uso), no “métricas vanidosas” como vistas o likes.&lt;/p&gt;

&lt;p&gt;3️⃣ &lt;strong&gt;Parte 1: Ver – Descubriendo Qué Quiere el Cliente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3.1 Operar bajo incertidumbre extrema&lt;/em&gt; 🌫️&lt;br&gt;
Las startups no deben seguir procesos corporativos rígidos, porque no saben todavía qué producto será viable.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3.2 El objetivo: Aprendizaje validado&lt;/em&gt; 🧪&lt;br&gt;
Formular hipótesis, ejecutar experimentos y obtener feedback real.&lt;br&gt;
Ej.: Zappos probó la demanda comprando zapatos en tiendas locales antes de invertir en inventario.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3.3 Observar comportamientos, no opiniones&lt;/em&gt; 👁️&lt;br&gt;
Preguntar al usuario no basta; lo importante es ver cómo se comporta realmente.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;3.4 Casos reales como ejemplo&lt;/em&gt; 🌍&lt;br&gt;
Zappos validando demanda con fotos de zapatos en su web.&lt;br&gt;
Lavandería móvil en India adaptando su modelo al comportamiento real del usuario.&lt;/p&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;Parte 2: Dirigir – Pasar del Aprendizaje a la Acción&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4.1 Construcción de un MVP (Minimum Producto Viable)&lt;/em&gt; 🧩&lt;br&gt;
Un MVP no es un prototipo bonito: es la versión más simple que te permite aprender algo real.&lt;/p&gt;

&lt;p&gt;Tipos de MVP:&lt;/p&gt;

&lt;p&gt;Landing Pages 🖥️&lt;br&gt;
Videos explicativos 🎥&lt;br&gt;
PMV “Conserje” (servicio manual personalizado) 🤝&lt;br&gt;
PMV “Mago de Oz” (parece automatizado, pero detrás hay humanos) 🪄&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4.2 Hipótesis de valor y de crecimiento&lt;/em&gt; 📐&lt;br&gt;
Valor: ¿El usuario realmente usa y valora esto?&lt;/p&gt;

&lt;p&gt;Crecimiento: ¿Cómo se expandirá el negocio?&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4.3 Métricas que importan&lt;/em&gt; 📊&lt;br&gt;
Evitar métricas vanidosas y enfocarse en:&lt;/p&gt;

&lt;p&gt;Retención&lt;br&gt;
Conversión&lt;br&gt;
Engagement&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4.4 Test A/B para validar decisiones&lt;/em&gt; 🔬&lt;br&gt;
Experimentar comparando dos versiones y ver cuál funciona mejor.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;4.5 Pivotar o perseverar&lt;/em&gt; 🔄&lt;br&gt;
Si las métricas no mejoran, es necesario un pivot.&lt;br&gt;
Ries sugiere revisiones periódicas para decidirlo antes de agotar recursos.&lt;/p&gt;

&lt;p&gt;5️⃣ &lt;strong&gt;Parte 3: Acelerar – Escalar sin Perder Agilidad&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5.1 Lotes pequeños para mejorar más rápido&lt;/em&gt; ⚡&lt;br&gt;
Iteraciones pequeñas permiten detectar errores pronto y aprender más rápido.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5.2 Crecimiento sostenible&lt;/em&gt; 🌱&lt;br&gt;
Cuatro formas principales:&lt;/p&gt;

&lt;p&gt;Publicidad&lt;br&gt;
Repetición del negocio&lt;br&gt;
Recomendación entre usuarios&lt;br&gt;
Efecto red&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5.3 Lograr el “Product-Market Fit”&lt;/em&gt; 🧲&lt;br&gt;
Cuando los usuarios reconocen el valor del producto y lo adoptan masivamente.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5.4 Resolver problemas con los “Cinco Porqués”&lt;/em&gt; ❓❓❓❓❓&lt;br&gt;
Técnica para descubrir la causa raíz de un error.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;5.5 Innovación sostenida vs. disruptiva&lt;/em&gt; ⚔️&lt;br&gt;
Sostenida: mejoras incrementales&lt;/p&gt;

&lt;p&gt;Disruptiva: productos nuevos y radicales&lt;br&gt;
Los equipos de innovación deben tener autonomía para ejecutar ambos enfoques.&lt;/p&gt;

&lt;p&gt;Finalmente:&lt;/p&gt;

&lt;p&gt;6️⃣ &lt;strong&gt;Conclusión: Construir con Menos Riesgo y Más Aprendizaje&lt;/strong&gt; 💡&lt;/p&gt;

&lt;p&gt;Lean Startup enseña a reducir desperdicio, acelerar el aprendizaje y crear productos que la gente realmente quiera.&lt;br&gt;
No se trata de moverse más rápido por moverse: se trata de aprender rápido, medir lo que importa y tomar decisiones basadas en evidencia.&lt;/p&gt;

&lt;p&gt;Si estás lanzando un producto, un MVP o un experimento interno, aplicar Lean Startup puede marcar la diferencia entre un proyecto exitoso y meses de trabajo desperdiciado.&lt;/p&gt;

&lt;p&gt;Como parte de la industria del desarrollo de Software el tener presente esta metolodogia nos ayudara a aliviar muchos dolores de cabeza, ya sea cuando empecemos nuestro propio startup o participemos en un proyecto a nivel empresarial!!! &lt;/p&gt;

&lt;p&gt;Nuestra mente emprendedora, tarde o temprano sale a florecer!!!&lt;/p&gt;

&lt;p&gt;Que piensas de esta metodologia? Crees que la podamos mezclar con otros metodos agiles?&lt;/p&gt;

&lt;p&gt;Dejame tu comentario o tu like, para que llegue a mas personas...&lt;/p&gt;

&lt;p&gt;Nos vemos Coders y amigos!&lt;/p&gt;

</description>
      <category>leanstartup</category>
      <category>agile</category>
      <category>startup</category>
      <category>software</category>
    </item>
    <item>
      <title>🚀 Coding 3 Faster with PM Knowledge: Why True Speed Comes from Team Alignment, Not Typing Faster</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Fri, 24 Oct 2025 01:34:04 +0000</pubDate>
      <link>https://forem.com/joedev090/coding-3x-faster-with-pm-knowledge-why-true-speed-comes-from-team-alignment-not-typing-faster-56n4</link>
      <guid>https://forem.com/joedev090/coding-3x-faster-with-pm-knowledge-why-true-speed-comes-from-team-alignment-not-typing-faster-56n4</guid>
      <description>&lt;p&gt;Hey Coders &lt;/p&gt;

&lt;p&gt;Context:&lt;br&gt;
I was checking latest posts from my Linkedin and I realized about a new video of one of my mentors in the past #faztcode (you can see your videos in youtube).&lt;/p&gt;

&lt;p&gt;The title of the video caught my attention...&lt;/p&gt;

&lt;p&gt;"Code 3x Faster without AI"&lt;br&gt;
"Programar 3 veces más rápidos (y sin usar IA)"&lt;/p&gt;

&lt;p&gt;Here you can see the link of the video:&lt;br&gt;


  &lt;iframe src="https://www.youtube.com/embed/vxQqjMSmQxM"&gt;
  &lt;/iframe&gt;


&lt;/p&gt;

&lt;p&gt;When I was watching the video, I checked the reference it mentioned, and I was more curious about the post, so I checked it before finishing to watch the video (believe it or not! hehe).&lt;/p&gt;

&lt;p&gt;The title of the post was a little different and caught more my attention.&lt;/p&gt;

&lt;p&gt;I decided to read but like most of the articles in medium, it was not able all the reading.&lt;br&gt;
So I decided to use the AI to help me to create a brief of the video and most of the things are often true, and maybe it was the perspective of the author about "How to code 3x faster than my team even when he is not using some help for the AI" (curious) but at the mostly of the things are true.&lt;/p&gt;

&lt;p&gt;This article is not a resume about that article (you can see at the end of this reading), I copied the title and adding my perspective based on my experience in different projects on the software development.&lt;/p&gt;

&lt;p&gt;Let's begin!!!&lt;/p&gt;

&lt;p&gt;**_&lt;/p&gt;

&lt;h2&gt;
  
  
  🚀 Coding 3× Faster with PM Knowledge: Why True Speed Comes from Team Alignment, Not Typing Faster
&lt;/h2&gt;

&lt;p&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%2Foaffvyrr1ooij91fr6zn.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%2Foaffvyrr1ooij91fr6zn.jpg" alt=" "&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 &lt;strong&gt;The Myth of the “Fast Developer”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We all know that one engineer who seems to deliver features at lightning speed.&lt;br&gt;
They merge code quickly, demo constantly, and always seem “ahead.”&lt;/p&gt;

&lt;p&gt;Early in my career, I thought these people just coded faster. Later, I learned the truth: speed in software is not a typing skill — it’s a thinking skill.&lt;/p&gt;

&lt;p&gt;But here’s the twist most developers miss:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;The fastest developers think like Product Managers.&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;They don’t chase perfection in code. They chase clarity of purpose, scope, and impact — the same things great PMs obsess over.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🧭 &lt;strong&gt;Think Like a Project Manager (PM): Clarity Before Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A PM doesn’t start by asking “How do we build this?”&lt;br&gt;
They ask “Why are we building this, and what’s the smallest thing that solves it?”&lt;/p&gt;

&lt;p&gt;💡 When developers adopt that mindset, something incredible happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You stop wasting time on low-value features.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You naturally prioritize impact over polish.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You deliver the right thing, not just a thing.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Before you open your IDE, ask yourself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;What user problem am I solving?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What’s the smallest valuable outcome that proves it works?&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;What can I cut or simplify without losing impact.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;That’s Lean Inception 101 — and it’s how great teams move from idea to MVP in weeks, not months.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🧩 &lt;strong&gt;MVPs and Lean Inception: Build, Measure, Learn — Fast&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A Lean Inception aligns the team on the vision, users, and scope of the MVP. &lt;br&gt;
It’s where everyone — PMs, designers, and devs — agrees on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The problem to solve.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The personas who face it.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The MVP features that validate the idea.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As developers, when we embrace this process, we gain directional clarity.&lt;br&gt;
We stop over-engineering because we know exactly what must exist for the MVP to succeed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;That’s how you code 3× faster — not by skipping tests, but by skipping the non-essential.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🧠 &lt;strong&gt;From Agile Theory to Real Velocity: Scrum + Kanban in Action&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Many teams say they’re “Agile,” but still struggle to release fast.&lt;br&gt;
Why? Because agility without focus is chaos.&lt;/p&gt;

&lt;p&gt;Here’s how Agile methods enable real speed:&lt;/p&gt;

&lt;p&gt;Scrum: Sprint Toward Value&lt;/p&gt;

&lt;p&gt;Scrum creates rhythm and focus. Short sprints (1–2 weeks) force scope discipline.&lt;br&gt;
Each sprint review is a checkpoint to validate if the team is building what truly matters.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Deliver something demo-ready every sprint — even if it’s small.&lt;br&gt;
That forces clarity, collaboration, and continuous integration.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Kanban: Flow, Not Rush&lt;/p&gt;

&lt;p&gt;When teams need flexibility or continuous delivery, Kanban keeps things flowing.&lt;/p&gt;

&lt;p&gt;Visualizing your workflow exposes bottlenecks: long QA queues, endless code reviews, or unclear acceptance criteria.&lt;/p&gt;

&lt;p&gt;By tightening those loops, you speed up flow, not just coding.&lt;/p&gt;

&lt;p&gt;Both frameworks remind us that team speed is system speed.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;A single “fast developer” means nothing if reviews, blockers, and unclear stories slow everyone else down.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🤝 &lt;strong&gt;The Power of Team Alignment&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Coding 3× faster is not about cutting corners — it’s about removing friction.&lt;/p&gt;

&lt;p&gt;You can’t go fast if:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The requirements change mid-sprint.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Designers and devs don’t share context.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;QA gets code that’s hard to test.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;PMs expect magic without clarity.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why the best developers don’t isolate themselves — they collaborate early.&lt;br&gt;
They ask questions in refinement, challenge assumptions in planning, and offer tech insights during design reviews.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;When devs, PMs, and designers move in sync, velocity compounds.&lt;br&gt;
What took 3 weeks now takes 5 days — not because anyone types faster, but because everyone understands the goal.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;And finally...&lt;/p&gt;

&lt;p&gt;⚖️ &lt;strong&gt;Good Enough vs. Sustainable&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One trap of “speed culture” is confusing speed with haste.&lt;br&gt;
The goal isn’t sloppy code — it’s focused iteration.&lt;/p&gt;

&lt;p&gt;A fast team:&lt;/p&gt;

&lt;p&gt;Writes maintainable “good-enough” code for the MVP.&lt;/p&gt;

&lt;p&gt;Keeps a refactor backlog to revisit critical parts later.&lt;/p&gt;

&lt;p&gt;Avoids premature abstraction, but maintains testability.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Remember: The MVP is not the final product. It’s a learning tool.&lt;br&gt;
You build it fast to validate assumptions, not to last forever.&lt;br&gt;
Once validated, you harden, refactor, and scale.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;🧩 &lt;strong&gt;Code Fast, Think Lean, Ship Together&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In the end, speed in software isn’t about lines of code per hour.&lt;br&gt;
It’s about how fast your team can learn.&lt;/p&gt;

&lt;p&gt;A Product Manager’s mindset helps developers see the bigger picture.&lt;/p&gt;

&lt;p&gt;Agile frameworks provide the structure to learn quickly.&lt;/p&gt;

&lt;p&gt;Lean Inception ensures that what we ship actually matters.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So if you want to “code 3× faster,” stop optimizing your keystrokes.&lt;br&gt;
Start optimizing your clarity, collaboration, and feedback loops.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This post is based on this article:&lt;br&gt;
&lt;a href="https://medium.com/@jh.baek.sd/why-i-code-3x-faster-than-my-team-and-its-not-what-you-think-390e6e6078d0" rel="noopener noreferrer"&gt;https://medium.com/@jh.baek.sd/why-i-code-3x-faster-than-my-team-and-its-not-what-you-think-390e6e6078d0&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And this video:&lt;br&gt;
&lt;a href="https://www.youtube.com/watch?v=vxQqjMSmQxM" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=vxQqjMSmQxM&lt;/a&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>mvp</category>
      <category>kanban</category>
      <category>scrum</category>
    </item>
    <item>
      <title>IA Generativa en 2025: Cómo sobrevivir y prosperar en la nueva era tecnológica</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Sun, 28 Sep 2025 22:23:16 +0000</pubDate>
      <link>https://forem.com/joedev090/ia-generativa-en-2025-como-sobrevivir-y-prosperar-en-la-nueva-era-tecnologica-1fg8</link>
      <guid>https://forem.com/joedev090/ia-generativa-en-2025-como-sobrevivir-y-prosperar-en-la-nueva-era-tecnologica-1fg8</guid>
      <description>&lt;p&gt;La inteligencia artificial generativa (IA generativa) dejó de ser un concepto de ciencia ficción. &lt;/p&gt;

&lt;p&gt;Hoy escribe textos, crea ilustraciones, compone música e incluso programa código en segundos. Lo que antes parecía magia, ahora está en la oficina, la universidad y hasta en el celular.&lt;/p&gt;

&lt;p&gt;En este artículo te contaré qué es, cómo funciona, qué oportunidades trae y cuáles son los riesgos que debemos considerar para aprovecharla de forma responsable.&lt;/p&gt;

&lt;p&gt;💡 Este artículo está pensado tanto para quienes programan como para quienes coordinan, diseñan o simplemente sienten curiosidad por la tecnología.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;¿Qué es la IA generativa?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Es una rama de la IA que no solo analiza datos, sino que genera contenido nuevo. &lt;br&gt;
Solo basta con escribir una instrucción (un prompt) para obtener un artículo, una imagen o un bloque de código.&lt;/p&gt;

&lt;p&gt;👉 En 2025 ya no hablamos de un experimento, sino de una herramienta de trabajo y creatividad en múltiples industrias.&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%2Fdqc6nw7vn4wz6v9auygj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdqc6nw7vn4wz6v9auygj.png" alt=" " width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Cómo funciona: la magia detrás del contenido&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Los modelos se entrenan con millones de ejemplos y aprenden patrones. Gracias a un mecanismo llamado “atención” (attention), el sistema elige la información más relevante para dar una respuesta coherente.&lt;/p&gt;

&lt;p&gt;Ejemplo sencillo: si escribes “hazme una lista de tareas para organizar un evento”, el modelo no copia de internet, sino que predice las palabras más probables y crea un plan nuevo.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Modalidades y multimodalidad&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Hasta hace poco teníamos modelos especializados (texto → texto, texto → imagen). La tendencia actual son los modelos multimodales: entienden y combinan texto, imágenes, audio y video en la misma interacción.&lt;/p&gt;

&lt;p&gt;🎬 Imagina describir una idea en palabras y recibir un video corto como resultado.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Limitaciones y riesgos&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Aunque suene increíble, la IA generativa tiene problemas:&lt;/p&gt;

&lt;p&gt;Alucinaciones: puede inventar datos que parecen ciertos.&lt;/p&gt;

&lt;p&gt;Conocimiento limitado: no sabe lo ocurrido después de su fecha de entrenamiento.&lt;/p&gt;

&lt;p&gt;Sesgos: repite prejuicios presentes en los datos.&lt;/p&gt;

&lt;p&gt;Costos ambientales: entrenar modelos consume mucha energía.&lt;/p&gt;

&lt;p&gt;Mal uso: desde noticias falsas hasta fraudes visuales.&lt;/p&gt;

&lt;p&gt;💡 Consejo: úsala como herramienta, no como única fuente de verdad.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;El rol humano en la era de la IA&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;La IA no viene a reemplazarnos, sino a exigir que potenciemos lo que nos hace únicos: creatividad, pensamiento crítico, ética y empatía.&lt;/p&gt;

&lt;p&gt;Los profesionales que prosperen serán los que aprendan a trabajar con la IA, no contra ella.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Aplicaciones prácticas&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Algunos ejemplos actuales:&lt;/p&gt;

&lt;p&gt;🎓 Educación: asistentes que resumen lecturas o crean ejercicios personalizados.&lt;/p&gt;

&lt;p&gt;💼 Negocios: borradores de contratos, reportes o ideas de marketing.&lt;/p&gt;

&lt;p&gt;🎨 Arte y diseño: generación de imágenes, música y videos.&lt;/p&gt;

&lt;p&gt;👩‍💻 Tecnología: ayuda en la programación y prototipos rápidos.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agentes autónomos: el siguiente paso&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Más allá de “responder preguntas”, están surgiendo los agentes autónomos: programas que encadenan tareas, interactúan con aplicaciones y toman decisiones limitadas sin supervisión constante.&lt;br&gt;
Ejemplo: un asistente que recibe un correo, analiza el pedido, busca información en internet y genera una respuesta automática.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;IA en las organizaciones&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El verdadero cambio ocurre cuando una empresa integra la IA en sus procesos y cultura, no solo en tareas individuales. Esto requiere:&lt;/p&gt;

&lt;p&gt;Liderazgo con visión.&lt;/p&gt;

&lt;p&gt;Capacitación constante.&lt;/p&gt;

&lt;p&gt;Políticas éticas claras.&lt;/p&gt;

&lt;p&gt;Espacios de experimentación.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;El arte de preguntar: prompt engineering&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El resultado depende de la instrucción. Aprender a dar contexto, ejemplos y objetivos claros es fundamental.&lt;br&gt;
Ejemplo: en vez de escribir “haz un informe”, prueba con:&lt;/p&gt;

&lt;p&gt;“Escribe un informe de una página, con viñetas y un resumen final para directivos no técnicos”.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Mirando al futuro&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;El debate está abierto: ¿liberará nuestro potencial creativo o generará nuevas desigualdades?&lt;br&gt;
Lo único seguro es que la IA generativa ya forma parte de nuestra vida digital y seguirá transformando la forma en que trabajamos y nos relacionamos.&lt;/p&gt;

&lt;p&gt;Conclusión&lt;/p&gt;

&lt;p&gt;La IA generativa no es una moda: es una revolución en marcha. Nuestro reto no es temerle, sino aprender a usarla con criterio, ética y creatividad.&lt;/p&gt;

&lt;p&gt;🔑 Adaptarse es obligatorio, prosperar es la gran oportunidad.&lt;/p&gt;

</description>
      <category>iagenerativa</category>
      <category>ia</category>
      <category>softwaredevelopment</category>
      <category>chatgpt</category>
    </item>
    <item>
      <title>🚀 Lean Startup for Software Developers 💻</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Fri, 22 Aug 2025 17:41:12 +0000</pubDate>
      <link>https://forem.com/joedev090/lean-startup-for-software-developers-2pbj</link>
      <guid>https://forem.com/joedev090/lean-startup-for-software-developers-2pbj</guid>
      <description>&lt;p&gt;Hey Coders!!!&lt;/p&gt;

&lt;p&gt;Let's check in more details about Lean Startup, and we will begin for the basic. A definition:&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%2Ffpi9uwgt04dqz57wk3s1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffpi9uwgt04dqz57wk3s1.png" alt="The core of Lean Startup" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;🤔 What is Lean Startup?&lt;/p&gt;

&lt;p&gt;Lean Startup is a methodology for creating and managing startups efficiently. The goal? Launch products fast with minimal resources, reducing risk and uncertainty.&lt;/p&gt;

&lt;p&gt;🔹 Core Principle: The Build-Measure-Learn cycle 🔄&lt;/p&gt;

&lt;p&gt;🛠️ Build: &lt;br&gt;
Develop a Minimum Viable Product (MVP)—a basic version with only essential features.&lt;/p&gt;

&lt;p&gt;📊 Measure: Track user responses with data and metrics to validate hypotheses.&lt;/p&gt;

&lt;p&gt;🧠 Learn: Analyze results to decide whether to persevere or pivot.&lt;/p&gt;

&lt;p&gt;This approach helps you learn quickly what customers really want, avoiding wasted time and money on unwanted products.&lt;/p&gt;

&lt;p&gt;📖 Created by Eric Ries and inspired by Toyota’s Lean Manufacturing, it replaces rigid planning with experimentation and feedback.&lt;/p&gt;

&lt;p&gt;1️⃣ The Build-Measure-Learn Feedback Loop 🔄&lt;/p&gt;

&lt;p&gt;The heart of Lean Startup! Instead of spending months building a "perfect" product, focus on speed to get real feedback.&lt;/p&gt;

&lt;p&gt;Example (E-commerce for Sportswear):&lt;br&gt;
💡 Hypothesis: Customers want to customize their jerseys.&lt;/p&gt;

&lt;p&gt;🛠️ Build: A simple page where users pick a shirt color and add text (no complex 3D editor).&lt;br&gt;
📊 Measure: Track clicks on "Customize," cart additions, and completed purchases.&lt;br&gt;
🧠 Learn: If users interact but don’t buy, maybe the process is too simple or the price is wrong. Iterate or drop the feature!&lt;/p&gt;

&lt;p&gt;2️⃣ Everything Is an Experiment 🧪&lt;/p&gt;

&lt;p&gt;Every new feature is a test, not a guess. Base decisions on data, not assumptions!&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
💡 Hypothesis: Better product photos = higher conversions.&lt;/p&gt;

&lt;p&gt;🎨 Test: A/B test—50% see old photos, 50% see new high-quality ones.&lt;br&gt;
📈 Result: If new photos convert better, invest in professional photography!&lt;/p&gt;

&lt;p&gt;3️⃣ Types of MVPs 📦&lt;/p&gt;

&lt;p&gt;An MVP isn’t incomplete, it’s the simplest version to test your hypothesis.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;p&gt;🎭 Wizard of Oz MVP: Fake a product page (no backend). When orders come in, handle them manually to validate demand.&lt;/p&gt;

&lt;p&gt;👔 Concierge MVP: Serve a few customers personally (e.g., email catalogs, phone orders) before automating.&lt;/p&gt;

&lt;p&gt;4️⃣ Three Engines of Growth 📈&lt;br&gt;
Once your product is validated, choose a growth strategy:&lt;/p&gt;

&lt;p&gt;🧲 Sticky: Focus on retention (loyalty programs, UX).&lt;br&gt;
🦠 Viral: Encourage referrals (e.g., discounts for sharing).&lt;br&gt;
💰 Paid: Scale with ads (measure CAC vs. LTV).&lt;/p&gt;

&lt;p&gt;5️⃣ Pivot or Persevere? 🔁&lt;/p&gt;

&lt;p&gt;A pivot isn’t failure—it’s a smart course correction based on data.&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
💡 Vision: High-performance sportswear.&lt;br&gt;
📉 Data: Running gear gets more searches than cycling.&lt;br&gt;
🔄 Pivot: Shift focus to running while keeping the same vision.&lt;/p&gt;

&lt;p&gt;💡 Key Takeaway for Devs:&lt;/p&gt;

&lt;p&gt;Lean Startup helps you build what users want without wasting resources. Experiment, measure, and adapt!&lt;/p&gt;

&lt;p&gt;🚀 Have you used Lean Startup in your projects? &lt;/p&gt;

&lt;p&gt;Share your experience in the comments!&lt;/p&gt;

&lt;h1&gt;
  
  
  LeanStartup #SoftwareDevelopment #MVP #Agile #ProductManagement #Startups #DevLife #TechTips
&lt;/h1&gt;

</description>
      <category>leanstartup</category>
      <category>productdevelopment</category>
      <category>agile</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Desbloquea el Desarrollo de Software: Los 6 Pilares Fundamentales para Construir Cualquier Aplicación 🚀</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Mon, 18 Aug 2025 02:56:30 +0000</pubDate>
      <link>https://forem.com/joedev090/desbloquea-el-desarrollo-de-software-los-6-pilares-fundamentales-para-construir-cualquier-453o</link>
      <guid>https://forem.com/joedev090/desbloquea-el-desarrollo-de-software-los-6-pilares-fundamentales-para-construir-cualquier-453o</guid>
      <description>&lt;p&gt;Hey Coders!! 👋🏻 &lt;/p&gt;

&lt;p&gt;👉🏻 ¿Alguna vez te has preguntado qué se necesita realmente para construir una aplicación desde cero y hacerla exitosa? &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%2Fxb3ibbo0hod0lrtfr2bo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxb3ibbo0hod0lrtfr2bo.png" alt=" " width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;💡 No es solo escribir código bonito; es un proceso que abarca desde la conceptualización hasta la puesta en marcha. &lt;/p&gt;

&lt;p&gt;Basado en la experiencia y en la observación de proyectos exitosos, he identificado 6 pilares esenciales que te proporcionarán una base sólida para cualquier aventura de desarrollo. &lt;/p&gt;

&lt;p&gt;¡Vamos a explorarlos!&lt;/p&gt;

&lt;p&gt;1 💡 Definición Clara de Requerimientos y Metodologías Ágiles&lt;/p&gt;

&lt;p&gt;Este es el verdadero punto de partida. Antes de siquiera pensar en el lenguaje de programación o la base de datos, necesitas entender exactamente qué problema estás resolviendo y para quién. Sin una visión clara, es como construir una casa sin planos.&lt;/p&gt;

&lt;p&gt;¿Cómo lograrlo? &lt;br&gt;
La clave está en la comunicación constante con los stakeholders (clientes, usuarios finales, equipos de negocio). &lt;br&gt;
Las metodologías ágiles como Scrum y Kanban son tus mejores aliadas aquí. Te permiten:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Desglosar un gran problema en tareas manejables (historias de usuario).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Priorizar qué funcionalidades son las más importantes para entregar valor temprano.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Iterar y adaptarse a los cambios, asegurando que el producto final satisfaga las necesidades reales.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;💡 Visualiza tu Idea: &lt;/p&gt;

&lt;p&gt;El Valor Invaluable del Diseño UX 🎨&lt;br&gt;
Una vez que tienes los requerimientos claros, el siguiente paso lógico es visualizarlos. &lt;br&gt;
Aquí es donde el Diseño de Experiencia de Usuario (UX) brilla. No es solo hacer que algo se vea bonito, sino que sea intuitivo, eficiente y agradable de usar.&lt;/p&gt;

&lt;p&gt;¿Por qué es crucial?&lt;/p&gt;

&lt;p&gt;👉🏻 Mockups y Prototipos: Permiten crear una representación tangible de la aplicación (bocetos, wireframes, prototipos interactivos) antes de escribir una línea de código funcional.&lt;/p&gt;

&lt;p&gt;👉🏻 Feedback Temprano: Puedes presentar estos prototipos a los stakeholders y usuarios potenciales. Recibir feedback en esta etapa es mucho más económico y sencillo de implementar que corregir errores de diseño una vez que el código ya está desarrollado. ¡Evita rehacer trabajo!&lt;/p&gt;

&lt;p&gt;👉🏻 Claridad para el Equipo: Proporciona una guía visual clara para los desarrolladores, asegurando que todos están construyendo la misma visión.&lt;/p&gt;

&lt;p&gt;2 🗄️ Diseño de Bases de Datos Relacionales&lt;br&gt;
Tu aplicación necesitará almacenar datos, y cómo los estructuras es fundamental para su rendimiento y escalabilidad. &lt;br&gt;
Las bases de datos relacionales son el pan de cada día de la mayoría de las aplicaciones web y móviles.&lt;/p&gt;

&lt;p&gt;Puntos clave:&lt;/p&gt;

&lt;p&gt;👉🏻 Modelado de Datos: Entender cómo las tablas se relacionan entre sí. Piensa en claves primarias (identificadores únicos) y claves foráneas (vínculos entre tablas).&lt;/p&gt;

&lt;p&gt;👉🏻 Normalización: Organizar los datos para evitar redundancia y mejorar la integridad. Esto previene inconsistencias y facilita el mantenimiento.&lt;/p&gt;

&lt;p&gt;👉🏻 Optimización de Consultas: Saber cómo escribir consultas eficientes (SQL) es vital para que tu aplicación responda rápidamente.&lt;/p&gt;

&lt;p&gt;👉🏻 ORM (Object-Relational Mapping): Aunque herramientas como Sequelize, SQLAlchemy o Entity Framework te abstraen de SQL, comprender los principios subyacentes de las bases de datos te permitirá depurar y optimizar eficazmente.&lt;/p&gt;

&lt;p&gt;3 🔗 Creación y Consumo de API (Application Programming Interface)&lt;/p&gt;

&lt;p&gt;En el mundo interconectado de hoy, las aplicaciones rara vez viven en aislamiento. Las APIs son el lenguaje universal que les permite "hablar" entre sí.&lt;/p&gt;

&lt;p&gt;¿Qué necesitas saber?&lt;/p&gt;

&lt;p&gt;👉🏻 Protocolo HTTP: La base de la comunicación web (GET, POST, PUT, DELETE).&lt;/p&gt;

&lt;p&gt;👉🏻 Diseño RESTful: Un conjunto de principios para diseñar APIs claras y coherentes.&lt;/p&gt;

&lt;p&gt;👉🏻 Manejo de Solicitudes y Respuestas: Cómo enviar datos (headers, body) y cómo interpretar las respuestas del servidor (códigos de estado, JSON/XML).&lt;/p&gt;

&lt;p&gt;👉🏻 Integración de Servicios Externos: Desde pasarelas de pago (Stripe, PayPal) hasta servicios de mapas (Google Maps) o IA (OpenAI), las APIs te permiten extender funcionalidades sin tener que construirlas desde cero.&lt;/p&gt;

&lt;p&gt;4 🔒 Autenticación y Autorización&lt;br&gt;
La seguridad no es una opción, es una necesidad. &lt;br&gt;
Toda aplicación que maneje datos de usuario o funcionalidades sensibles debe tener un sistema robusto para protegerlos.&lt;/p&gt;

&lt;p&gt;Conceptos esenciales:&lt;/p&gt;

&lt;p&gt;👉🏻 Autenticación: Verificar la identidad de un usuario (por ejemplo, con usuario y contraseña, OAuth, SSO).&lt;/p&gt;

&lt;p&gt;👉🏻 Autorización: Definir qué acciones puede realizar un usuario una vez autenticado (roles, permisos).&lt;/p&gt;

&lt;p&gt;👉🏻 Manejo de Sesiones/Tokens: Cómo mantener la información del usuario logueado de forma segura (JWTs son muy populares).&lt;/p&gt;

&lt;p&gt;👉🏻 Protección de Rutas: Asegurar que solo usuarios autorizados puedan acceder a ciertas partes de tu backend o frontend.&lt;/p&gt;

&lt;p&gt;5 🏗️ Principios de Arquitectura de Software&lt;br&gt;
Escribir código que funcione es una cosa; escribir código que sea fácil de entender, mantener, probar y escalar es otra muy distinta.&lt;br&gt;
Una buena arquitectura es la diferencia entre un proyecto que crece y uno que se convierte en una pesadilla.&lt;/p&gt;

&lt;p&gt;Ideas clave:&lt;/p&gt;

&lt;p&gt;👉🏻 Separación de Responsabilidades: Organiza tu código en módulos lógicos donde cada parte tenga una única razón para cambiar (por ejemplo, "capa de datos", "lógica de negocio", "interfaz de usuario").&lt;/p&gt;

&lt;p&gt;👉🏻 Modularidad: Crear componentes reutilizables e independientes que puedan ser fácilmente intercambiados o actualizados.&lt;/p&gt;

&lt;p&gt;👉🏻 Evitar el Acoplamiento Fuerte: Diseña tus componentes para que dependan lo menos posible entre sí. Esto facilita los cambios y reduce el riesgo de errores.&lt;/p&gt;

&lt;p&gt;👉🏻 Principios SOLID (Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion): &lt;br&gt;
Un conjunto de principios que te guían hacia un diseño de software más robusto y flexible.&lt;/p&gt;

&lt;p&gt;6 🌐 Despliegue y Entorno Productivo&lt;br&gt;
Tu aplicación no existe realmente hasta que está accesible para tus usuarios en internet. Llevar un proyecto a producción es un arte en sí mismo.&lt;/p&gt;

&lt;p&gt;Aspectos a considerar:&lt;/p&gt;

&lt;p&gt;👉🏻 Servidores: Entender qué es un servidor (virtual, físico) y cómo alojar tu aplicación en él.&lt;/p&gt;

&lt;p&gt;👉🏻 Plataformas de Despliegue: Conocer opciones como PaaS (Heroku, Vercel), IaaS (AWS EC2, Google Compute Engine) o Serverless (AWS Lambda, Azure Functions).&lt;/p&gt;

&lt;p&gt;👉🏻 Configuración de Dominio y SSL: Hacer que tu app sea accesible a través de un nombre de dominio amigable y segura con certificados SSL/TLS.&lt;/p&gt;

&lt;p&gt;👉🏻 Variables de Entorno: Gestionar configuraciones sensibles (claves de API, credenciales de DB) de forma segura.&lt;/p&gt;

&lt;p&gt;👉🏻 CI/CD (Integración Continua/Despliegue Continuo): Automatizar el proceso de pruebas y despliegue para lanzar nuevas versiones de forma rápida y confiable.&lt;/p&gt;

&lt;p&gt;👉🏻 Monitoreo y Logs: Saber qué está pasando en tu aplicación en producción y cómo depurar problemas cuando surgen.&lt;/p&gt;

&lt;p&gt;Conclusion:&lt;/p&gt;

&lt;p&gt;Dominar estos seis pilares no solo te convertirá en un mejor desarrollador, sino que te dará la confianza y las herramientas para transformar cualquier idea en una aplicación funcional y exitosa.&lt;/p&gt;

&lt;p&gt;¿Cuál de estos pilares te parece el más crítico o el más desafiante? ¡Me encantaría conocer tu perspectiva y experiencias en los comentarios!&lt;/p&gt;

&lt;p&gt;See you coders!! :)&lt;/p&gt;

&lt;p&gt;Este post es basado en un video que vi por el creador de contenido en youtube #fazt&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%2Fbz3w0ayiifp1ctlj3vjp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbz3w0ayiifp1ctlj3vjp.png" alt=" " width="748" height="498"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=WxUmv1Mk1Nw" rel="noopener noreferrer"&gt;https://www.youtube.com/watch?v=WxUmv1Mk1Nw&lt;/a&gt;&lt;/p&gt;

</description>
      <category>desarrolloweb</category>
      <category>desarrolladordesfotware</category>
      <category>uidesign</category>
      <category>agile</category>
    </item>
    <item>
      <title>Create API with NestJS using TDD approach, part 3!!</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Fri, 08 Aug 2025 19:46:46 +0000</pubDate>
      <link>https://forem.com/joedev090/create-api-with-nestjs-using-tdd-approach-part-3-4j2a</link>
      <guid>https://forem.com/joedev090/create-api-with-nestjs-using-tdd-approach-part-3-4j2a</guid>
      <description>&lt;p&gt;Hey Coders!!!&lt;/p&gt;

&lt;p&gt;Let's continue with the last part of my project on NestJS using TDD approach.&lt;/p&gt;

&lt;p&gt;Remember the core concepts!&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Write a Failing Test:&lt;br&gt;
The first step in the TDD cycle is to write a test for a small piece of functionality that you want to implement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write Minimal Code to Pass the Test:&lt;br&gt;
The next step is to write the minimal amount of code necessary to make the test pass&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactor the Code:&lt;br&gt;
Once the test is passing, the final step is to refactor the code to improve its structure and readability.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This cycle, often referred to as "Red-Green-Refactor," ensures that you always have a working version of your code and that all parts of your codebase are covered by tests.&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%2F1vqftdfqctu59rs6g8ln.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vqftdfqctu59rs6g8ln.png" alt=" " width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We have to add the removed functionality, so let's write our tests for the service in &lt;br&gt;
src/properties/&lt;strong&gt;test&lt;/strong&gt;/properties.service.spec.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// remove
  describe('remove', () =&amp;gt; {
    it('should remove a property', async () =&amp;gt; {
      const mockProperty = {
        id: 1,
        name: 'Test Property',
        description: 'Test Description',
        location: 'Test Location',
        imageUrl: 'http://example.com/image.jpg',
        unitsAvailable: 5,
        hasWifi: true,
        hasLaundry: false,
      };

      // Mockeamos la búsqueda de la propiedad
      jest.spyOn(repository, 'findOne').mockResolvedValue(mockProperty);
      // Mockeamos la eliminación
      jest.spyOn(repository, 'remove').mockResolvedValue(mockProperty);

      const result = await service.remove(1);

      expect(result).toEqual(mockProperty);
      expect(repository.findOne).toHaveBeenCalledWith({ where: { id: 1 } });
      expect(repository.remove).toHaveBeenCalledWith(mockProperty);
    });

    it('should throw NotFoundException if property does not exist', async () =&amp;gt; {
      // Mockeamos que la propiedad no se encuentra
      jest.spyOn(repository, 'findOne').mockResolvedValue(null);

      await expect(service.remove(999)).rejects.toThrow(NotFoundException);
      expect(repository.findOne).toHaveBeenCalledWith({ where: { id: 999 } });
      expect(repository.remove).not.toHaveBeenCalled();
    });
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Using the Tdd approach, run the test with &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We will check some issues, we are missing the function, that is the next part will be adding in properties.service.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async remove(id: number): Promise&amp;lt;Property&amp;gt; {
        const propertyToRemove = await this.propertiesRepository.findOne({ where: { id } });
        if (!propertyToRemove) {
            throw new NotFoundException(`Property with ID ${id} not found.`);
        }
        await this.propertiesRepository.remove(propertyToRemove);
        return propertyToRemove;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After this we run the tests again with npm run test.&lt;/p&gt;

&lt;p&gt;We will have one issue, we are missing the remove part in the mockRepository on the beforeEach part.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;beforeEach(async () =&amp;gt; {
    const mockRepository = {
      find: jest.fn().mockResolvedValue([]),
      findOne: jest.fn().mockImplementation((options) =&amp;gt;
        options.where.id === 999
          ? Promise.resolve(null)
          : Promise.resolve({
              id: 1,
              name: 'Test Property',
              description: 'Test Description',
              location: 'Test Location',
              imageUrl: 'http://example.com/image.jpg',
              unitsAvailable: 5,
              hasWifi: true,
              hasLaundry: false,
            }),
      ),
      create: jest.fn().mockImplementation((dto) =&amp;gt; dto),
      save: jest
        .fn()
        .mockImplementation((property) =&amp;gt;
          Promise.resolve({ id: 1, ...property }),
        ),
      remove: jest.fn().mockImplementation((property) =&amp;gt;
        Promise.resolve(property),
      ),
    };

    const module: TestingModule = await Test.createTestingModule({
      providers: [
        PropertiesService,
        {
          provide: getRepositoryToken(Property),
          useValue: mockRepository,
        },
      ],
    }).compile();

    service = module.get&amp;lt;PropertiesService&amp;gt;(PropertiesService);
    repository = module.get&amp;lt;Repository&amp;lt;Property&amp;gt;&amp;gt;(getRepositoryToken(Property));
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then run the tests&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&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%2F44gxm577pccnmtdho17o.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F44gxm577pccnmtdho17o.png" alt=" " width="800" height="232"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wuhuuuu!!! we have only to add the controller part.&lt;/p&gt;

&lt;p&gt;Let's work on this, the next part is creating the tests for the controller&lt;/p&gt;

&lt;p&gt;In src/properties/&lt;strong&gt;test&lt;/strong&gt;/properties.controller.spec.ts&lt;/p&gt;

&lt;p&gt;We will add this code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe('remove', () =&amp;gt; {
      it('should remove a property', async () =&amp;gt; {
          const mockProperty = {
              id: 1,
              name: 'Test Property',
              description: 'Test Description',
              location: 'Test Location',
              imageUrl: 'http://example.com/image.jpg',
              unitsAvailable: 5,
              hasWifi: true,
              hasLaundry: false,
          };

          // Mockeamos la función remove del servicio
          (service.remove as jest.Mock).mockResolvedValue(mockProperty);

          const result = await controller.remove(1);

          expect(result).toEqual(mockProperty);
          expect(service.remove).toHaveBeenCalledWith(1);
      });
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We learned from the previous function, so let's add the part in the mockRepository in the same file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;remove: jest.fn().mockImplementation((id: number) =&amp;gt;
        Promise.resolve({ id }),
      ),
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We know if we run the testing, it will fail. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We are missing the remove function in&lt;/p&gt;

&lt;p&gt;src/properties/properties.controller.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Delete(':id')
  async remove(@Param('id') id: number): Promise&amp;lt;Property&amp;gt; {
    return this.propertiesService.remove(id);
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then after running npm run test&lt;/p&gt;

&lt;p&gt;All test are passed&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%2F3vd9xjhr72fom54ww2t4.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3vd9xjhr72fom54ww2t4.png" alt=" " width="800" height="167"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Mmmmmm&lt;/p&gt;

&lt;p&gt;We are missing our last part, adding swagger to see our project like this:&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%2F67w0qcg7kz1hsrr0nrfl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F67w0qcg7kz1hsrr0nrfl.png" alt=" " width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;that is one task for you...&lt;/p&gt;

&lt;p&gt;I will share the final version on my github of the project and also the third part with each step of this tutorial.&lt;/p&gt;

&lt;p&gt;I enjoyed a lot to do this tutorial, the TDD approach is a way of programming and it has a lot of benefits (also some cons), but it is one of the best way to have your project always ready to run with no problems!!!&lt;/p&gt;

&lt;p&gt;See you Coders, if this post is useful for you, please like and share it! :)&lt;/p&gt;

&lt;p&gt;Github Last Part:&lt;br&gt;
&lt;a href="https://github.com/joeaspiazudeveloper/nestjs-houselocation-tdd/tree/final-part-removeRest" rel="noopener noreferrer"&gt;https://github.com/joeaspiazudeveloper/nestjs-houselocation-tdd/tree/final-part-removeRest&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Github Completed CRUD properties with Swagger&lt;br&gt;
&lt;a href="https://github.com/joeaspiazudeveloper/properties-api-nestjs" rel="noopener noreferrer"&gt;https://github.com/joeaspiazudeveloper/properties-api-nestjs&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nestjs</category>
      <category>backenddevelopment</category>
      <category>tdd</category>
      <category>node</category>
    </item>
    <item>
      <title>Create API with NestJS using TDD approach Part two</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Fri, 01 Aug 2025 17:31:38 +0000</pubDate>
      <link>https://forem.com/joedev090/create-api-with-nestjs-using-tdd-approach-part-two-45hn</link>
      <guid>https://forem.com/joedev090/create-api-with-nestjs-using-tdd-approach-part-two-45hn</guid>
      <description>&lt;p&gt;Hey Coders :)&lt;/p&gt;

&lt;p&gt;We continue with the second part of this project using NestJS.&lt;/p&gt;

&lt;p&gt;These are some concepts we were checking in the first part.&lt;/p&gt;

&lt;p&gt;Core Concepts of TDD&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Write a Failing Test:&lt;br&gt;
The first step in the TDD cycle is to write a test for a small piece of functionality that you want to implement&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write Minimal Code to Pass the Test:&lt;br&gt;
The next step is to write the minimal amount of code necessary to make the test pass&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactor the Code: &lt;br&gt;
Once the test is passing, the final step is to refactor the code to improve its structure and readability.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This cycle, often referred to as "Red-Green-Refactor," ensures that you always have a working version of your code and that all parts of your codebase are covered by tests.&lt;/p&gt;

&lt;p&gt;Sooo, let's create the next test case for create property.&lt;/p&gt;

&lt;p&gt;In properties/&lt;strong&gt;test&lt;/strong&gt;/properties.service.spec.ts add this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe('create', () =&amp;gt; {
    it('should successfully insert a property', async () =&amp;gt; {
      const createPropertyDto: CreatePropertyDto = {
        name: 'New Property',
        description: 'New Description',
        location: 'New Location',
        imageUrl: 'http://example.com/image.jpg',
        unitsAvailable: 5,
        hasWifi: true,
        hasLaundry: false,
      };

      const result = await service.create(createPropertyDto);
      expect(result).toBeDefined();
      expect(result.name).toEqual(createPropertyDto.name);
      expect(repository.save).toHaveBeenCalledWith(createPropertyDto);
    });
  });


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should see some errors, no worries!&lt;/p&gt;

&lt;p&gt;We have to create a dto for createPropertyDTO, so let's do that.&lt;/p&gt;

&lt;p&gt;First install this dependency with this command:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i class-validator&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Create a new file in  dto/create-property-dto.ts and add this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { IsString, IsNumber, IsBoolean } from 'class-validator';

export class CreatePropertyDto {
  @IsString()
  name: string;

  @IsString()
  description: string;

  @IsString()
  location: string;

  @IsString()
  imageUrl: string;

  @IsNumber()
  unitsAvailable: number;

  @IsBoolean()
  hasWifi: boolean;

  @IsBoolean()
  hasLaundry: boolean;
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Save the changes and run the tests with&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And you will have the error about the create function in the service. That's fine!!&lt;/p&gt;

&lt;p&gt;Let's go to properties.service.ts and add this code at the end:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;create(createPropertyDto: CreatePropertyDto): Promise&amp;lt;Property&amp;gt; {
        const newProperty = this.propertiesRepository.create(createPropertyDto);
        return this.propertiesRepository.save(newProperty);
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then let's run the tests again&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I can see other error, and it was about the mockImplementation of findOne, let's add this code in properties.service.spec.ts, replace the beforeEach&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;beforeEach(async () =&amp;gt; {
    const mockRepository = {
      find: jest.fn().mockResolvedValue([]),
      findOne: jest.fn().mockImplementation((options) =&amp;gt;
        options.where.id === 999
          ? Promise.resolve(null)
          : Promise.resolve({
              id: 1,
              name: 'Test Property',
              description: 'Test Description',
              location: 'Test Location',
              imageUrl: 'http://example.com/image.jpg',
              unitsAvailable: 5,
              hasWifi: true,
              hasLaundry: false,
            }),
      ),
      create: jest.fn().mockImplementation((dto) =&amp;gt; dto),
      save: jest
        .fn()
        .mockImplementation((property) =&amp;gt;
          Promise.resolve({ id: 1, ...property }),
        ),
    };

    const module: TestingModule = await Test.createTestingModule({
      providers: [
        PropertiesService,
        {
          provide: getRepositoryToken(Property),
          useValue: mockRepository,
        },
      ],
    }).compile();

    service = module.get&amp;lt;PropertiesService&amp;gt;(PropertiesService);
    repository = module.get&amp;lt;Repository&amp;lt;Property&amp;gt;&amp;gt;(getRepositoryToken(Property));
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally if you run again the tests, it should be passed!&lt;/p&gt;

&lt;p&gt;The next step is to implement the Update funcionality...&lt;/p&gt;

&lt;p&gt;As we expect, create the test for the update in src/properties/&lt;strong&gt;test&lt;/strong&gt;/properties.service.spec.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// describe the update
  describe('update', () =&amp;gt; {
    it('should update a property', async () =&amp;gt; {
      const updatePropertyDto: UpdatePropertyDto = {
        name: 'Updated Property',
      };

      const mockProperty = new Property();
      mockProperty.id = 1;
      mockProperty.name = 'Acme Fresh Start Housing';

      jest.spyOn(repository, 'findOne').mockResolvedValue(mockProperty);
      jest.spyOn(repository, 'save').mockResolvedValue({ ...mockProperty, ...updatePropertyDto });

      const result = await service.update(1, updatePropertyDto);
      expect(result.name).toEqual(updatePropertyDto.name);
    });
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we run the command &lt;br&gt;
&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And it will fails because of the missing function.&lt;/p&gt;

&lt;p&gt;Then let's create the function update in the service, but before doing it, we have to install a dependency and create a new file.&lt;/p&gt;

&lt;p&gt;Run the command:&lt;br&gt;
&lt;code&gt;npm i @nestjs/mapped-types&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;After this let's create a new dtos &lt;br&gt;
src/properties/dto/update-property.dto.ts with this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { PartialType } from '@nestjs/mapped-types';
import { CreatePropertyDto } from './create-property.dto';

export class UpdatePropertyDto extends PartialType(CreatePropertyDto) {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the final step for update, let's add the function in the service src/properties/properties.service.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async update(id: number, updatePropertyDto: UpdatePropertyDto): Promise&amp;lt;Property&amp;gt; {
        const property = await this.findOne(id);
        Object.assign(property, updatePropertyDto);
        return this.propertiesRepository.save(property);
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also let's add this function at the top&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;async findOne(id: number): Promise&amp;lt;Property&amp;gt; {
        const property = await this.propertiesRepository.findOne({ where: { id } });
        if (!property) {
        throw new NotFoundException(`Property with ID ${id} not found.`);
        }
        return property;
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The FindOne is used in the update function.&lt;/p&gt;

&lt;p&gt;Finally let's run the tests and it should pass.&lt;/p&gt;

&lt;p&gt;After these steps we have implemented the create and update functionality for the service in our nestJS project.&lt;/p&gt;

&lt;p&gt;The next step will have similar approach, creating first the tests and then create the function, but we will focus on the controller.&lt;/p&gt;

&lt;p&gt;Go to src/properties/&lt;strong&gt;test&lt;/strong&gt;/properties.controller.spec.ts&lt;/p&gt;

&lt;p&gt;In this case we will add the tests for creating property&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe('create', () =&amp;gt; {
    it('should create a property', async () =&amp;gt; {
      const createPropertyDto: CreatePropertyDto = {
        name: 'New Property',
        description: 'New Description',
        location: 'New Location',
        imageUrl: 'http://example.com/image.jpg',
        unitsAvailable: 5,
        hasWifi: true,
        hasLaundry: false,

      };

      const result = await controller.create(createPropertyDto);
      expect(result).toBeDefined();
      expect(result.name).toEqual(createPropertyDto.name);
      expect(service.create).toHaveBeenCalledWith(createPropertyDto);
    })
  })
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also we have to add some additional code in this file:&lt;/p&gt;

&lt;p&gt;The main describe is edited with findAll and create in the mockPropertiesService&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;describe('PropertiesController', () =&amp;gt; {
  let controller: PropertiesController;
  let service: PropertiesService;

  beforeEach(async () =&amp;gt; {
    const mockPropertiesService = {
      findAll: jest.fn().mockResolvedValue([]),
      create: jest.fn().mockImplementation((createPropertyDto) =&amp;gt;
        Promise.resolve({ id: Date.now(), ...createPropertyDto })
      ),
    };

    const module: TestingModule = await Test.createTestingModule({
      controllers: [PropertiesController],
      providers: [
        {
          provide: PropertiesService,
          useValue: mockPropertiesService, // Use the mock service with the create method
        },
      ],
    }).compile();

    controller = module.get&amp;lt;PropertiesController&amp;gt;(PropertiesController);
    service = module.get&amp;lt;PropertiesService&amp;gt;(PropertiesService);
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you can see any other issue, feel free to check the repository code on github link at the end of the post.&lt;/p&gt;

&lt;p&gt;As part of TDD we run the tests and it will fail.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We are missing the functionality of create and findOne&lt;/p&gt;

&lt;p&gt;Let's add the next code in &lt;br&gt;
src/properties/properties.controller.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Get(':id')
    findOne(@Param('id') id: number): Promise&amp;lt;Property&amp;gt; {
        return this.propertiesService.findOne(id);
    }

    @Post()
    create(@Body() createPropertyDto: CreatePropertyDto): Promise&amp;lt;Property&amp;gt; {
        return this.propertiesService.create(createPropertyDto);
    }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Please the imports necessary to prevent errors, Here we have the import section of this file&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Body, Controller, Get, Param, Post } from '@nestjs/common';
import { PropertiesService } from './properties.service';
import { Property } from './entities/property.entity';
import { CreatePropertyDto } from './dto/create-property.dto';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After adding the functionality in property service of create and findOne&lt;/p&gt;

&lt;p&gt;We will run the tests&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;and Yeyyyy!! it should work passed all.&lt;/p&gt;

&lt;p&gt;Let's apply this same approach with the update function to the controller.&lt;/p&gt;

&lt;p&gt;First let's create the minimal tests in properties.controller.spec.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// update
  describe('update', () =&amp;gt; {
    it('should update a property', async () =&amp;gt; {
      const updatePropertyDto: UpdatePropertyDto = {
        name: 'Updated Property',
      };

      const result = await controller.update(1, updatePropertyDto);
      expect(result).toBeDefined();
      expect(result.id).toEqual(1);
      expect(result.name).toEqual(updatePropertyDto.name);
      expect(service.update).toHaveBeenCalledWith(1, updatePropertyDto);
    });
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Also we have to add in the beforeEach the update parameter in the mockedPropertiesService, adding this code&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;beforeEach(async () =&amp;gt; {
    const mockPropertiesService = {
      findAll: jest.fn().mockResolvedValue([]),
      create: jest.fn().mockImplementation((createPropertyDto) =&amp;gt;
        Promise.resolve({ id: Date.now(), ...createPropertyDto })
      ),
      update: jest.fn().mockImplementation((id: number, updatePropertyDto: UpdatePropertyDto) =&amp;gt;
        Promise.resolve({ id, ...updatePropertyDto }),
      ),
    };
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Run the tests, &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And then we have to add in the controller the update function.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;@Put(':id')
  async update(
    @Param('id') id: number,
    @Body() updatePropertyDto: UpdatePropertyDto,
  ): Promise&amp;lt;Property&amp;gt; {
    return this.propertiesService.update(id, updatePropertyDto);
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Don't forget to add the necessary imports and if you have some issue, please check the repository on my github.&lt;/p&gt;

&lt;p&gt;After we add the update funcion, we should run the tests again&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;And there you go&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%2Fqcaig8qtgum1sd3i54xz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqcaig8qtgum1sd3i54xz.png" alt=" " width="800" height="225"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You should see a screen similar to this!!&lt;/p&gt;

&lt;p&gt;It has been a large article, I know, it could be tedious at the beginning but Believe me!! Let's program with this approach and you have the advantage as software engineer!!&lt;/p&gt;

&lt;p&gt;See you coders.&lt;/p&gt;

&lt;p&gt;This is the link for the repositoy of this second part!!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joeaspiazudeveloper/nestjs-houselocation-tdd/tree/second-part-implementRestFuncTdd" rel="noopener noreferrer"&gt;https://github.com/joeaspiazudeveloper/nestjs-houselocation-tdd/tree/second-part-implementRestFuncTdd&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And keep in touch, because in the last part we will finish adding the remove functionality and also we will learn how to add swagger in our nestjs app!!&lt;/p&gt;

&lt;p&gt;Chaooooo coders!&lt;/p&gt;

</description>
      <category>tdd</category>
      <category>nestjs</category>
      <category>typescript</category>
      <category>backend</category>
    </item>
    <item>
      <title>Create API with NestJS with TDD approach part one</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Mon, 28 Jul 2025 18:34:25 +0000</pubDate>
      <link>https://forem.com/joedev090/create-api-with-nestjs-with-tdd-for-official-first-housing-location-angular-app-3ppj</link>
      <guid>https://forem.com/joedev090/create-api-with-nestjs-with-tdd-for-official-first-housing-location-angular-app-3ppj</guid>
      <description>&lt;p&gt;Hey Coders!!!&lt;/p&gt;

&lt;p&gt;A lot of time ago, here we have a new article with an incredible approach from testing.&lt;/p&gt;

&lt;p&gt;Let's begin!!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Testing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Testing is a crucial part of the software development process that ensures your code works as intended. It helps catch bugs early, reduces development costs, and improves software quality. There are two main types of testing:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Manual Testing&lt;/strong&gt;: This involves manually executing test cases without the use of automation tools. It can be time-consuming and is often used for exploratory testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated Testing&lt;/strong&gt;: This involves writing scripts or using tools to automatically execute tests. Automated tests can be run frequently and consistently, making them ideal for regression testing.&lt;/p&gt;

&lt;p&gt;The next step is introducing to Unit Testing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is Unit Testing??&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Unit testing is a level of software testing where individual components of a software are tested. &lt;/p&gt;

&lt;p&gt;The purpose is to validate that each unit of the software performs as designed. A unit is the smallest testable part of any software. It usually has one or a few inputs and usually a single output.&lt;/p&gt;

&lt;p&gt;And now the best part...&lt;/p&gt;

&lt;p&gt;You will know how powerful is this concept and I can say this way of programming!!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Introduction to TDD&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Test-Driven Development (TDD) is a software development process that relies on the repetition of a very short development cycle.&lt;/p&gt;

&lt;p&gt;The cycle involves writing a test for a new function before writing the function itself. &lt;/p&gt;

&lt;p&gt;The goal of TDD is to write clean code that works, and it achieves this by ensuring that the code is thoroughly tested.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The TDD Cycle&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The TDD cycle can be described as follows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Write a Failing Test: Start by writing a test for a small piece of functionality that you want to implement. This test should fail initially because the functionality isn't implemented yet.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Write Minimal Code to Pass the Test: Write the minimal amount of code necessary to make the test pass. The goal here is not to write perfect code but to get the test to pass.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Refactor the Code: Once the test is passing, refactor the code to improve its structure and readability. Ensure that the tests still pass after refactoring.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&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%2Fvwb8twqaw35lkte8c6iv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvwb8twqaw35lkte8c6iv.png" alt=" " width="800" height="531"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This cycle is often referred to as &lt;/p&gt;

&lt;p&gt;"Red-Green-Refactor":&lt;/p&gt;

&lt;p&gt;Red: The test fails.&lt;br&gt;
Green: The test passes.&lt;br&gt;
Refactor: Improve the code without breaking the tests.&lt;/p&gt;

&lt;p&gt;I know that the theory sometimes is boring, but it is necessary to have the conext of our next project!!&lt;/p&gt;

&lt;p&gt;Let's begin with the practice....&lt;/p&gt;

&lt;p&gt;Creating a Web API crud with  Nestjs using TDD way.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install NestJS(mandatory have installed latest version of nodejs)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;npm install -g @nestjs/cli&lt;/code&gt; &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create a new Nestjs project
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nest new properties-api
cd properties-api

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Then we will install the dependencies for TypeORM and SQLite &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;code&gt;npm install @nestjs/typeorm typeorm sqlite3&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The next step is configured TypeORM in your app.module.ts file to use SQLite
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Module } from '@nestjs/common';
import { TypeOrmModule } from '@nestjs/typeorm';

@Module({
  imports: [
    TypeOrmModule.forRoot({
      type: 'sqlite',
      database: 'db.sqlite',
      entities: [__dirname + '/**/*.entity{.ts,.js}'],
      synchronize: true,
    }),
  ],
})
export class AppModule {}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Then use the Nest CLI to generate a module, service, and controller for managing properties.
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;nest generate module properties
nest generate service properties
nest generate controller properties

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Go ahead, the important part is beginning!!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Create the property entity in properties/entities/property.entity.ts
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// src/properties/entities/property.entity.ts
import { Entity, Column, PrimaryGeneratedColumn } from 'typeorm';

@Entity()
export class Property {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  description: string;

  @Column()
  location: string;

  @Column()
  imageUrl: string;

  @Column()
  unitsAvailable: number;

  @Column({ default: false })
  hasWifi: boolean;

  @Column({ default: false })
  hasLaundry: boolean;
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;In this case, I will create a test folder for the Test file of the service.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can do it with these lines in your terminal.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir -p src/properties/__test__
touch src/properties/__test__/properties.service.spec.ts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And the magin begins now!!&lt;/p&gt;

&lt;p&gt;Let's write a failing Test for findAll in&lt;br&gt;
src/properties/&lt;strong&gt;test&lt;/strong&gt;/properties.service.spec.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Test, TestingModule } from '@nestjs/testing';
import { PropertiesService } from '../properties.service';
import { Property } from '../entities/property.entity';
import { getRepositoryToken } from '@nestjs/typeorm';
import { Repository } from 'typeorm';

describe('PropertiesService', () =&amp;gt; {
  let service: PropertiesService;
  let repository: Repository&amp;lt;Property&amp;gt;;

  beforeEach(async () =&amp;gt; {
    const mockRepository = {
      find: jest.fn().mockResolvedValue([]),
    };

    const module: TestingModule = await Test.createTestingModule({
      providers: [
        PropertiesService,
        {
          provide: getRepositoryToken(Property),
          useValue: mockRepository,
        },
      ],
    }).compile();

    service = module.get&amp;lt;PropertiesService&amp;gt;(PropertiesService);
    repository = module.get&amp;lt;Repository&amp;lt;Property&amp;gt;&amp;gt;(getRepositoryToken(Property));
  });

  it('should be defined', () =&amp;gt; {
    expect(service).toBeDefined();
  });

  describe('findAll', () =&amp;gt; {
    it('should return an array of properties', async () =&amp;gt; {
      const result = await service.findAll();
      expect(result).toEqual([]);
    });
  });
});

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We are creating firstly the test before create the findAll function in the service and then run&lt;br&gt;
&lt;/p&gt;

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

&lt;/div&gt;



&lt;p&gt;This test will fail, and the reason is because we need to create the function in the service.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;So Implement the findAll Method in the Service:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Injectable } from '@nestjs/common';
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Property } from './entities/property.entity';

@Injectable()
export class PropertiesService {
  constructor(
    @InjectRepository(Property)
    private propertiesRepository: Repository&amp;lt;Property&amp;gt;,
  ) {}

  findAll(): Promise&amp;lt;Property[]&amp;gt; {
    return this.propertiesRepository.find();
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is the way we should do using TDD.&lt;br&gt;
First we implement a basic using testing case and then we implement the function or the functionality!!!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Let's repeat the process for the Property controller&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Create the test file&lt;/p&gt;

&lt;p&gt;&lt;code&gt;touch src/properties/__test__/properties.controller.spec.ts&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Write a failing testing for the controller
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Test, TestingModule } from '@nestjs/testing';
import { PropertiesController } from '../properties.controller';
import { PropertiesService } from '../properties.service';

describe('PropertiesController', () =&amp;gt; {
  let controller: PropertiesController;

  beforeEach(async () =&amp;gt; {
    const module: TestingModule = await Test.createTestingModule({
      controllers: [PropertiesController],
      providers: [
        {
          provide: PropertiesService,
          useValue: {
            findAll: jest.fn().mockResolvedValue([]),
          },
        },
      ],
    }).compile();

    controller = module.get&amp;lt;PropertiesController&amp;gt;(PropertiesController);
  });

  it('should be defined', () =&amp;gt; {
    expect(controller).toBeDefined();
  });

  describe('findAll', () =&amp;gt; {
    it('should return an array of properties', async () =&amp;gt; {
      const result = await controller.findAll();
      expect(result).toEqual([]);
    });
  });
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Then execute:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;It will fail!!&lt;/p&gt;

&lt;p&gt;And then, we implement the controller function in src/properties/properties.controller.ts&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Controller, Get } from '@nestjs/common';
import { PropertiesService } from './properties.service';
import { Property } from './entities/property.entity';

@Controller('properties')
export class PropertiesController {
  constructor(private readonly propertiesService: PropertiesService) {}

  @Get()
  findAll(): Promise&amp;lt;Property[]&amp;gt; {
    return this.propertiesService.findAll();
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After these steps we can repeat the testing with&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run test&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
It should pass all tests&lt;/p&gt;

&lt;p&gt;And be sure to have the properties.module.ts with this code:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import { Module } from '@nestjs/common';
import { PropertiesService } from './properties.service';
import { PropertiesController } from './properties.controller';
import { TypeOrmModule } from '@nestjs/typeorm';
import { Property } from './entities/property.entity';

@Module({
  imports: [TypeOrmModule.forFeature([Property])],
  providers: [PropertiesService],
  controllers: [PropertiesController]
})
export class PropertiesModule {}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finally start your nestJs Application &lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm run start&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
And there you go....&lt;/p&gt;

&lt;p&gt;The first part of our NestJs app using TDD.&lt;/p&gt;

&lt;p&gt;You can test this project with Postman or in your browser.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;http://localhost:3000/properties&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;You can see an empty [] array!!&lt;/p&gt;

&lt;p&gt;Keep in touch to see the next part of this project, I will add the github repository where you can see the entire code I explained.&lt;/p&gt;

&lt;p&gt;Let me know if you have any suggestions or questions, please!!&lt;/p&gt;

&lt;p&gt;Keep coding! :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/joeaspiazudeveloper/nestjs-houselocation-tdd" rel="noopener noreferrer"&gt;https://github.com/joeaspiazudeveloper/nestjs-houselocation-tdd&lt;/a&gt;&lt;/p&gt;

</description>
      <category>nestjs</category>
      <category>webapi</category>
      <category>backend</category>
      <category>tdd</category>
    </item>
    <item>
      <title>10 Errores mas comunes en React para desarrolladores junior y semi-senior</title>
      <dc:creator>joedev090</dc:creator>
      <pubDate>Tue, 20 May 2025 18:33:35 +0000</pubDate>
      <link>https://forem.com/joedev090/10-errores-mas-comunes-en-react-para-desarrolladores-junior-y-semi-senior-2l8f</link>
      <guid>https://forem.com/joedev090/10-errores-mas-comunes-en-react-para-desarrolladores-junior-y-semi-senior-2l8f</guid>
      <description>&lt;p&gt;Holaaa Coders!! A los tiempos... :)&lt;/p&gt;

&lt;p&gt;Esta vez les traigo un post interesante!!&lt;/p&gt;

&lt;p&gt;Muchos desarrolladores con experiencia pensamos que estamos libres de cometer errores comunes en el mundo de la programacion.&lt;/p&gt;

&lt;p&gt;React es una libreria UI poderosa y popular para crear interfaces de usuario, veamos que errores nos pueden ayudar a evitar problemas de performance, mantenimiento y experiencia de usuario.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣. Olvidar usar keys en las listas&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Al renderizar listas, los keys ayudan a React a identificar que elementos han cambiado, mejorando el rendimiento y evitando comportamientos inesperados en la interfaz de usuario.&lt;/p&gt;

&lt;p&gt;❌ Incorrecto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{items.map((item) =&amp;gt; &amp;lt;ItemComponent item={item} /&amp;gt;)}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Correcto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{items.map((item) =&amp;gt; &amp;lt;ItemComponent key={item.id} item={item} /&amp;gt;)}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;💡 Por que es importante?&lt;br&gt;
React necesita claves para actualizar el DOM de manera eficiente cuando los elementos cambian. &lt;br&gt;
Usar claves únicas y estables (como IDs) asegura una reconciliación adecuada.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣. Usar mucho useState en vez de declarar variables normalmente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El estado debe almacenar solo valores esenciales. Si un valor puede derivarse de las props o del estado existente, evita almacenarlo por separado.&lt;/p&gt;

&lt;p&gt;❌ Incorrecto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const [fullName, setFullName] = useState(&lt;/code&gt;${firstName} ${lastName}&lt;code&gt;);&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Correcto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const fullName = ${firstName} ${lastName}&lt;/code&gt;;&lt;/p&gt;

&lt;p&gt;💡 Por que es importante? &lt;br&gt;
Esto reduce las renderizaciones innecesarios y mantiene el estado mínimo y predecible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣. No liberar los effects en UseEffect()&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Olvidar limpiar los effects puede llevar a fugas de memoria.&lt;/p&gt;

&lt;p&gt;❌ Incorrecto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;useEffect(() =&amp;gt; {&lt;br&gt;
  window.addEventListener("resize", handleResize);&lt;br&gt;
}, []);&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Correcto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;useEffect(() =&amp;gt; {&lt;br&gt;
  window.addEventListener("resize", handleResize);&lt;br&gt;
  return () =&amp;gt; window.removeEventListener("resize", handleResize);&lt;br&gt;
}, []);&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;💡 Por que es importante?&lt;br&gt;
previene que los listener de eventos innecesarios se acumulen con el tiempo.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣. Usar Funciones Inline en JSX Innecesariamente&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Las funciones inline causan re-renders innecesarios porque se crea una nueva función en cada renderizado.&lt;/p&gt;

&lt;p&gt;❌ Incorrecto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;button onClick={() =&amp;gt; handleClick(id)}&amp;gt;Click me&amp;lt;/button&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Correcto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const handleClickWithId = useCallback(() =&amp;gt; handleClick(id), [id]);&lt;br&gt;
&amp;lt;button onClick={handleClickWithId}&amp;gt;Click me&amp;lt;/button&amp;gt;&lt;br&gt;
&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;💡 Por que es importante?&lt;br&gt;
useCallback asegura que la función solo se vuelva a crear cuando las dependencias cambien, reduciendo la sobrecarga de rendimiento.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5️⃣. No usar lazy loading para componentes grandes&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;El lazy loading mejora los tiempos de carga inicial al dividir el código.&lt;/p&gt;

&lt;p&gt;❌ Incorrecto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import HeavyComponent from "./HeavyComponent";&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;✅ Correcto&lt;/p&gt;

&lt;p&gt;&lt;code&gt;const HeavyComponent = React.lazy(() =&amp;gt; import("./HeavyComponent"));&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;💡 Por que es importante?&lt;/p&gt;

&lt;p&gt;React.lazy carga los componentes solo cuando son necesarios, reduciendo el tamaño inicial del paquete de JavaScript.&lt;/p&gt;

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

&lt;p&gt;Evitar estos errores comunes en React puede marcar una gran diferencia en el rendimiento y la mantenibilidad de tus aplicaciones. &lt;/p&gt;

&lt;p&gt;Al seguir las mejores prácticas, como usar claves únicas en listas, evitar el uso excesivo de estado, limpiar efectos en useEffect, evitar funciones inline innecesarias y utilizar carga perezosa para componentes grandes, puedes mejorar significativamente la calidad de tu código.&lt;/p&gt;

&lt;p&gt;Esta es la primera parte de los errores a evitar en React.&lt;/p&gt;

&lt;p&gt;No te pierdas la segunda parte!!&lt;/p&gt;

&lt;p&gt;Espero te haya gustado este post, no olvides darle like o compartirlo!&lt;/p&gt;

&lt;p&gt;Hasta pronto Coders!&lt;/p&gt;

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