<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://eduklein.com.br/feed.xml" rel="self" type="application/atom+xml" /><link href="https://eduklein.com.br/" rel="alternate" type="text/html" /><updated>2026-07-12T22:06:45+00:00</updated><id>https://eduklein.com.br/feed.xml</id><title type="html">Edu Klein</title><subtitle>Edu Klein&apos;s thoughts about leadership, management, software development and random stuff</subtitle><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><entry><title type="html">The Escalation Trap</title><link href="https://eduklein.com.br/escalation-trap/" rel="alternate" type="text/html" title="The Escalation Trap" /><published>2025-11-12T00:00:00+00:00</published><updated>2025-11-12T00:00:00+00:00</updated><id>https://eduklein.com.br/escalation-trap</id><content type="html" xml:base="https://eduklein.com.br/escalation-trap/"><![CDATA[<p>Have you ever noticed how a small disagreement can spiral into a massive conflict? A minor miscommunication escalates into heated arguments? These are examples of the <strong>escalation trap</strong>, a concept rooted in systems theory that shows how seemingly minor actions can trigger reinforcing feedback loops, amplifying problems far beyond their original magnitude.</p>

<p>In this post, I explore the escalation trap and how de-escalation — a critical soft skill often overlooked in professional environments — can break these destructive cycles.</p>

<h2 id="what-is-the-escalation-trap">What is the Escalation Trap?</h2>

<p>The escalation trap is a reinforcing feedback loop where one party’s action triggers a reaction from another party, which in turn prompts a stronger counter-action, creating a self-amplifying cycle of conflict and tension. Unlike balancing feedback loops that tend toward equilibrium, escalation loops push systems toward extreme states.</p>

<p>In <em>Thinking in Systems</em>, Donella Meadows explores how systems are governed by feedback loops. The escalation trap is a specific type of <strong>reinforcing feedback loop</strong> (also called a “vicious cycle”) where each action amplifies the system’s tendency toward conflict. The more a person escalates, the more another one feels justified in reacting back, and the cycle accelerates, leading to outcomes neither party originally intended.</p>

<p>A good example of quick escalation is a traffic conflict. One driver unintentionally cuts off another, who gets angry and honks and yells. If both parties become angry and allow themselves to escalate, the conflict may quickly lead to physical threats and violence. On the other hand, the ability to de-escalate may quickly resolve the issue, allowing everyone to move on in a matter of seconds.</p>

<p>Extreme examples include arms races by nuclear powers and quick escalation of violence between religious groups or soccer fans.</p>

<h3 id="a-simple-business-example">A Simple Business Example</h3>

<p>Imagine two engineering teams in a tech company: the backend team and the frontend team.</p>

<ul>
  <li><strong>Day 1</strong>: The frontend team reports a critical bug in the API response format. The backend team, feeling blamed, responds defensively: “The API is correct. The frontend team isn’t using it properly.”</li>
  <li><strong>Day 3</strong>: The frontend team, frustrated by the dismissal, reacts by escalating the issue to their engineering manager and labeling it as a “critical blocker.”</li>
  <li><strong>Day 5</strong>: The backend team’s manager intervenes, escalates back by questioning the frontend team’s technical competence in a larger meeting.</li>
  <li><strong>Day 7</strong>: The conflict has now involved senior leadership, created tension between teams, slowed down product development, and damaged working relationships.</li>
</ul>

<p>What started as a technical issue evolved into an organizational conflict through escalation. Neither team is malicious; both believed they were defending their interests. Yet the system’s structure trapped both teams to an outcome worse for everyone.</p>

<p>This reflects what Meadows describes as a fundamental principle of systems: the structure of the system determines its behavior. The escalation trap emerges from a system where actions trigger defensive counter-actions, creating reinforcing loops.</p>

<h2 id="the-cost-of-escalation">The Cost of Escalation</h2>

<p>Escalation may get expensive, both emotionally and economically:</p>

<ul>
  <li><strong>Emotional toll</strong>: Stress, anxiety, and reduced morale spread through teams</li>
  <li><strong>Productivity loss</strong>: Energy spent on conflict diverts from productive work</li>
  <li><strong>Relationship damage</strong>: Trust erodes, making future collaboration harder</li>
  <li><strong>Poor decision-making</strong>: When threatened, people make defensive rather than optimal choices</li>
</ul>

<h2 id="de-escalation-the-way-out">De-escalation: The Way Out</h2>

<p>The antidote to the escalation trap is <strong>de-escalation</strong> — the intentional action of reducing tension and breaking the reinforcing feedback loop. Rather than matching escalation with escalation, de-escalation introduces a <strong>balancing feedback loop</strong> that reduces conflict and creates space for resolution.</p>

<p>De-escalation is not a weakness. It’s an important skill and an strategic choice to interrupt the negative spiral and create conditions where problems can be solved effectively.</p>

<p>De-escalation operates by changing how you respond to provocative actions. Instead of triggering the next loop in the escalation cycle, you can respond with:</p>

<ul>
  <li><strong>Calm language and tone</strong>: Signals that you’re not a threat</li>
  <li><strong>Empathy and understanding</strong>: Shows you recognize the other party’s concerns</li>
  <li><strong>Acknowledgment</strong>: Validates their experience without necessarily agreeing</li>
  <li><strong>Collaborative framing</strong>: Shifts from adversarial (“you vs. me”) to cooperative (“us vs. the problem”)</li>
  <li><strong>Clear boundaries</strong>: Maintains respect without aggressive defensiveness</li>
</ul>

<h3 id="traffic-conflit-resolution">Traffic conflit resolution</h3>

<p>Let’s further explore the traffic conflit I previously mentioned. Consider both scenarios:</p>

<p><strong>Without de-escalation:</strong></p>
<ul>
  <li>Driver A cuts off Driver B</li>
  <li>Driver B honks angrily</li>
  <li>Driver A, feeling attacked, slows down intentionally</li>
  <li>Driver B becomes furious and makes an obscene gesture</li>
  <li>Driver A, now enraged, escalates further</li>
  <li>Both drivers are now in a dangerous situation, risking accidents, injuries, or worse</li>
</ul>

<p>This is the escalation trap. Two reasonable people became dangerous through escalation.</p>

<p><strong>With de-escalation:</strong></p>
<ul>
  <li>Driver A cuts off Driver B</li>
  <li>Driver B, though frustrated, takes a breath and assumes an honest mistake</li>
  <li>Driver B doesn’t honk; instead, gives a brief, friendly wave</li>
  <li>Driver A, recognizing their mistake, appreciates the grace and waves back</li>
  <li>Both drivers move on, and everyone arrives safely</li>
</ul>

<p>In the second scenario, Driver B made a strategic choice to de-escalate. By not matching Driver A’s error with aggressive honking, Driver B broke the escalation loop. The result? Safety, reduced stress, and everyone moving forward.</p>

<h3 id="backend-and-frontend-teams-de-escalation">Backend and frontend teams’ de-escalation</h3>

<p>Now, let’s also return to our earlier example of the backend and frontend teams, but imagine a de-escalated version:</p>

<ul>
  <li><strong>Day 1</strong>: The frontend team reports a critical bug in the API response format. Instead of becoming defensive, the backend team responds: “Thanks for reporting this. Let’s schedule a quick call to understand what you’re seeing.”</li>
  <li><strong>Day 2</strong>: Both teams meet. The backend team listens carefully to the frontend team’s concern. They discover the issue stems from a misalignment in expectations, not malice. Both teams contributed to the confusion.</li>
  <li><strong>Day 3</strong>: Together, they create a solution: updated documentation, a quick API adjustment, and agreed-upon communication protocols for future issues.</li>
  <li><strong>Result</strong>: The problem is solved faster. Relationships strengthen. Trust is built. Both teams learned something. The organization benefits from improved collaboration.</li>
</ul>

<h2 id="developing-your-de-escalation-skills">Developing Your De-escalation Skills</h2>

<p>De-escalation is a learnable skill. Here are practical ways to develop it:</p>

<ul>
  <li><strong>Develop Self-Awareness</strong>: Before you can de-escalate others, learn to recognize your own escalation triggers.</li>
  <li><strong>Practice Pause and Breathe</strong>: The most powerful de-escalation tool is the pause between stimulus and response.</li>
  <li><strong>Listen for the Underlying Concern</strong>: Escalation often masks deeper concerns: fear, feeling unheard, loss of control.</li>
  <li><strong>Assume Positive Intent</strong>: Most escalation happens when people assume the worst of each other. Always assume the best intentions from other people.</li>
  <li><strong>Use Calm, Cooperative Language</strong>: Words shape people’s behavior. Choose them wisely.</li>
  <li><strong>Validate Before Disagreeing</strong>: When people feel heard, they’re less likely to escalate.</li>
  <li><strong>Seek Common Ground</strong>: Escalation thrives on division. De-escalation thrives on cooperation.</li>
  <li><strong>Know When to Step Back</strong>: Sometimes, the best de-escalation is recognizing when continuing a conversation will only escalate further.</li>
  <li><strong>Build a Culture of Psychological Safety</strong>: De-escalation works best in environments where people feel safe being vulnerable.</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>The escalation trap is a fundamental pattern in systems: small actions trigger reinforcing loops that amplify conflict and drive systems toward destructive extremes.</p>

<p>De-escalation is the lever that interrupts this trap. By choosing calm over defensiveness, empathy over blame, and collaboration over adversarialism, you don’t just resolve immediate conflicts—you transform relationships.</p>

<p>Businesses are typically high-pressure environments focused on delivering results and meeting ambitious, often uncertain deadlines. Management deliberately introduce some level of conflict and pressure to drive performance. In this scenario, avoiding the escalation trap is no easy task. It demands both skill and intentional action.</p>

<p><strong>Leaders who understand de-escalation become invaluable. They transform potential crises into opportunities for strengthening teams and improving outcomes.</strong></p>

<p>The next time you’re in a conflict — whether with a teammate, customer, or leader — pause and ask yourself: “Will my next action escalate or de-escalate this situation?” Choose wisely.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="Leadership" /><category term="People Skills" /><category term="Systems Thinking" /><category term="Systems Theory" /><category term="Conflict Resolution" /><category term="Soft Skills" /><summary type="html"><![CDATA[Exploring the escalation trap through systems thinking and discovering how de-escalation is a powerful skill for resolving conflicts in business and life.]]></summary></entry><entry><title type="html">Problem-Solving in Software Engineering</title><link href="https://eduklein.com.br/problem-solving-swe/" rel="alternate" type="text/html" title="Problem-Solving in Software Engineering" /><published>2025-10-26T00:00:00+00:00</published><updated>2025-10-26T00:00:00+00:00</updated><id>https://eduklein.com.br/problem-solving-swe</id><content type="html" xml:base="https://eduklein.com.br/problem-solving-swe/"><![CDATA[<p>Problem-solving is at the heart of <a href="/swe">software engineering</a>. Whether debugging a production issue, designing a new system, or optimizing performance, the ability to approach challenges methodically and effectively distinguishes exceptional engineers.</p>

<p>In tech companies, where complexity scales rapidly and novel challenges emerge daily, strong problem-solving skills are non-negotiable. Yet, for many engineers, it is challenging to define what “good” problem-solving looks like or how to develop these capabilities systematically. Without a clear framework, it’s difficult to assess growth, identify development areas, or set meaningful career goals.</p>

<p>In this post, I share my perspective on the varying levels of problem-solving competency for software engineers within tech companies. By breaking down this skill into actionable levels — from beginner to expert — I aim to provide a framework that <a href="/mgmt/sem/sem-role">software engineering managers</a> (SEMs) can use to assess and develop their team’s problem-solving capabilities.</p>

<p>This is similar to the work I’ve previously done for <a href="/effective-communication-swe">Effective Communication</a>, which I’ll compile with other skills at some point in the future into a guide for software engineering competencies.</p>

<p>This structure can be integrated into career ladders, supporting personal development and career progression. It can help engineers identify growth opportunities and set clear goals, fostering an environment where challenges are approached confidently and systematically, and product development thrives.</p>

<h2 id="problem-solving-expectations-and-levels">Problem-Solving Expectations and Levels</h2>

<p>To make problem-solving more tangible, I will describe it through five dimensions:</p>

<ol>
  <li><strong>Framework and Tool Proficiency</strong>: Masters a variety of frameworks, tools, and libraries commonly used to solve engineering problems, enabling efficient and effective solutions.</li>
  <li><strong>Coding and Design Craftsmanship</strong>: Demonstrates the ability to craft elegant, efficient, and maintainable code solutions through the thoughtful application of algorithms, data structures, and design patterns.</li>
  <li><strong>Architectural Understanding</strong>: Develops architectural solutions that address complex system requirements and integration challenges, ensuring scalability, reliability, and maintainability.</li>
  <li><strong>Analytical Thinking</strong>: Breaks down complex problems into smaller, manageable parts and systematically approaches their resolution using appropriate strategies.</li>
  <li><strong>Continuous Learning and Practice</strong>: Engages in continuous learning to acquire new problem-solving methods and improve existing skills through regular practice and exploration of emerging technologies.</li>
</ol>

<p>I try to establish adequate expectations for each level and provide evidence and examples.</p>

<h3 id="beginner">Beginner</h3>

<ul>
  <li><strong>Framework and Tool Proficiency</strong>: Understands basic functionality and can utilize frameworks and tools with guidance.</li>
  <li><strong>Coding and Design Craftsmanship</strong>: Demonstrates awareness of fundamental algorithms and data structures. Writes functional code that follows team standards and applies simple design patterns in straightforward scenarios.</li>
  <li><strong>Architectural Understanding</strong>: Has a basic grasp of software architecture, focusing mainly on individual components rather than the system as a whole. Follows architectural guidance and design decisions made by more experienced engineers.</li>
  <li><strong>Analytical Thinking</strong>: Breaks down simple problems and identifies potential solutions with some guidance.</li>
  <li><strong>Continuous Learning and Practice</strong>: Actively seeks out learning resources and begins incorporating them into daily practice with regular mentorship.</li>
</ul>

<h4 id="evidence">Evidence</h4>

<ul>
  <li>Completes tasks with low assistance</li>
  <li>Proactively seeks support in the face of obstacles</li>
  <li>Asks questions to clarify problem requirements and solution approaches</li>
  <li>Attends and participates in training sessions and workshops on frameworks and tools</li>
  <li>Engages in regular code reviews and refinement sessions to learn from more experienced engineers</li>
  <li>Approaches feedback received in code reviews with an open mindset</li>
</ul>

<h4 id="example">Example</h4>

<ul>
  <li>An engineer who regularly consults with peers or a mentor while working on projects, asking for advice on which design patterns and tools to apply, and uses tutorials to understand the basic functionality of frameworks and design patterns.</li>
</ul>

<h3 id="competent">Competent</h3>

<ul>
  <li><strong>Framework and Tool Proficiency</strong>: Comfortably uses common frameworks and tools to solve routine problems efficiently.</li>
  <li><strong>Coding and Design Craftsmanship</strong>: Crafts readable, modular code for moderately complex projects by thoughtfully selecting appropriate data structures, algorithms, and design patterns while ensuring adherence to team conventions.</li>
  <li><strong>Architectural Understanding</strong>: Understands basic architectural principles and can contribute to discussions on system components and their interactions.</li>
  <li><strong>Analytical Thinking</strong>: Analyzes problems effectively, proposing logical solutions and alternatives.</li>
  <li><strong>Continuous Learning and Practice</strong>: Regularly updates skills with new techniques and frameworks, integrating them into work processes.</li>
</ul>

<h4 id="evidence-1">Evidence</h4>

<ul>
  <li>Independently solves problems using standard frameworks and tools</li>
  <li>Successfully applies design patterns and can effectively explain their benefits</li>
  <li>Actively participates in team discussions about architectural decisions</li>
  <li>Provides logical reasoning for chosen solutions to problems</li>
  <li>Enrolls in courses or reads books on software development topics</li>
</ul>

<h4 id="example-1">Example</h4>

<ul>
  <li>An engineer who efficiently utilizes existing frameworks to build new features, chooses design patterns that optimize performance, and contributes meaningfully during team architectural discussions.</li>
</ul>

<h3 id="proficient">Proficient</h3>

<ul>
  <li><strong>Framework and Tool Proficiency</strong>: Proficiently navigates and adapts frameworks and tools to address complex problems. Identifies gaps in current tools and introduces improvements when necessary.</li>
  <li><strong>Coding and Design Craftsmanship</strong>: Chooses appropriate design patterns, data structures, and algorithms, and proactively refactors existing codebases to improve maintainability and performance.</li>
  <li><strong>Architectural Understanding</strong>: Contributes to the design of system architectures and can foresee the implications of architectural decisions.</li>
  <li><strong>Analytical Thinking</strong>: Proactively identifies potential problems and implements effective solutions before issues arise.</li>
  <li><strong>Continuous Learning and Practice</strong>: Actively seeks out cutting-edge practices, integrating them into existing workflows and sharing knowledge with peers.</li>
</ul>

<h4 id="evidence-2">Evidence</h4>

<ul>
  <li>Leads projects that require the use of advanced frameworks and custom tools</li>
  <li>Conducts workshops on design patterns and tools and their real-world applications</li>
  <li>Proposes architectural changes that enhance system scalability and reliability</li>
  <li>Conducts thorough analysis and presents findings to influence strategic decisions</li>
  <li>Creates custom tools or frameworks that are adopted across the organization</li>
  <li>Contributes to technical blogs or speaks at conferences to share knowledge</li>
  <li>Identifies architectural issues (e.g., scaling challenges) and suggests improvements</li>
</ul>

<h4 id="example-2">Example</h4>

<ul>
  <li>An engineer who anticipates scaling issues, designs robust architectures, and implements advanced design patterns to optimize the system’s performance while mentoring others on these approaches.</li>
</ul>

<h3 id="expert">Expert</h3>

<ul>
  <li><strong>Framework and Tool Proficiency</strong>: Innovates and customizes frameworks and tools to create unique solutions for unprecedented challenges.</li>
  <li><strong>Coding and Design Craftsmanship</strong>: Masters design patterns, mentors their strategic application, anticipates maintainability challenges, and shapes engineering culture around algorithmic thinking and sustainable design.</li>
  <li><strong>Architectural Understanding</strong>: Architects complex, scalable, reliable, and maintainable systems, making strategic decisions that align with long-term company goals.</li>
  <li><strong>Analytical Thinking</strong>: Identifies systemic issues and implements strategic solutions that have a positive impact on product direction, overall efficiency, and user experience.</li>
  <li><strong>Continuous Learning and Practice</strong>: Leads the adoption of emerging technologies and practices, fostering a culture of innovation and excellence.</li>
</ul>

<h4 id="evidence-3">Evidence</h4>

<ul>
  <li>Innovates and customizes frameworks and tools to create unique solutions for unprecedented challenges</li>
  <li>Mentors engineers on using design patterns to solve complex problems</li>
  <li>Develops and implements long-term architectural strategies</li>
  <li>Leads cross-functional teams to solve high-impact problems</li>
  <li>Publishes articles and papers or contributes to open-source projects</li>
  <li>Sets technical direction that influences the entire organization and industry</li>
</ul>

<h4 id="example-3">Example</h4>

<ul>
  <li>An engineer who architects technology strategies for the company, designing innovative solutions that set industry standards, while mentoring teams to elevate their problem-solving capabilities.</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>Problem-solving forms the foundation of effective software engineering. By focusing on these five dimensions, we can create a structured approach to developing these competencies within our teams.</p>

<p>Setting clear expectations for each level of problem-solving proficiency allows <a href="/mgmt/sem/sem-role">SEMs</a> to guide their teams toward continuous improvement. Like building a utility belt of tools and techniques, developing problem-solving skills is an ongoing journey that requires deliberate practice and regular refinement.</p>

<p>This framework provides engineers with a roadmap for growth, helping them identify where they are, where they want to go, and what skills they need to develop along the way.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="Technical Skills" /><category term="Performance Management" /><category term="Problem-Solving" /><category term="SWE Career" /><category term="Performance Evaluation" /><summary type="html"><![CDATA[Understanding problem-solving expectations and levels to build a robust engineering toolkit and advance your career.]]></summary></entry><entry><title type="html">The traits and pitfalls in Software Engineering careers</title><link href="https://eduklein.com.br/swe-traits-pitfalls/" rel="alternate" type="text/html" title="The traits and pitfalls in Software Engineering careers" /><published>2025-08-04T00:00:00+00:00</published><updated>2025-08-04T00:00:00+00:00</updated><id>https://eduklein.com.br/swe-traits-pitfalls</id><content type="html" xml:base="https://eduklein.com.br/swe-traits-pitfalls/"><![CDATA[<p>Over the years, I’ve seen software engineers grow from new hires to trusted technical leaders, but I have also witnessed many competent engineers stall out in their careers, stuck in patterns and behaviors that hold them back.</p>

<p>What separates those who thrive from those who plateau isn’t just technical skill, but a combination of habits and subtle pitfalls that shape their professional journey.</p>

<p>As individuals, we need to be intentional about our career growth, and as leaders, we must provide our teams with clear paths to progression. Yet we often lack a practical model or reference point for this development.</p>

<p>The following lists represent my personal perspective on what truly matters in the software engineering career journey. If you’re a Software Engineering Manager, I hope these traits and pitfalls help you assess your team during performance reviews and guide their skill development. If you’re a software engineer, you might recognize patterns in your own work and discover concrete ways to advance your career.</p>

<p>These are the key signals I look for, and the common traps I’ve seen catch even the most talented professionals.</p>

<h2 id="software-engineer">Software Engineer</h2>

<p>A competent Software Engineer independently delivers well-structured solutions to defined problems, collaborates effectively with teammates, and demonstrates solid technical judgment within their area of responsibility.</p>

<h3 id="traits">Traits</h3>

<p>The typical characteristics of a software engineer.</p>

<ul>
  <li><strong>Proficient Coder</strong>: Writes clean, efficient, and testable code with minimal supervision.</li>
  <li><strong>Debugging Skills</strong>: Independently troubleshoots issues across the stack.</li>
  <li><strong>Basic System Design</strong>: Understands trade-offs in small-scale systems (e.g., database choices, API contracts).</li>
  <li><strong>Tool Mastery</strong>: Comfortable with team workflows (version control, CI/CD, debugging tools).</li>
  <li><strong>Team Player</strong>: Actively participates in code reviews, standups, and retrospectives.</li>
  <li><strong>Task Ownership</strong>: Delivers medium-complexity features end-to-end.</li>
</ul>

<h3 id="pitfalls">Pitfalls</h3>

<p>Common pitfalls that prevent a junior engineer from becoming a competent software engineer.</p>

<p>Technical Skills</p>
<ul>
  <li><strong>Shallow code reuse</strong>: Reusing code without understanding why it works, leading to fragile solutions.</li>
  <li><strong>Over-engineering</strong>: Adding unnecessary complexity to prove skills.</li>
  <li><strong>Testing neglect</strong>: Writing code without tests, assuming “it works on my machine”.</li>
  <li><strong>Debugging dependency</strong>: Relying too heavily on seniors to solve tricky bugs instead of deep-diving.</li>
</ul>

<p>Soft skills</p>
<ul>
  <li><strong>Silent struggling</strong>: Wasting time stuck on problems instead of asking for help early.</li>
  <li><strong>Code review passivity</strong>: Approving PRs superficially, like “LGTM”, or not defending feedback constructively.</li>
  <li><strong>Task focus</strong>: Focusing only on assigned tasks without understanding the bigger picture.</li>
  <li><strong>Process subversion</strong>: Dismissing rituals, such as standups and retrospectives, as “overhead”, instead of leveraging them.</li>
  <li><strong>Comfort zone stagnation</strong>: Only volunteering for tasks in known areas.</li>
</ul>

<h2 id="senior-software-engineer">Senior Software Engineer</h2>

<p>A Senior Software Engineer leads complex technical initiatives with minimal guidance, makes architectural decisions that balance technical and business needs, and actively mentors others while serving as a trusted technical authority within their team.</p>

<h3 id="traits-1">Traits</h3>

<p>The typical characteristics of a senior software engineer.</p>

<ul>
  <li><strong>Technical Excellence</strong>: Deep expertise in their domain (coding, debugging, system design).</li>
  <li><strong>Ownership</strong>: Accountable for projects end-to-end, including failures and maintenance.</li>
  <li><strong>Problem-Solving</strong>: Breaks down ambiguous problems into actionable solutions.</li>
  <li><strong>Mentorship</strong>: Guides junior engineers and fosters team growth.</li>
  <li><strong>Communication</strong>: Articulates trade-offs clearly to both technical and non-technical stakeholders.</li>
  <li><strong>Autonomy</strong>: Solves complex problems independently but knows when to escalate.</li>
  <li><strong>Code Quality Advocate</strong>: Ensures maintainability, testing, and scalability within their team.</li>
  <li><strong>Collaborative Leadership</strong>: Coordinates work across teammates (e.g., reviews, design discussions).</li>
  <li><strong>Tactical Decision-Making</strong>: Balances short-term deliverables with long-term tech debt.</li>
  <li><strong>Domain Specialization</strong>: Deep knowledge of their team’s systems and product area.</li>
</ul>

<h3 id="pitfalls-1">Pitfalls</h3>

<p>Common pitfalls that prevent a software engineer from becoming a senior software engineer.</p>

<p>Technical Skills</p>
<ul>
  <li><strong>Ignoring system design</strong>: Focusing solely on code without understanding broader architecture.</li>
  <li><strong>Prioritizing speed over quality</strong>: Sloppy code, tech debt, or ignoring long-term impact.</li>
  <li><strong>Stagnating technically</strong>: Not learning new tools, patterns, or domain knowledge.</li>
  <li><strong>Staying in the execution zone</strong>: Only completing tasks without designing solutions or questioning requirements.</li>
</ul>

<p>Soft skills</p>
<ul>
  <li><strong>Focusing only on technical skills</strong>: Neglecting leadership, communication, and mentorship.</li>
  <li><strong>Underestimating communication</strong>: Not documenting work, explaining trade-offs, or aligning stakeholders.</li>
  <li><strong>Avoiding collaboration</strong>: Working in isolation instead of influencing cross-team initiatives.</li>
  <li><strong>Neglecting mentorship</strong>: Not helping junior engineers grow or share knowledge.</li>
  <li><strong>Resisting feedback</strong>: Defensiveness instead of treating feedback as a growth opportunity.</li>
  <li><strong>Not thinking proactively</strong>: Waiting for direction instead of spotting and solving problems early.</li>
  <li><strong>Avoiding ownership</strong>: Not taking responsibility for projects end-to-end, including failures.</li>
</ul>

<h2 id="staff-software-engineer">Staff Software Engineer</h2>

<p>A Staff Software Engineer shapes technical strategy across teams, solves ambiguous problems with organization-wide impact, and influences engineering culture through technical leadership that extends beyond their immediate scope of work.</p>

<h3 id="traits-2">Traits</h3>

<p>The typical characteristics of a staff software engineer.</p>

<ul>
  <li><strong>Strategic Vision</strong>: Aligns technical work with business goals.</li>
  <li><strong>Influence Without Authority</strong>: Drives consensus across teams/orgs on high-impact initiatives.</li>
  <li><strong>System-Level Thinking</strong>: Designs architectures that span multiple services/teams.</li>
  <li><strong>Ambiguity Navigation</strong>: Thrives in unstructured problems with no clear “right” answer.</li>
  <li><strong>Breadth Over Depth</strong>: Connects dots across domains (e.g., product, infra, security).</li>
</ul>

<h3 id="pitfalls-2">Pitfalls</h3>

<p>Common pitfalls that prevent an engineer from becoming a staff software engineer.</p>

<p>Technical Skills</p>
<ul>
  <li><strong>Not thinking strategically</strong>: Failing to align work with business goals or long-term impact.</li>
  <li><strong>Over-specializing</strong>: Lacking breadth in architecture, product, or domain knowledge.</li>
  <li><strong>Prioritizing speed over quality</strong>: Sacrificing scalability, maintainability, or long-term value.</li>
</ul>

<p>Soft Skills</p>
<ul>
  <li><strong>Poor stakeholder management</strong>: Inability to articulate trade-offs.</li>
  <li><strong>Waiting for permission</strong>: Not taking initiative to drive projects or solve high-impact problems.</li>
  <li><strong>Failing to delegate</strong>: Micromanaging instead of empowering others.</li>
  <li><strong>Not adapting to ambiguity</strong>: Struggling with unstructured problems or unclear requirements.</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>Career growth in software engineering is rarely about a single breakthrough moment. It is about consistently developing the right traits while avoiding the pitfalls that trap even talented engineers.</p>

<p>Take a moment to reflect on where you are in your journey. Which skill are you actively cultivating and what may be holding you back? The difference between thriving and plateauing often comes down to this kind of honest self-assessment and deliberate action.</p>

<p>Whether you’re a junior engineer looking to make your first step up or a senior engineer aspiring to Staff level influence, the path forward is clearer when you know what to build and what to avoid.</p>

<p>Your career is yours to shape. Start with one trait to strengthen or one pitfall to address, and build from there.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="SWE Management" /><category term="Personal Development" /><category term="Performance Management" /><category term="SWE Career" /><category term="Performance Evaluation" /><summary type="html"><![CDATA[What separates engineers who thrive from those who plateau? The key traits to develop and common pitfalls to avoid at each career level.]]></summary></entry><entry><title type="html">Effective Communication in Software Engineering</title><link href="https://eduklein.com.br/effective-communication-swe/" rel="alternate" type="text/html" title="Effective Communication in Software Engineering" /><published>2024-10-04T00:00:00+00:00</published><updated>2024-10-04T00:00:00+00:00</updated><id>https://eduklein.com.br/effective-communication-swe</id><content type="html" xml:base="https://eduklein.com.br/effective-communication-swe/"><![CDATA[<p>Effective communication is vital for successful product development teams in tech companies, including software engineering teams. As software engineers (SWEs) and <a href="/mgmt/sem/sem-role">software engineering managers</a> (SEMs), our focus often leans heavily on technical excellence and delivery processes. Yet, without clear communication, great ideas and initiatives can fail.</p>

<p>In tech companies, where cross-functional collaboration is crucial, the ability to convey complex ideas clearly is not just a nice-to-have — it’s essential. Effective communication bridges gaps between leadership, product and growth teams, partners, and clients, ensuring alignment and shared understanding. However, many teams struggle to articulate their thoughts or adapt their language to diverse audiences, leading to misunderstandings and inefficiencies.</p>

<p>In this post, I share my perspective on the varying levels of communication skills for SWEs within tech companies. By breaking down the competency of effective communication into actionable levels — from beginner to expert — I aim to provide a framework that SEMs can use to assess and develop their team’s communication skills.</p>

<p>This structure can also be integrated into career ladders, supporting personal development and career progression. It can help SWEs identify growth opportunities and set clear goals, fostering an environment where communication flows freely, and product development thrives.</p>

<h2 id="effective-communication-expectations-and-levels">Effective Communication Expectations and Levels</h2>

<p>To make effective communication more tangible, I will describe it through four dimensions:</p>

<ol>
  <li><strong>Empathy and Perspective-Taking</strong>: Understands and appreciates others’ feelings and viewpoints. Empathizes with others to better understand and address their concerns.</li>
  <li><strong>Active Listening</strong>: Fully concentrates on and understands what is being said. Acknowledges the speaker and gives feedback to show understanding.</li>
  <li><strong>Clarity</strong>: Expresses ideas in a straightforward and clear way. Uses precise words and logical sentences. Avoids jargon to minimize misunderstandings.</li>
  <li><strong>Adaptability</strong>: Adjusts communication style for different audiences. Modifies language and tone to ensure the message resonates.</li>
</ol>

<p>I try to establish adequate expectations for each level and provide evidence and examples.</p>

<h3 id="beginner">Beginner</h3>

<ul>
  <li><strong>Empathy and Perspective-Taking</strong>: Demonstrates basic awareness of the need to understand and consider others’ viewpoints. Begins to ask questions to clarify others’ perspectives.</li>
  <li><strong>Active Listening</strong>: Listens to others but occasionally interrupts or misses key points.</li>
  <li><strong>Clarity</strong>: Communicates basic ideas clearly but may struggle with complex topics. Uses jargon without ensuring others understand.</li>
  <li><strong>Adaptability</strong>: Tends to use the same communication style regardless of the audience and may need guidance to adjust language for different stakeholders.</li>
</ul>

<h4 id="evidence">Evidence</h4>

<ul>
  <li>Listens attentively during team meetings and one-on-ones</li>
  <li>Asks clarifying questions when unsure about tasks or requirements</li>
  <li>Communicates project status and blockers to immediate team members</li>
  <li>Uses basic technical terminology correctly in team discussions</li>
  <li>Writes clear documentation for their code and processes</li>
</ul>

<h4 id="example">Example</h4>

<ul>
  <li>An engineer who effectively explains their work to colleagues, using simple language and checking for understanding through questioning.</li>
</ul>

<h3 id="competent">Competent</h3>

<ul>
  <li><strong>Empathy and Perspective-Taking</strong>: Regularly attempts to understand others’ perspectives and asks clarifying questions to ensure they grasp the other person’s viewpoint.</li>
  <li><strong>Active Listening</strong>: Demonstrates consistent active listening by paraphrasing and summarizing others’ points.</li>
  <li><strong>Clarity</strong>: Communicates more complex ideas clearly and tailors messages to the audience.</li>
  <li><strong>Adaptability</strong>: Adjusts communication style for different audiences but may need support to fully align with stakeholders’ needs or preferences.</li>
</ul>

<h4 id="evidence-1">Evidence</h4>

<ul>
  <li>Actively participates in team discussions and contributes ideas</li>
  <li>Facilitates productive team meetings and discussions</li>
  <li>Adapts communication style when speaking with non-technical teammates</li>
  <li>Provides regular, unprompted updates on project progress</li>
  <li>Explains technical concepts to junior team members effectively</li>
  <li>Prepares and delivers presentations and demos on their work</li>
  <li>Writes comprehensive technical documents and proposals</li>
</ul>

<h4 id="example-1">Example</h4>

<ul>
  <li>An engineer who leads team meetings and technical discussions, as well as ensures all participants understand the key points by summarizing and asking for feedback.</li>
</ul>

<h3 id="proficient">Proficient</h3>

<ul>
  <li><strong>Empathy and Perspective-Taking</strong>: Consistently considers and integrates multiple perspectives into communication. Demonstrates empathy in discussions and decision-making.</li>
  <li><strong>Active Listening</strong>: Engages in active listening as a natural part of communication. Frequently verifies mutual understanding and encourages others to express their views.</li>
  <li><strong>Clarity</strong>: Communicates complex technical ideas clearly and effectively, adapting language and style to suit diverse audiences. Regularly ensures mutual understanding.</li>
  <li><strong>Adaptability</strong>: Flexibly adjusts communication style based on audience feedback and context. Proactively seeks to build a common vocabulary where necessary.</li>
</ul>

<h4 id="evidence-2">Evidence</h4>

<ul>
  <li>Communicates complex technical ideas to both technical and non-technical audiences</li>
  <li>Negotiates effectively with leadership and other stakeholders</li>
  <li>Presents confidently to larger groups, including leadership and cross-functional teams</li>
  <li>Proactively addresses potential miscommunications or conflicts within the team</li>
</ul>

<h4 id="example-2">Example</h4>

<ul>
  <li>An engineer who facilitates cross-functional meetings, including leadership, using clear and concise language to ensure all stakeholders understand the discussion.</li>
</ul>

<h3 id="expert">Expert</h3>

<ul>
  <li><strong>Empathy and Perspective-Taking</strong>: Intuitively understands and anticipates others’ perspectives and needs. Guides conversations to foster understanding and collaboration.</li>
  <li><strong>Active Listening</strong>: Exemplifies active listening, creating an environment where others feel heard and valued. Facilitates discussions, ensuring all voices are included and understood.</li>
  <li><strong>Clarity</strong>: Articulates complex ideas with exceptional clarity and precision across diverse audiences. Coaches others in effective communication strategies.</li>
  <li><strong>Adaptability</strong>: Seamlessly adapts communication style to suit any audience, situation, or context. Establishes and promotes effective communication norms within teams and across the organization.</li>
</ul>

<h4 id="evidence-3">Evidence</h4>

<ul>
  <li>Develops and implements communication strategies for large-scale projects</li>
  <li>Represents the engineering team in high-level discussions with executives and external partners</li>
  <li>Mediates complex discussions and conflicts across multiple teams</li>
  <li>Delivers compelling presentations at company-wide events or conferences</li>
  <li>Creates and maintains a shared technical vocabulary across the organization</li>
  <li>Writes influential articles or blog posts that enhance the company’s reputation in the tech community</li>
  <li>Coaches other leaders on effective communication techniques</li>
  <li>Establishes communication best practices and guidelines for the entire engineering organization</li>
</ul>

<h4 id="example-3">Example</h4>

<ul>
  <li>An engineer who leads initiatives across the company, ensuring all stakeholders have a common understanding.</li>
</ul>

<h2 id="conclusion">Conclusion</h2>

<p>Effective communication is a multifaceted skill that is crucial for the success of tech teams. By focusing on those four dimensions, we can create a structured approach to developing these competencies within our teams.</p>

<p>Setting clear expectations for each level of communication proficiency allows <a href="/mgmt/sem/sem-role">SEMs</a> to guide their teams toward continuous improvement.</p>

<p>This framework provides engineers with a roadmap for growth, helping them identify where they are, where they want to go, and what skills they need to develop along the way.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="People Skills" /><category term="Performance Management" /><category term="Communication" /><category term="SWE Career" /><category term="Performance Evaluation" /><summary type="html"><![CDATA[Understanding communication expectations and levels to enhance team communication and collaboration.]]></summary></entry><entry><title type="html">The Ivy Lee Method for Managing Priorities</title><link href="https://eduklein.com.br/ivy-lee-method/" rel="alternate" type="text/html" title="The Ivy Lee Method for Managing Priorities" /><published>2024-07-15T00:00:00+00:00</published><updated>2024-07-15T00:00:00+00:00</updated><id>https://eduklein.com.br/ivy-lee-method</id><content type="html" xml:base="https://eduklein.com.br/ivy-lee-method/"><![CDATA[<p>The Ivy Lee method is a classic productivity method popularized by <a href="https://en.wikipedia.org/wiki/Charles_M._Schwab">Charles M. Schwab</a>, an American steel magnate who supposedly sought <a href="https://en.wikipedia.org/wiki/Ivy_Lee">Ivy Lee</a>’s advice in 1918. Ivy Lee taught this method to Charles Schwab and his employees at Bethlehem Steel Corporation. Under Schwab’s leadership, the company became the second-largest steel maker in the USA.</p>

<p>It is said that Lee asked Schwab to send him a check for whatever he thought the advice was worth. After three months, Schwab was so impressed by the results that he sent Lee a check for USD 25,000, equivalent to several hundred thousand dollars nowadays, highlighting the importance of Lee’s advice.</p>

<h2 id="the-ivy-lee-method">The Ivy Lee Method</h2>

<p>Here’s the straightforward method Ivy Lee suggested:</p>

<ol>
  <li><strong>At the end of each day, write down the six most important tasks you need to accomplish the next day.</strong></li>
  <li><strong>Prioritize those tasks in order of importance.</strong></li>
  <li><strong>When you arrive the next day, concentrate only on the first task. Work on it until finished before moving on to the second task.</strong></li>
  <li><strong>Approach the rest of your list in the same fashion. At the end of the day, move any unfinished tasks to a new list of six tasks for the following day.</strong></li>
  <li><strong>Repeat this process every day.</strong></li>
</ol>

<p>What I would like to highlight from the method:</p>

<ul>
  <li>Its simplicity is outstanding. It is quite simple to get started and continue using.</li>
  <li>The method runs counter to the idea of multitasking, which is scientifically recognized as detrimental to productivity. Multi-tasking causes us to make more mistakes, retain less information, and spend time in context switching.</li>
</ul>

<h2 id="prioritizing-your-six-tasks-with-the-eisenhower-matrix">Prioritizing your six tasks with the Eisenhower Matrix</h2>

<p>Modern productivity advice suggests using the <a href="/eisenhower-matrix">Eisenhower Matrix</a> to help you prioritize the six most important tasks. I find this idea really useful; I’m a true believer in the Eisenhower Matrix paradigm.</p>

<p>I’d guess Ivy Lee taught Schwab and his team how to effectively prioritize those six tasks to make that big amount of money, but that lesson was probably lost in history.</p>

<p>Equivalent in structure, you could prioritize the six most important tasks following other prioritization systems, such as the Value vs. Effort matrix, 1-3-5 rule, 3-3-3 method, etc.</p>

<p>Following the Eisenhower Matrix system, it is advised to:</p>

<ul>
  <li>Choose the six items from quadrants 1 (Urgent and important), 2 (Not Urgent but important), and 3 (Urgent but not important) of the matrix. Always avoid quadrant 4 (Not urgent and not important).</li>
  <li>Give more room to important tasks (quadrants 1 and 2), leaving just one or two slots for urgent but unimportant tasks (quadrant 3).</li>
</ul>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="Self-Management" /><category term="Personal Development" /><summary type="html"><![CDATA[A productivity method that consists of listing the six most crucial tasks to accomplish the next day and working through each in order of importance.]]></summary></entry><entry><title type="html">Developing Software Engineering Strategies</title><link href="https://eduklein.com.br/software-engineering-strategy/" rel="alternate" type="text/html" title="Developing Software Engineering Strategies" /><published>2024-05-26T00:00:00+00:00</published><updated>2024-05-26T00:00:00+00:00</updated><id>https://eduklein.com.br/software-engineering-strategy</id><content type="html" xml:base="https://eduklein.com.br/software-engineering-strategy/"><![CDATA[<p>Since the previous year, I’ve been studying and practicing the development of software engineering strategies as part of my development into senior engineering leadership roles.</p>

<p>My first introduction to this topic was through the excellent book <em><a href="/book/an-elegant-puzzle">An Elegant Puzzle</a></em> by <a href="https://lethain.com/">Will Larson</a> (CTO at Carta).</p>

<p>In essence, a software engineering strategy consists of the following components:</p>

<ol>
  <li><strong>Diagnosis</strong>: The theory describing the challenge at hand, including its factors and constraints, along with a problem statement;</li>
  <li><strong>Guiding Policies</strong>: These are the policies that will be applied to address the challenge. They describe the general approach taken to tackle the problem;</li>
  <li><strong>Actions</strong>: These are the specific steps implemented to address the challenge.</li>
</ol>

<p>From my experience, I have found software engineering strategies useful in two contexts:</p>

<ol>
  <li><strong>Writing guides to help teams tackle specific operational challenges</strong>: I have explored this in <a href="/writing-guides">Writing Guides to Support Your Teams</a>. The diagnosis usually identifies one specific challenge, and the guiding policies and actions are tailored to address that challenge;</li>
  <li><strong>Developing mid or long-term software engineering strategies for my team or business unit</strong>: In this context, the strategy explores multiple challenges, identifies the guiding policies and actions to tackle them, and aims to inspire and guide leaders and individual contributors in their work towards common goals.</li>
</ol>

<p>I have also been writing a dedicated page called <a href="/mgmt/sem/swe-strategy">Software Engineering Strategy</a> on this website, where I document the key learnings, insights, and resources that I find useful in my journey to deeply understand this topic.</p>

<p>I hope you find it helpful as well. Please feel free to reach out if you have any questions or comments about software engineering strategies.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="SWE Management" /><category term="Written Communication" /><category term="SWE Strategy" /><summary type="html"><![CDATA[A high-level plan or approach designed to achieve specific objectives in software engineering teams and projects.]]></summary></entry><entry><title type="html">Reasons People Get Laid Off</title><link href="https://eduklein.com.br/reasons-people-get-laid-off/" rel="alternate" type="text/html" title="Reasons People Get Laid Off" /><published>2024-01-24T00:00:00+00:00</published><updated>2024-01-24T00:00:00+00:00</updated><id>https://eduklein.com.br/reasons-people-get-laid-off</id><content type="html" xml:base="https://eduklein.com.br/reasons-people-get-laid-off/"><![CDATA[<p>The beginning of 2024 has witnessed a resurgence of layoffs in the tech industry, catching many by surprise. Once again, employees are afraid and uncertain about their futures. The pressing question on everyone’s mind is: Which company will make the next cut, and who will be affected?</p>

<p>Today, I came across an insightful article on <a href="https://hbr.org">HBR.org</a> titled <a href="https://hbr.org/2024/01/5-reasons-people-get-laid-off">5 Reasons People Get Laid Off</a> by Marlo Lyons. This article offers valuable insights, and I highly recommend you read it.</p>

<p>Understanding why layoffs occur can empower us to proactively safeguard our careers and mitigate some of the associated stress. With this in mind, I’d like to share and summarize some key insights from the article.</p>

<p>Here are a few reasons why people get laid off:</p>

<h2 id="lack-of-skills-advancement">Lack of skills advancement</h2>

<blockquote>
  <p>Employees are 100% responsible for continually upskilling and reskilling. While companies may offer resources to learn new skills, they tend to teach to the entire employee population, so most talent development programs focus on management skills […]</p>

  <p>But employees need to continue to advance their hard skills, such as becoming technically proficient in AI applications or new programming languages. Those who don’t continue to evolve their skills to keep up with rapidly changing business needs may be targeted for layoffs.</p>
</blockquote>

<p>In most tech companies, particularly in software engineering roles, the job inherently involves continuous learning. It is crucial to demonstrate a commitment to reskilling and to develop personal growth plans that align with your team’s or company’s objectives.</p>

<h2 id="youre-an-overseer-not-a-doer">You’re an “overseer,” not a “doer”</h2>

<blockquote>
  <p>The most straightforward method to meet the assigned cut percentage is to eliminate the positions of individuals with the highest salaries, particularly if they’re not actively involved in accomplishing the work. Managers who lack hands-on involvement may be seen as less valuable to the organization, as there is a perception that they’re not directly contributing to task and project execution.</p>

  <p>Managers who are invaluable to an organization find a balance between strategic leadership and hands-on involvement without micromanaging their teams.</p>
</blockquote>

<h2 id="lack-of-visibility">Lack of visibility</h2>

<blockquote>
  <p>Being the quiet worker bee won’t protect you from being laid off. In fact, being invisible could be your downfall. When determining which roles to cut, if senior leadership doesn’t know who you are, what you do, or the impact you make, your job could be an easy choice for elimination.</p>
</blockquote>

<h2 id="lack-of-performance">Lack of performance</h2>

<blockquote>
  <p>When companies need to cut their budgets, they’ll likely try to eliminate those who are considered non-performers. Where more than one person is doing a particular job, layoffs provide managers a ripe opportunity to cut low performers without having to do the hard work of giving them more feedback or putting them on a performance improvement plan.</p>

  <p>Employees must realize their manager’s perception means everything. So even if you think you’re doing a great job, if your manager doesn’t agree, you could be deemed a poor performer and be on the chopping block.</p>
</blockquote>

<p>This one is particularly relevant for software engineering roles, as it accounts for many terminations I’ve observed in the tech industry’s post-pandemic layoffs. It appears to be the primary criterion used by senior leadership.</p>

<p>I’ve witnessed competent engineers who had one performance cycle rated ‘below expectations’ being selected for layoffs. Under normal circumstances, these individuals might have been placed on a Performance Improvement Plan (PIP) and given a chance to improve.</p>

<p>Maintain constant vigilance regarding your performance. Proactively seek feedback on your work, learn from it, and ensure alignment with your manager and peers.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="Tech Industry" /><category term="Layoffs" /><summary type="html"><![CDATA[A summary of the HBR.org article 5 Reasons People Get Laid Off, by Marlo Lyons.]]></summary></entry><entry><title type="html">An Approach to Career Development</title><link href="https://eduklein.com.br/career-development-approach/" rel="alternate" type="text/html" title="An Approach to Career Development" /><published>2023-11-20T00:00:00+00:00</published><updated>2023-11-20T00:00:00+00:00</updated><id>https://eduklein.com.br/career-development-approach</id><content type="html" xml:base="https://eduklein.com.br/career-development-approach/"><![CDATA[<p>Career development is essential to reaching our potential. Committing to self-improvement enhances our current roles and prepares us for future opportunities and challenges. As the owners of our professional journeys, we must continually expand and adapt our skills.</p>

<p>Our careers are not just defined by what we work on but mainly by what we aspire to become. This pursuit is a continuous effort that shapes our career aspirations and enhances learning, contributing to personal growth and collective success in companies.</p>

<p>To empower individuals and facilitate career advancement, I’ve documented a structured approach to guide the process. It consists of:</p>

<ul>
  <li><strong>Resources</strong>: A collection of guides and templates that help you understand how to pursue career development;</li>
  <li><strong>Tools</strong>: The tools that help you navigate the journey, leveraging your relationship with your manager and peers;</li>
  <li><strong>Approach</strong>: A structured approach to go from envisioning your desired future to realizing tangible growth.</li>
</ul>

<h1 id="resources">Resources</h1>

<ul>
  <li><a href="/personal-dev/template-individual-development-plan">Individual Development Plan (IDP) template</a>: A straightforward template to help you create your development plan;</li>
  <li><strong>Your company’s career track</strong>: This is something your company should provide. It is essential to understand the career track laid out by your organization. Learn how to progress in your career by discussing with your manager. Learn more about software engineering career ladders and progression frameworks <a href="/mgmt/sem/swe-career">here</a>;</li>
  <li><strong>Your company’s performance review process</strong>: This information should also be provided by your company or manager. Most organizations have a documented schedule and process for performance reviews. It is beneficial to align your development plan with it to ensure your goals are in sync with the company’s expectations;</li>
  <li><strong>Your company’s and team’s strategy and vision</strong>: This information should also be provided by your company or manager. Understanding your company’s and team’s strategy and vision is crucial. It helps you identify relevant projects and opportunities that align with your objectives and contribute to organizational goals.</li>
</ul>

<h1 id="tools">Tools</h1>

<p>The following is a collection of tools that you can leverage, together with your manager, to communicate your goals, commit to them, and progress in your career.</p>

<h2 id="one-on-one-meetings">One-on-one meetings</h2>

<p>A <a href="/mgmt/people/one-on-ones">one-on-one</a> is a recurring, individual meeting that managers schedule with each team member. Its primary goal is to support your career development, providing a platform for discussing professional growth, addressing tactical issues, and receiving guidance and feedback. They are also an opportunity for you to share feedback, raise concerns, and discuss your aspirations.</p>

<p>Ideally, this meeting should occur regularly, preferably weekly, to ensure consistent communication and support. If you’re not currently having these meetings, I recommend you talk to your manager to establish a schedule.</p>

<p>Some advice for your one-on-ones:</p>

<ul>
  <li>Connect with your manager. Let them know about yourself, your desired future, and your dreams and goals. Your manager should be the person to help you maximize your development inside the company.</li>
  <li>To make the most of this relationship, own the one-on-one agenda. It is about you, not about them, so be proactive in bringing topics to the table. Don’t expect your manager to guide your development; do it yourself.</li>
</ul>

<h2 id="feedback">Feedback</h2>

<p>Feedback is a powerful tool for personal and professional growth. It involves both giving and receiving constructive comments about performance, behavior, or learning strategies. Regular feedback can help you understand your strengths, identify areas for improvement, and align your efforts with your team’s and organization’s objectives.</p>

<p>Some advice on feedback:</p>

<ul>
  <li><strong>Seek feedback often</strong>: Don’t wait for formal reviews. Ask for feedback regularly from your manager, peers, etc;</li>
  <li><strong>Be specific in your requests</strong>: Instead of asking for general feedback, focus on specific areas or recent projects;</li>
  <li><strong>Create a feedback-friendly culture</strong>: Encourage open and honest communication within your team. Show appreciation for the feedback you receive, and be respectful and constructive when giving feedback to others.</li>
  <li><strong>Act on the feedback</strong>: Demonstrating that you value and act upon feedback is crucial. Reflect on it, make necessary adjustments, and use it as a stepping stone for growth.</li>
</ul>

<p>Remember, effective use of feedback is a key component in driving your personal development and achieving your career goals.</p>

<h2 id="individual-development-plan">Individual Development Plan</h2>

<p>An Individual Development Plan (IDP) is a document you create, preferably in collaboration with your manager. It serves as a roadmap for career growth and skill development, outlining specific, achievable objectives aligned with both your career aspirations and your team’s and the organization’s goals.</p>

<p>The creation of an IDP is a proactive process. Reflect on your strengths, feedback received, areas for improvement, and long-term career goals when writing it. Regular reviews and updates to the IDP are crucial, as they allow for adjustments based on progress, changing circumstances, or evolving career objectives.</p>

<p>An effective IDP not only guides an individual’s professional development but also fosters a culture of continuous learning and growth within the organization. If you haven’t developed your IDP yet, consider scheduling time with your manager to start this valuable process.</p>

<h1 id="taking-the-drivers-seat">Taking the driver’s seat</h1>

<p>As we have established, owning our personal development is crucial. I strongly encourage you to take the driver’s seat on this journey. Commit to your self-improvement and intentionally chart the course of your career.</p>

<p>If you’re uncertain about where to begin, the following is a structured approach to navigating your personal development.</p>

<h2 id="leverage-your-one-on-ones">Leverage your one-on-ones</h2>

<p>You should count on your manager to support you in every aspect of your personal development plan. Ensuring that your goals are aligned with the team’s objectives and the organization’s vision is key to success.</p>

<p>One-on-one meetings with your manager are invaluable opportunities to drive your personal development forward. Use these sessions to discuss your goals and your development plan, celebrate your wins, navigate through challenges, and adjust your goals as needed.</p>

<p>Be proactive in seeking guidance, clarifying expectations, and securing the support you need. These interactions can give you the insights and motivation to propel your career development.</p>

<h2 id="clarify-your-desired-future">Clarify your desired future</h2>

<p>Consider what success looks like for you in the long term: the roles you aspire to fill, the skills you wish to master, and the impact you want to make. Reflect on your interests and passions and how they align with your career aspirations.</p>

<p>This clarity of vision is the compass that will guide all subsequent steps in your career journey.</p>

<p>Consider the following in this step:</p>

<ul>
  <li>While your vision of the desired future provides direction, remember it’s equally important to remain adaptable. As you grow personally and professionally, your aspirations evolve. Make it a practice to reflect on and revise your vision at least annually.</li>
  <li>In case of a shift in your desired future, you must communicate these changes to your manager. Together, you can discuss the implications of this change on your current role and explore a transition plan that aligns with your new objectives.</li>
</ul>

<h2 id="define-your-development-objectives">Define your development objectives</h2>

<p>Once you have a clear picture of your desired future, it’s time to set specific development objectives. These are the milestones that will mark your progress along the path to your ultimate career goals.</p>

<p>Consider the following in this step:</p>

<ul>
  <li>Regularly review and update your objectives to stay aligned with both your personal growth and the organization’s evolving landscape. A quarterly review, synchronized with the company’s performance or planning cycles, can ensure your goals remain relevant and achievable.</li>
  <li>Less is more. Aim for a manageable number of objectives that allow for focused effort and significant impact.</li>
  <li>Stay agile in your career planning. If there are shifts in your team’s vision or organizational structure, view them as opportunities to realign your objectives. Adapting your goals to new circumstances can open up unexpected avenues for growth and learning.</li>
</ul>

<h2 id="build-your-individual-development-plan-idp">Build your Individual Development Plan (IDP)</h2>

<p>With your objectives set, you can now craft your Individual Development Plan (IDP). This personalized plan is your strategy for achieving your career goals. It should outline the resources you’ll need, the skills you’ll develop, and the steps you’ll take. Your IDP is a living document that will evolve as you progress, so it’s essential to revisit and revise it regularly.</p>

<h2 id="tracking-progress">Tracking Progress</h2>

<p>Once your IDP is established, the next critical phase is implementation and tracking. This is where you put your plan into motion, actively engaging with the outlined activities and learning opportunities.</p>

<p>Establish a routine for regularly reviewing your progress against your objectives. This could be a monthly self-assessment or a tracking spreadsheet. Such vigilant monitoring will help you stay accountable, make necessary adjustments, and maintain momentum toward achieving your goals.</p>

<h2 id="ask-for-feedback">Ask for feedback</h2>

<p>Feedback is the fuel for growth and improvement. Regularly seek out constructive feedback from a variety of sources: managers, peers, mentors, and other people. Embrace both positive and constructive criticism as opportunities to learn and refine your skills.</p>

<p>Remember, feedback is not just about hearing what you’re doing well but also about identifying areas where you can improve. By actively asking for and acting on feedback, you demonstrate your commitment to continuous learning and self-improvement.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="Personal Development" /><category term="Career" /><summary type="html"><![CDATA[A step-by-step approach to intentional career development.]]></summary></entry><entry><title type="html">NLP Meta-Model</title><link href="https://eduklein.com.br/nlp-meta-model/" rel="alternate" type="text/html" title="NLP Meta-Model" /><published>2023-10-13T00:00:00+00:00</published><updated>2023-10-13T00:00:00+00:00</updated><id>https://eduklein.com.br/nlp-meta-model</id><content type="html" xml:base="https://eduklein.com.br/nlp-meta-model/"><![CDATA[<p>Throughout our lives, from childhood and education to work and relationships, we develop our mental models — our unique perceptions of the world. However, due to the limitations of language, we struggle to effectively communicate and interpret these varied, sometimes even conflicting, mental models. This is fundamentally why we encounter so much noise in communication, as captured by the following quote:</p>

<blockquote>
  <p>Between what I say and what you understand, there’s what I meant to say and what you think I said.</p>
</blockquote>

<p>This underscores why communication is paramount in <a href="/leadership">leadership</a> and <a href="/mgmt">management</a>, which is the reason I maintain a <a href="/leadership/communication">dedicated page on the subject of communication</a>.</p>

<p>The meta-model patterns of communication are an essential tool for enhancing interpersonal communication and even our internal dialogue. Originating from Neuro-linguistic programming (NLP), these patterns allow us to reverse engineer communication, uncovering information that might be deleted, distorted, or generalized in the language of NLP.</p>

<h1 id="the-meta-model">The Meta-Model</h1>

<p>The NLP meta-model is a set of questions designed to specify information and to challenge and expand the limits of someone’s mental model. It responds to the deletions, distortions, and generalizations in our mental models and our communication.</p>

<p>Every time we capture events and perceptions from our surroundings, we partially consciously but mostly unconsciously process a lot of information. According to NLP, to handle and make sense of our experience, our brains use some filters, and just after that, our thoughts are formed. Those filters are:</p>

<ul>
  <li><strong>Deletion</strong>: When we selectively focus our attention on certain aspects of our experience and exclude others.</li>
  <li><strong>Distortion</strong>: The ability to add or remove parts of what is perceived to give it logical, aesthetic, or ethical meaning.</li>
  <li><strong>Generalization</strong>: The ability to learn quickly from a few experiences.</li>
</ul>

<p>The following table summarizes the NLP Meta-Model:</p>

<table>
  <thead>
    <tr>
      <th>Deletions</th>
      <th>Distortions</th>
      <th>Generalizations</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Simple Deletion</td>
      <td>Nominalization</td>
      <td>Universals</td>
    </tr>
    <tr>
      <td>Unspecified Referential Index</td>
      <td>Mind Reading</td>
      <td>Modal operators of necessity</td>
    </tr>
    <tr>
      <td>Unspecified Verb</td>
      <td>Complex Equivalents</td>
      <td>Modal operators of possibility</td>
    </tr>
    <tr>
      <td>Comparative Deletion</td>
      <td>Cause and Effect</td>
      <td> </td>
    </tr>
    <tr>
      <td>Lost Performative</td>
      <td>Presuppositions</td>
      <td> </td>
    </tr>
  </tbody>
</table>

<p><br /></p>

<p>Here are a few examples of how to challenge language patterns, expand someone’s mental model, and recover lost information:</p>

<p><strong>1. Mind Reading</strong>: Claiming to know someone else’s inner mental state</p>

<ul>
  <li>Example: “He doesn’t care about this project.”</li>
  <li>Challenge: How do you know he doesn’t care?</li>
  <li>Goal: Identify the criteria used to suppose what someone else thinks.</li>
</ul>

<p><strong>2. Comparative Deletion</strong>: A comparison in which the starting point for comparison is not stated</p>

<ul>
  <li>Example: “It is better to say nothing.”</li>
  <li>Challenge: Better than what specifically?</li>
  <li>Goal: Identify the comparison criteria used</li>
</ul>

<h2 id="meta-model-questions">Meta-Model Questions</h2>

<p>A list of questions useful to specify and clarify information and to open up someone’s model of the world:</p>

<ul>
  <li>How? What? When? Where? Who specifically?</li>
  <li>Who says? According to Whom?</li>
  <li>Everybody? Always? Never? Nobody? Nothing? All? No one?</li>
  <li>What do you mean by that?</li>
  <li>Compared to whom? Compared to what?</li>
  <li>How do you know?</li>
  <li>What stops you? What would happen if you could?</li>
  <li>What would happen if you did? What would happen if you didn’t?</li>
</ul>

<h2 id="further-reading">Further reading</h2>

<p>If you want to learn more about the meta-model, consider the following as a starting point.</p>

<ul>
  <li><a href="https://www.goodreads.com/book/show/17259397-the-ultimate-introduction-to-nlp">The Ultimate Introduction to NLP</a></li>
  <li><a href="https://www.anilthomasnlp.com/post/the-nlp-meta-model">https://www.anilthomasnlp.com/post/the-nlp-meta-model</a></li>
  <li><a href="https://www.nlpworld.co.uk/nlp-training-meta-model/">https://www.nlpworld.co.uk/nlp-training-meta-model/</a></li>
  <li><a href="https://nlpsure.com/nlp-meta-model/">https://nlpsure.com/nlp-meta-model/</a></li>
</ul>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="Coaching" /><category term="People Skills" /><category term="NLP" /><category term="Communication" /><summary type="html"><![CDATA[A neuro-linguistic programming (NLP) tool designed to enhance communication by addressing its deletions, distortions, and generalizations.]]></summary></entry><entry><title type="html">Progressive Deployments</title><link href="https://eduklein.com.br/progressive-deployments/" rel="alternate" type="text/html" title="Progressive Deployments" /><published>2023-09-14T00:00:00+00:00</published><updated>2023-09-14T00:00:00+00:00</updated><id>https://eduklein.com.br/progressive-deployments</id><content type="html" xml:base="https://eduklein.com.br/progressive-deployments/"><![CDATA[<p>Rolling out a product or improvement involves deploying and launching new features or updates to an existing user base. This is an integral part of operating any digital platform.</p>

<p>A well-designed rollout plan is essential for successfully launching these improvements without negatively affecting customers’ operations. A comprehensive rollout plan should address, at a minimum, the following key aspects:</p>

<ul>
  <li><strong>Testing protocols</strong>: Before rolling out to the entire user base, testing the new features or updates in a controlled environment (like staging) or with a smaller subset of users (beta testers) can help identify and fix issues.</li>
  <li><strong>A progressive deployment plan and rollback process</strong>: A progressive deployment plan ensures that updates are introduced in phases, allowing for real-time feedback and adjustments, while a rollback process guarantees a swift return to the previous version if any issues arise, minimizing disruptions and potential risks.</li>
  <li><strong>A communication plan that addresses key stakeholders</strong>: A well-structured communication plan is vital, ensuring that customers are informed and prepared for any changes while also equipping customer support and technical support teams with the necessary information to address queries and resolve issues.</li>
  <li><strong>User documentation</strong>: Providing comprehensive and updated user documentation helps users adapt to new features or changes.</li>
</ul>

<h2 id="progressive-deployment-strategies">Progressive Deployment Strategies</h2>

<p>From the above aspects, I want to delve into the progressive deployment plan.</p>

<p>A progressive deployment aims to minimize risk and improve customers’ and developers’ experience by implementing change to a small group of users, which allows fast feedback and faster rollback in case of failures. There are a few strategies that we can adopt for a progressive deployment:</p>

<ol>
  <li><strong>Canary Deployments</strong>: A new software version is partially rolled out to a small subset of users before a full rollout. The purpose is to test and monitor the new version in a real environment with actual users. If the canary deployment works well and no issues are identified, the new version can be rolled out to the entire user base. If issues are found, it’s easier to roll back, preventing all users from being affected.</li>
  <li><strong>Blue/Green Deployments</strong>: Two identical production environments are maintained. The “blue” environment runs the current version of the software, while the “green” environment gets the new version. Once the new version is ready and tested in the “green” environment, traffic is switched over, making “green” the live environment. This allows for near-instant rollbacks in case of issues and ensures minimal downtime during deployments.</li>
  <li><strong>Rolling Deployments</strong>: The new software version is gradually rolled out to all users, replacing the old version incrementally. This is typically done server by server or container by container, ensuring that only a portion of the system is updated at any given time. If problems arise during the deployment, it affects only the portion being updated, allowing for easier rollbacks and reduced impact.</li>
  <li><strong>Shadow Deployments</strong>: The new version of the software runs alongside the old version but without actual user traffic directed to it. Instead, real user requests are duplicated to the new version in real time, allowing teams to monitor and test how the system behaves under realistic conditions without affecting the actual user experience.</li>
</ol>

<h2 id="feature-flags">Feature Flags</h2>

<p>Feature flags, also known as feature toggles, provide flexibility in the deployment process. They allow specific features to be turned on or off at runtime without changing the code.</p>

<p>Instead of deploying a new version of the software to a subset of servers or containers, the feature is deployed everywhere but is enabled first for a small subset of users (e.g., beta testers) and then progressively rolled to the entire user base in phases.</p>

<p>This ability supports various progressive deployment strategies and is widely adopted in cloud, multi-tenant environments.</p>]]></content><author><name>Eduardo Klein</name><email>eduardo@eduklein.com.br</email></author><category term="Software Engineering" /><category term="SWE Management" /><category term="Deployment" /><category term="Delivery" /><summary type="html"><![CDATA[Strategies to execute successful progressive deployments.]]></summary></entry></feed>