<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Omri Lavi</title>
    <description>The latest articles on DEV Community by Omri Lavi (@omril321).</description>
    <link>https://dev.to/omril321</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%2F248848%2Ff4a47a5a-f5a2-4968-8b76-683f952922a4.png</url>
      <title>DEV Community: Omri Lavi</title>
      <link>https://dev.to/omril321</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/omril321"/>
    <language>en</language>
    <item>
      <title>Growing as a Technical Leader: Lessons from the Book Staff Engineer</title>
      <dc:creator>Omri Lavi</dc:creator>
      <pubDate>Sat, 01 Feb 2025 09:07:36 +0000</pubDate>
      <link>https://dev.to/omril321/growing-as-a-technical-leader-lessons-from-the-book-staff-engineer-4dod</link>
      <guid>https://dev.to/omril321/growing-as-a-technical-leader-lessons-from-the-book-staff-engineer-4dod</guid>
      <description>&lt;p&gt;Growing as an Individual Contributor (IC) is a rewarding journey, but it’s not always clear how to make meaningful progress. I’ve faced these challenges myself—balancing learning, making an impact, and figuring out how to advance my career. Reading &lt;em&gt;Staff Engineer&lt;/em&gt; by Will Larson was a transformative experience. While some concepts felt familiar, the book’s structured approach provided clarity and actionable insights that illuminated a clear path forward.&lt;/p&gt;

&lt;p&gt;This article captures the key lessons I learned from the book, focusing on technical leadership, areas for improvement, and practical growth tips. My goal is to provide value for readers while solidifying my understanding of the book’s teachings as a reference for future growth. I hope this dual perspective helps you reflect on your journey, identify your strengths and areas to improve, and discover tools to navigate the IC path with confidence. For deeper insights, I highly recommend reading the book and exploring the resources at &lt;a href="https://staffeng.com" rel="noopener noreferrer"&gt;staffeng.com&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  &lt;strong&gt;The Four Archetypes of Staff Engineers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the most fascinating insights from &lt;em&gt;Staff Engineer&lt;/em&gt; is the concept of archetypes that define how Staff+ Engineers operate. These archetypes provide a framework for understanding the diverse ways individuals can make an impact:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;The Tech Lead&lt;/strong&gt;: Breaks down tasks, aligns the team, and delegates effectively to maintain momentum.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Architect&lt;/strong&gt;: Specializes in a technical domain, ensuring scalable, maintainable solutions that align with business goals.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Problem Solver&lt;/strong&gt;: Tackles complex challenges, resolves issues, and hands off solutions to the owning team.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Right Hand&lt;/strong&gt;: Bridges leadership and engineering, translating business needs into technical initiatives.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Comparing the Four Archetypes&lt;/strong&gt;
&lt;/h3&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Archetype&lt;/th&gt;
&lt;th&gt;Focus Area&lt;/th&gt;
&lt;th&gt;Key Responsibilities&lt;/th&gt;
&lt;th&gt;Example Scenario&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Tech Lead&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Team execution &amp;amp; alignment&lt;/td&gt;
&lt;td&gt;Scoping tasks, aligning the team, and delegating effectively&lt;/td&gt;
&lt;td&gt;Coordinating a major feature rollout across multiple developers&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Architect&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;System &amp;amp; technical vision&lt;/td&gt;
&lt;td&gt;Designing scalable solutions and ensuring technical consistency&lt;/td&gt;
&lt;td&gt;Defining an API strategy that scales across teams&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Problem Solver&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Complex challenges&lt;/td&gt;
&lt;td&gt;Troubleshooting critical issues and handing off solutions&lt;/td&gt;
&lt;td&gt;Fixing a database bottleneck impacting performance&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;The Right Hand&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Leadership &amp;amp; strategy&lt;/td&gt;
&lt;td&gt;Aligning business and engineering priorities&lt;/td&gt;
&lt;td&gt;Communicating a strategic shift to the engineering team&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Staff Engineers adapt to different roles as needed, making their impact dynamic and situational. While I don’t hold the title, I’ve taken in the past the Tech Lead and Problem Solver roles—aligning teams or tackling challenges when necessary. The ability to flex between these archetypes is a key trait of high-performing engineers. Those who recognize when to shift their approach can maximize their influence and help their teams succeed at every stage of a project or company growth.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Key Areas of Focus for Staff Engineers&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the main takeaways from &lt;em&gt;Staff Engineer&lt;/em&gt; is the importance of focusing your efforts where they matter most. Staff+ Engineers prioritize their work by avoiding common pitfalls and targeting impactful areas.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Avoiding the Pitfalls&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Not all tasks are equally valuable, and some can drain your energy without meaningful results. Larson identifies three common traps:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Snacking&lt;/strong&gt;: Low-effort, low-priority tasks that feel good to check off but don’t contribute to meaningful growth. Occasional filler tasks are fine—but don’t let them dominate your focus.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;“Preening”&lt;/strong&gt;: This is a subset of snacking—tasks with high visibility but little impact. These can be tempting if you’re trying to stand out but often end up as distractions. I once spent longer than I’ll admit micro-optimizing a feature, excited by the idea of achieving a 70% performance boost. While it felt like a big win, in absolute numbers, it only saved a few milliseconds and had little real-world impact.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Chasing Ghosts&lt;/strong&gt;: Pursuing outdated priorities or visions from others without aligning them to current goals.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;While avoiding these common traps is essential, it’s just as important to proactively focus on high-impact work.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Focusing on Impact&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;To make the most of your efforts, focus on areas where you can truly make a difference:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Addressing the Gaps&lt;/strong&gt;: Identify overlooked areas that need attention and step up to fill them.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supporting Growth&lt;/strong&gt;: Create lasting value by improving processes like onboarding new team members.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Editing and Guiding&lt;/strong&gt;: Ensure ongoing work is on track and of high quality. Acting as an “editor” can amplify the team’s impact.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closing the Loop&lt;/strong&gt;: Help complete stalled or lingering tasks to bring clarity and forward momentum.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Doing What Only You Can Do&lt;/strong&gt;: Focus on tasks where your unique skills and expertise are critical. Delegate work when it makes sense, allowing you to concentrate on where you add the most value.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;​​Focusing on high-impact work is crucial, but to drive real change as a Staff+ Engineer, you also need to guide your team in the right direction. This is where strategy and vision come into play.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Strategy and Vision: The Path and the Way Forward&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Two essential tools for effective leadership as a Staff+ Engineer are &lt;strong&gt;vision&lt;/strong&gt; and &lt;strong&gt;strategy&lt;/strong&gt;. These aren’t just buzzwords—they’re the compass and the roadmap for navigating uncertainty and driving progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Vision: The Long-Term Destination&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Vision is about defining where you want to be in the future, typically one to two years down the line. A strong vision provides clarity and alignment, especially during times of uncertainty. It answers the big questions: &lt;em&gt;What are we building? Why does it matter?&lt;/em&gt; When a team rallies around a shared vision, they can move forward with confidence, even when the path isn’t perfectly clear.&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%2Fb5l21isymd6pfljadqyh.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%2Fb5l21isymd6pfljadqyh.png" alt="Vision - what's the long term goal?" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Strategy: The Map for Getting There&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Strategy, on the other hand, is about the &lt;em&gt;how&lt;/em&gt;. It’s most useful when the same discussions start to repeat themselves—when you’ve talked about a problem three or four times but haven’t made progress. A well-crafted strategy cuts through this noise, providing direction and enabling teams to move forward decisively.&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%2Fiy3fyapypv6rj0u6ox5e.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%2Fiy3fyapypv6rj0u6ox5e.png" alt="Strategy - the map that the team uses to reach the goal" width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The magic happens when vision and strategy work together. Vision sets the destination, and strategy outlines the steps to get there. With both in place, teams can not only move faster but also stay on track, even when challenges arise.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Contributions to Quality: Building the Foundations for Success&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the most impactful ways a Staff+ Engineer can elevate their team and organization is by championing quality. This doesn’t just mean writing better code; it involves fostering a culture and infrastructure that prioritizes excellence. Here are some key areas where Staff+ Engineers contribute to quality:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Focus on Hot Spots&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Identify the areas demanding attention—whether it’s a buggy module, a slow process, or a recurring pain point. By addressing these high-priority “hot spots,” you can drive immediate, noticeable improvement.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Define and Train for Best Practices&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Great quality starts with shared understanding. Staff+ Engineers are often responsible for defining best practices and ensuring they’re communicated effectively. However, avoid overwhelming the team: focus on introducing one best practice at a time to minimize friction and maximize adoption.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Be Involved in Leverage Points&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Certain decisions have an outsized impact on long-term quality. These include interfaces, state management, and data models. Staff+ Engineers ensure these critical “leverage points” are designed thoughtfully, as they’re hard to change once established.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Measure Quality&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;You can’t improve what you don’t measure. By introducing and tracking quantifiable metrics, such as code coverage, performance benchmarks, or bug resolution times, you create visibility into quality and its trends.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Use Vectors for Progress&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Progress isn’t just about moving forward—it’s about moving in the &lt;em&gt;right direction&lt;/em&gt;. Vectors ensure that everyone involved is aligned and working toward the same goals, preventing wasted effort.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;6. Leverage Quality Teams or Programs&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Sometimes, quality improvements require systemic changes. Dedicated quality teams or programs can drive these initiatives, ensuring a cohesive approach to raising standards across the board.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Checklist for Solving Quality-Related Pain Points&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This checklist is a combination of insights from &lt;em&gt;Staff Engineer&lt;/em&gt; and my own experiences in tackling quality-related challenges.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Identify key pain points&lt;/strong&gt;: Talk with people, empathize with their struggles.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;✅ Understand the root cause&lt;/strong&gt;: Determine where the struggle originates and why it happens.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;✅ Research best practices&lt;/strong&gt;: Look for industry standards and solutions that fit your company's unique needs.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;✅ Establish clear metrics&lt;/strong&gt;: Define measurable success criteria to align all stakeholders on progress.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;✅ Communicate the process&lt;/strong&gt;: Ensure all stakeholders understand the impact and why change is necessary.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;✅ Train and support teams&lt;/strong&gt;: Guide teams through the improvements, and recruit "champions" to help drive adoption.&lt;br&gt;&lt;br&gt;
&lt;strong&gt;✅ Celebrate milestones&lt;/strong&gt;: Acknowledge progress, especially when overcoming challenges!&lt;/p&gt;

&lt;p&gt;Ensuring high-quality engineering practices is crucial, but technical excellence alone isn’t enough. To truly lead and make an impact, a Staff+ Engineer must also master the interpersonal side of leadership—building trust, fostering collaboration, and guiding teams effectively.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Soft Skills for Success: The Hidden Superpower&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Technical expertise is vital for a Staff+ Engineer, but soft skills often make the difference between good and great leadership. These skills help you align with others, build trust, and create a positive impact beyond just code.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Stay Aligned with Authority&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One critical soft skill is ensuring alignment with your manager or leadership team. Avoid surprises by keeping them informed and providing context for your decisions. This transparency builds trust and ensures smoother collaboration.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Know When to Follow&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Not every issue requires you to take charge. When deciding whether to lead or follow, ask yourself: &lt;em&gt;Will this still matter in six months?&lt;/em&gt; If not, let someone else take the reins while you focus on higher-impact priorities.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Avoid Being Wrong&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;When someone seeks your advice, resist the urge to jump straight to an answer. Instead, ask three clarifying questions to gather context and better understand their perspective. This not only improves your response but also demonstrates respect for the person asking.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Create Space for Others&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Leadership isn’t just about your voice; it’s about amplifying others’ contributions. Here are some ways to create space for your team:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Engage the Quiet Voices&lt;/strong&gt;: Ask quieter team members for their thoughts during discussions, ensuring everyone has a chance to contribute. I’ve worked with an amazing developer who rarely spoke up in meetings, not because he lacked insight, but because he didn’t feel comfortable jumping into discussions uninvited. I learned that by directly asking for his opinion, he shared valuable perspectives that might have otherwise gone unheard.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Take Notes&lt;/strong&gt;: By being the one to document meetings, you allow others to focus on active participation.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Make Decisions Visible&lt;/strong&gt;: Share decisions publicly, like in a Slack channel, to encourage feedback and foster transparency.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sponsor Others&lt;/strong&gt;: Assign meaningful tasks to teammates, helping them grow and succeed while creating shared ownership.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Build a Strong Peer Network&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Your network is your lifeline. Larson emphasizes the importance of three types of connections:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Internal&lt;/strong&gt;: Peers within your organization who provide support and collaboration.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;External&lt;/strong&gt;: Professionals outside your company who offer fresh perspectives and insights.
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Executive&lt;/strong&gt;: Leaders and decision-makers who help bridge the gap between technical and business goals.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remembering to build “in, out, and up” networks ensures you’re connected at all levels, both within and outside your organization.&lt;/p&gt;

&lt;p&gt;Mastering these soft skills lays the foundation for technical leadership, but progressing to a Staff+ role requires more than just interpersonal growth. It demands a clear strategy, intentional career moves, and a focus on high-impact initiatives.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Climbing to Staff+: The Path to Growth and Impact&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Reaching a Staff+ Engineer position requires intentional effort, a clear plan, and a willingness to tackle significant challenges. &lt;em&gt;Staff Engineer&lt;/em&gt; outlines several key strategies for navigating this journey:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Create a Promotion Packet&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Work with your manager to define what success looks like. Ask yourself: &lt;em&gt;If I were promoted in 1-2 years, what accomplishments would justify it?&lt;/em&gt; Once you have this clarity, focus your efforts on these areas to ensure measurable progress.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Find a Trusted Sponsor&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;A sponsor is more than a mentor—they actively advocate for you in key spaces. Identify someone who understands your potential and is willing to support your growth by creating opportunities and vouching for your contributions.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Be “In the Room”&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Being in the room matters because that’s where key discussions and decisions happen. To get there, you need to provide something valuable to the people already in the room—something they don’t already have or know. This could be a unique insight, a fresh perspective, or specialized expertise. Importantly, having a sponsor in the room who knows you and understands your goals can make a big difference. They can help open the door and ensure your voice is heard.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;4. Make Your Work Visible&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Contribute meaningfully and ensure your impact is recognized. This doesn’t mean overshadowing others but rather documenting and sharing your contributions in a way that highlights your value.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;5. Take on a Staff+ Project&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;High-impact projects can showcase your ability to lead and deliver, but it’s important to note that not every organization requires these for promotion. While it’s always good to look for meaningful challenges that help you grow, don’t chase projects purely for the sake of promotion. Focus instead on initiatives that align with your goals and provide real value to your team or organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Lifelong Learning and Staying Energized&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;One of the most inspiring lessons from &lt;em&gt;Staff Engineer&lt;/em&gt; is that learning never stops. The best engineers are those who continuously seek out opportunities to grow, both technically and personally. Here are some takeaways that stood out to me:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;1. Learn from Your Network&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;&lt;em&gt;Staff Engineer&lt;/em&gt; highlights the value of building a strong network of people you respect and learn from, while also giving back. Relationships thrive on mutual support, sharing knowledge, and collaboration. For me, this means turning to mentors, past managers, or experts for guidance while contributing to their growth in return. A strong network fosters continuous learning and fresh perspectives.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;2. Focus on Solving Meaningful Problems&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Many engineers find motivation and fulfillment by tackling serious, unaddressed challenges. Instead of spreading yourself thin across smaller tasks, commit to solving the problems that truly matter. This not only amplifies your impact but also deepens your expertise.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;3. Learn What Energizes You&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;One of the most resonant lessons from &lt;em&gt;Staff Engineer&lt;/em&gt; is the emphasis on focusing on what excites you. Many of the interviewed Staff+ engineers in the book echoed this sentiment, each in their own way. Pursuing topics you’re genuinely curious about leads to deeper understanding and sustainable growth, while trying to learn everything often causes burnout.&lt;/p&gt;

&lt;p&gt;Reflecting on this, I realized I’ve fallen into the trap of feeling obligated to master countless topics, many of which weren’t critical. The knowledge I value most came from exploring areas that truly interested me. This approach keeps me energized and motivated. For more on avoiding burnout, check out &lt;a href="https://dev.to/omril321/developing-self-compassion-an-answer-to-the-constant-burnout-35e1"&gt;this article&lt;/a&gt; I wrote a few years back.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion: Building Your Own Path&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Staff Engineer&lt;/em&gt; by Will Larson isn’t just a guide for becoming a better engineer—it’s a roadmap for aligning your career with your values and aspirations. From understanding the archetypes of leadership to mastering the art of strategy and vision, the lessons in this book offer something for every IC striving to grow and make an impact.&lt;/p&gt;

&lt;p&gt;Reflecting on my journey, I’ve realized the importance of focusing on what truly matters—whether it’s solving meaningful problems, building strong relationships, or prioritizing learning that energizes me. These insights have not only clarified where I stand but also highlighted the areas where I can grow further.&lt;/p&gt;

&lt;p&gt;If you’re an IC aiming to grow your career, I encourage you to explore these ideas, reflect on where they resonate with you, and create your own actionable path forward. Which of these lessons stood out to you the most? Let’s discuss in the comments! For more insights, check out &lt;a href="https://staffeng.com" rel="noopener noreferrer"&gt;StaffEng.com&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>career</category>
      <category>learning</category>
      <category>leadership</category>
    </item>
    <item>
      <title>Developing Self Compassion: An Answer to the Constant Burnout</title>
      <dc:creator>Omri Lavi</dc:creator>
      <pubDate>Fri, 16 Jul 2021 12:17:14 +0000</pubDate>
      <link>https://dev.to/omril321/developing-self-compassion-an-answer-to-the-constant-burnout-35e1</link>
      <guid>https://dev.to/omril321/developing-self-compassion-an-answer-to-the-constant-burnout-35e1</guid>
      <description>&lt;p&gt;In the last few years, I developed an efficient routine to improve my abilities as a developer. I contributed to open source, read a lot, wrote blog posts and was active in social networks. Yet, I had a constant feeling that it's not enough - that I'm not &lt;em&gt;good enough&lt;/em&gt;. I thought I had to keep working hard, otherwise I'll go downhill. &lt;/p&gt;

&lt;p&gt;At some point I realized I was very stressed, and that I was concerned all the time, and that I couldn't rest properly. I couldn't accept positive feedbacks and found reasons why they are wrong. Generally speaking, I was very hard with myself. At some point I became aware of this situation and decided to make a process to change it. Now, a few months later, I feel much better with myself. I wanted to share my process, so that it will help others out there in similar situations. &lt;/p&gt;

&lt;p&gt;Feel like you're working hard and it's still &lt;em&gt;not enough?&lt;/em&gt; Are you unhappy with your job even though it's pretty good? Are you generally stressed about &lt;em&gt;your value as a developer&lt;/em&gt;? This post is for you. Take a few minutes to read through - you'll get a new perspective.&lt;/p&gt;

&lt;h2&gt;
  
  
  My Previous Routine
&lt;/h2&gt;

&lt;p&gt;In the past, I had a strict daily routine. It aggregated to the following weekly agenda:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reading a tech book - 1.5 hrs/week&lt;/li&gt;
&lt;li&gt;Side projects, open source or writing - 10 hrs/week&lt;/li&gt;
&lt;li&gt;Reading and keeping up to date - 3 hrs/week&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Usually, if I had spare time, I spent it on side projects or reading. I didn't rest. &lt;/p&gt;

&lt;p&gt;I learned a lot and created a lot of content. I was confident my work "pays off". &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%2Fkj6r7hjuj1066k5kbog2.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%2Fkj6r7hjuj1066k5kbog2.png" width="800" height="534"&gt;&lt;/a&gt;&lt;br&gt;Stressful free-time activities. (Image by &lt;a href="https://unsplash.com/photos/1K9T5YiZ2WU" rel="noopener noreferrer"&gt;Tim Gouw&lt;/a&gt;)
  &lt;/p&gt;




&lt;h2&gt;
  
  
  When Cracks Start to Show
&lt;/h2&gt;

&lt;p&gt;With time, I noticed some things about myself:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I was always stressed.&lt;/li&gt;
&lt;li&gt;I couldn't rest properly.&lt;/li&gt;
&lt;li&gt;I was very sensitive to issues at work, and they influenced my mood.&lt;/li&gt;
&lt;li&gt;Even though I got positive feedbacks, I wasn't able to accept them. I found reasons why the feedbacks were wrong, and gave myself negative counter-feedbacks.&lt;/li&gt;
&lt;li&gt;I had "tunnel vision" when encountering issues. I couldn't see the "big picture". I was too busy being concerned how I'll be perceived.&lt;/li&gt;
&lt;li&gt;I constantly swung between finding flaws in myself and in the environment (the company, the process, my coworkers).&lt;/li&gt;
&lt;li&gt;I thought about work day and night. I enjoy thinking about technical challenges, but this was a different experience. It troubled me &lt;em&gt;where I was wrong&lt;/em&gt;, and what will my coworkers/supervisor say.&lt;/li&gt;
&lt;li&gt;I had a very strong imposter syndrome. I felt less professional than my surroundings and was afraid people will find out about it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For a long time I thought that &lt;em&gt;this is the price for having a good job&lt;/em&gt;, and that I have to accept it. I thought that if I'll learn and do more, I'll feel better with myself, since I'll be "more professional". I remember telling myself "you can learn more, instead of resting in the evening - spend the time by reading some more". So I pushed it a little more.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Awakening
&lt;/h2&gt;

&lt;p&gt;In 2020 Covid came along, and a personal disaster happened about at the same time. I started thinking about how I spend my time and what I sacrifice. I realized that the routine I'm having was taking its toll. It led me to some serious thinking about my goals and their prices. &lt;/p&gt;

&lt;p&gt;I talked about this a lot with my wife, who is — luckily — a personal consultant. This led me to a decision to make a change. I adjusted my goals, determined to be happier.&lt;/p&gt;

&lt;p&gt;Now, these are some big words. What does being happy even mean? Don't worry, this post won't get a spiritual twist 😜 &lt;/p&gt;

&lt;p&gt;"Happiness" a profoundly personal definition and will differ for each individual. For me, I wanted to have a balance between:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A challenging and rewarding day job.&lt;/li&gt;
&lt;li&gt;Time to spend with my family and friends.&lt;/li&gt;
&lt;li&gt;The ability to maintain my hobbies.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Or in other words: retaining a good job, without allowing it consuming all my energy, all the time.&lt;/p&gt;

&lt;p&gt;I started a process to achieve my new goals.&lt;/p&gt;




&lt;h2&gt;
  
  
  Becoming Aware
&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%2Fei8c6gwgvux7rr6klait.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%2Fei8c6gwgvux7rr6klait.png" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;Monkey observing itself in the mirror. It's time for reflections. (Image by &lt;a href="https://unsplash.com/photos/84oiI1wT4zU" rel="noopener noreferrer"&gt;Andre Mouton&lt;/a&gt;)
  &lt;/p&gt;

&lt;p&gt;My process took part in two seemingly orthogonal parts. The first one is simple: I reduced the "extra" time I spend (side projects, reading, etc.) to an acceptable minimum. I still spend time, but considerably less. But, this isn't enough by itself. I can't "switch off" the part of my brain which constantly judged and said "it's not enough". &lt;/p&gt;

&lt;p&gt;This was the second part, which required some more work. I observed at my thoughts and feelings about not being good enough. I noticed the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I thought I needed to know everything&lt;/strong&gt;. I was afraid of encountering the unknown since it felt like a test. Each time someone else knew something I did not, I felt very bad. "I should have known this" was a common thought. On hindsight, I tried avoiding the unknown by trying to learn as much as possible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I was very concerned with how I'm perceived&lt;/strong&gt;. This made me feel occasionally under test (even when I wasn't). When struggling with a technical issue, the soon-to-come feedback troubled me more than the issue itself.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I had unrealistic ideals&lt;/strong&gt;. I know a few very successful individuals, and I take them as role-models. Yet, unconsciously I thought I can have all the positive aspects from my idols (writing blogs, contributing to open-source...), without having any of the negative aspects (the sacrifices).&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I understood that my ideals made me very judgmental about myself and my surroundings.&lt;/strong&gt; When things didn't go as I imagined I became upset. It could have been something in the workflow, or a coworker that didn't see things as I do . The gap between my ideals and the reality made me believe (sometimes) I don't fit.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Almost all my feedbacks were positive&lt;/strong&gt;. This part is important - my feelings about not being good enough were not based on any external feedback. Objectively, I was doing ok.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;After learning about my thoughts and feelings, I started making cognitive changes.&lt;/p&gt;




&lt;h2&gt;
  
  
  Changing the Narrative
&lt;/h2&gt;

&lt;p&gt;To achieve my goals, I needed to cognitively change the way I think. This may sound abstract, and it's easy to be cynical about it. However, it is feasible with a lot of hard work.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;I accepted I CAN'T have it all&lt;/strong&gt;. I'm no superman. I adjusted my ideals and "lowered the bar".&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I remind myself where I'm doing OK&lt;/strong&gt;. I don't &lt;em&gt;have&lt;/em&gt; to be overwhelmingly great, being OK is good enough. I allowed myself listening to external positive feedbacks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I decided to gain meaning from myself, and not my surroundings.&lt;/strong&gt; If negative feedbacks show up, they shouldn't affect my self-esteem. Having areas that need improvements don't make me a bad developer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I accepted I can't know everything&lt;/strong&gt;. Learning is great. But, naturally, it is not possible to know everything. It is GUARANTEED I will bump into things I don't know, and someone else will. No one can escape this scenario. This led me to an important understanding. &lt;em&gt;Professionalism is measured not only by what you know, but how you learn what you don't know.&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I accepted that people have different values than me&lt;/strong&gt;. Sometimes I have opinions of how things "should be", that weren't in line with my coworkers' opinions. In times where I couldn't convince my colleagues, I felt very bad. Instead, I now allow myself letting go of some of my ideas. "Chasing" them and trying to make them happen at all cost was frustrating.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I accepted my judgmental nature&lt;/strong&gt;. When a judgmental though came to my mind, I noticed it, and labeled it as such. I doubted it instead of accepting it as is. Eventually, I could separate cases where things are truly "bad" or rather they just don't match my ideal (which is my problem). I moved from a passive point of view ("This is bad" or "I am bad") to an active point of view ("Should this be improved? Can I improve it? What can I do?").&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;I decided to spend less time "learning" and "pushing myself forward".&lt;/strong&gt; Instead, I spent some time with non-work things. I learned to juggle. I improved my chess skills. I exercise more. I even play more PC games (an extreme luxury in the past).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now, I know what you're thinking. "Huh, that's a one way street for becoming a mediocre developer, or worse". Is it so?&lt;/p&gt;




&lt;h2&gt;
  
  
  Slowing Down ≠ Stopping
&lt;/h2&gt;

&lt;p&gt;Naturally, this change may slow my career progress. However, the pros beat the cons. I don't feel stressed, and I'm more energetic. Non-work activities were more enjoyable. I'm more concentrated at work, and I solve problems quicker. When incidents come up at work, I'm much more calm and focused. Innovative ideas come to my mind more often, and I have time to implement them. I learn and create because I &lt;em&gt;want to&lt;/em&gt;, not because I &lt;em&gt;have to&lt;/em&gt;. Once you realize you don't really chase anything - the meaning of speed matters less.&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%2Fq72hxdjn4hktpz69kjqg.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%2Fq72hxdjn4hktpz69kjqg.jpg" width="800" height="533"&gt;&lt;/a&gt;&lt;br&gt;A walking person enjoying the view. It's not a race, you won't "win" by going faster. (Image by &lt;a href="https://unsplash.com/photos/mNGaaLeWEp0" rel="noopener noreferrer"&gt;Emma Simpson&lt;/a&gt;)
  &lt;/p&gt;




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

&lt;p&gt;Being a developer is very demanding by itself. On top of that, each person in the dev community has something to say about what you should learn, and what you should do. FOMO is inevitable, and it's easy to feel bad (or simply not good enough) with yourself. &lt;/p&gt;

&lt;p&gt;I wanted to share my story, maybe it will help other devs with similar feelings.  My main message to you is: Relax, breath. Remember to slow down sometimes. You're doing alright 🤗&lt;/p&gt;

&lt;p&gt;On a more personal note (if that's even possible), it was very difficult to me for write on such a personal topic. I'd love to hear your thoughts about this - feel free to approach me at any way (comments, DM, emails - you name it)&lt;/p&gt;

</description>
      <category>career</category>
      <category>programming</category>
      <category>productivity</category>
      <category>motivation</category>
    </item>
    <item>
      <title>Better Error Messages in TypeScript 4.2 - Smarter Type Alias Preservation</title>
      <dc:creator>Omri Lavi</dc:creator>
      <pubDate>Sun, 28 Feb 2021 19:05:18 +0000</pubDate>
      <link>https://dev.to/omril321/better-error-messages-in-typescript-4-2-smarter-type-alias-preservation-3j7</link>
      <guid>https://dev.to/omril321/better-error-messages-in-typescript-4-2-smarter-type-alias-preservation-3j7</guid>
      <description>&lt;p&gt;TypeScript 4.2 was &lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-4-2/" rel="noopener noreferrer"&gt;recently released&lt;/a&gt;, with many cool new features and improvements. It's really impressive to see how TypeScript improves the developer experience one step at a time. &lt;br&gt;
In this short post we will focus one feature, called Smarter Type Alias Preservation. I can say for myself that I really anticipate this feature. In a nutshell, it improves error messages related to union-types of union-types. I hope that in a few minutes you'll understand better what it means, and why it is useful.&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%2Fb7vhmm0echeyydsa3lov.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%2Fb7vhmm0echeyydsa3lov.png" alt="Don't get lost when unioning types." width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;sup&gt;Don't get lost when unioning types. (Photo by &lt;a href="https://www.thisiscolossal.com/2015/06/painstaking-new-arrangements-of-colorful-objects-and-food-by-emily-blincoe/" rel="noopener noreferrer"&gt;Emily Blincoe&lt;/a&gt;)&lt;/sup&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  So What's the Problem?
&lt;/h2&gt;

&lt;p&gt;Until TypeScript 4.2, when using a union type which contained at least one union type, the compiler "flattened" the types. In simpler terms - you couldn't tell which types the union-type holds. Consider the following simplified &lt;a href="https://www.typescriptlang.org/play?ts=4.1.5#code/C4TwDgpgBAMg9gOwOYBVwQIxQLwFgBQA5KJBoVAD4HHoBM5VRJEAzA9cwCztPoCsPGpABsg5gHYx6ABxTIATjmYADEoxlKHdBnqbepNnqGZuR5hgFntoq6Um3MshxkUBuAh-zNYiVHRzUAPrmgsF0ocyGjIRhkKbRsRCWCcw2Kej26ZBOWRCKRokYqgXmGrk6EdpRQebxNdrJ9aRpTZiZrRg5HW6eBABmAK4IAMbAAJaIUAC2IABiQ8NQABQAhgBcPshopJSbfpC0u0MAJhB9YwgQxwCUUADeBFBQAE4QwAPPCFAr7vgAvr18DN5iMloQAEYDKZTCDPQjXVxQAD0SKgAEFnkgoRAEMAoHA+lBvIQAESQ6GwknkMYAZygCDgeJWNJpYyQCBW4IANtBgHAoGAVs8VjDgLD8YTiSTzCTdtK6LKKFB5ZAWIrlVx1SqkuqAHT6qAsFjTOCvKD63VHBCnc6XY6EXVLWgsTh8a5AA" rel="noopener noreferrer"&gt;example&lt;/a&gt;, where the type of the parameter &lt;code&gt;a&lt;/code&gt; is a union of two long types and &lt;code&gt;undefined&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;LongType1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;type1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;type2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="c1"&gt;//...&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;type19&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;LongType2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_type1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="c1"&gt;//...&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_type19&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myFunc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LongType1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;LongType2&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bummer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// Argument of type '"bummer"' is not assignable to parameter of type '"type1" | "type2" | "type3" | "type4" | "type5" | ... 33 more ... | undefined'.(2345)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's very difficult to understand this error: Where are these string literals coming from? Which type should I be looking at? What's the rest of the &lt;code&gt;33 more&lt;/code&gt; valid values? This can cause a lot of confusion and frustration.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's New?
&lt;/h2&gt;

&lt;p&gt;TypeScript 4.2 is going to make your lives easier in this aspect. &lt;strong&gt;Smarter Type Alias Preservation makes TypeScript "remember" which union-types are being used while displaying the error messages&lt;/strong&gt;. Instead of flattening the union-types, their alias will be preserved and shown. See the &lt;a href="https://www.typescriptlang.org/play?ts=4.2.0-beta#code/C4TwDgpgBAMg9gOwOYBVwQIxQLwFgBQA5KJBoVAD4HHoBM5VRJEAzA9cwCztPoCsPGpABsg5gHYx6ABxTIATjmYADEoxlKHdBnqbepNnqGZuR5hgFntoq6Um3MshxkUBuAh-zNYiVHRzUAPrmgsF0ocyGjIRhkKbRsRCWCcw2Kej26ZBOWRCKRokYqgXmGrk6EdpRQebxNdrJ9aRpTZiZrRg5HW6eBABmAK4IAMbAAJaIUAC2IABiQ8NQABQAhgBcPshopJSbfpC0u0MAJhB9YwgQxwCUUADeBFBQAE4QwAPPCFAr7vgAvr18DN5iMloQAEYDKZTCDPQjXVxAA" rel="noopener noreferrer"&gt;same code from the previous example, compiled with TypeScript 4.2&lt;/a&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;LongType1&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;type1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;type2&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="c1"&gt;//...&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;type19&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;type&lt;/span&gt; &lt;span class="nx"&gt;LongType2&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_type1&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="c1"&gt;//...&lt;/span&gt;
&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;_type19&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;myFunc&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;LongType1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nx"&gt;LongType2&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="kc"&gt;undefined&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nf"&gt;myFunc&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;bummer&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;//Argument of type '"bummer"' is not assignable to parameter of type 'LongType1 | LongType2 | undefined'.(2345)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;As you can see, TypeScript "remembers" that &lt;code&gt;"type1" | "type2" | ... | "type19"&lt;/code&gt; is actually &lt;code&gt;LongType1&lt;/code&gt;, and that &lt;code&gt;"_type1" | "_type2" | ... | "_type19"&lt;/code&gt; is &lt;code&gt;LongType2&lt;/code&gt;. TypeScript indeed got smarter with type alias preservation! The error is much more intuitive, so now you can shift your frustration towards something else. &lt;/p&gt;

&lt;p&gt;As &lt;a href="https://devblogs.microsoft.com/typescript/announcing-typescript-4-2/#smarter-type-alias-preservation" rel="noopener noreferrer"&gt;Daniel Rosenwasser mentioned in the announcement&lt;/a&gt;, these improvements were made possible by two pull requests, by Anders Hejlsberg (&lt;a href="https://github.com/microsoft/TypeScript/pull/42149" rel="noopener noreferrer"&gt;PR1&lt;/a&gt; , &lt;a href="https://github.com/microsoft/TypeScript/pull/42284" rel="noopener noreferrer"&gt;PR2&lt;/a&gt;). I will not get into the implementation details here. However, I encourage you to skim through the changes in &lt;code&gt;src/compiler/checker.ts&lt;/code&gt;, or the pull requests' descriptions.&lt;/p&gt;

&lt;h1&gt;
  
  
  Wrap Up
&lt;/h1&gt;

&lt;p&gt;TypeScript 4.2 will bring many exciting new features. One of which is the Smarter Type Alias Preservation, which will make certain type-errors much more informative. I hope that now you have a better grasp of this feature's meaning. Union-types have never been better!&lt;/p&gt;

</description>
      <category>typescript</category>
      <category>javascript</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Git Metric - Solving the Pain of Measuring a Project Migration</title>
      <dc:creator>Omri Lavi</dc:creator>
      <pubDate>Sun, 14 Feb 2021 16:21:03 +0000</pubDate>
      <link>https://dev.to/omril321/git-metric-solving-the-pain-of-measuring-a-project-migration-413j</link>
      <guid>https://dev.to/omril321/git-metric-solving-the-pain-of-measuring-a-project-migration-413j</guid>
      <description>&lt;h2&gt;
  
  
  The Pain of Measuring a Project Migration
&lt;/h2&gt;

&lt;p&gt;In the past few years I've had the chance to participate in ongoing project migrations like AngularJS to React, or JavaScript to TypeScript. Such migrations are usually incremental and take time. &lt;br&gt;
In most cases, it's hard to analyze what's the status of the migration: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Are we keeping a certain velocity, or are we slowing down? &lt;/li&gt;
&lt;li&gt;Do we obey defined rules, like stop adding AngularJS files when migrating to React?&lt;/li&gt;
&lt;li&gt;Which developer contributed the most to the migration? &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Enter Git Metric
&lt;/h2&gt;

&lt;p&gt;In an attempt to help with such questions, I've recently published a small utility called &lt;a href="https://github.com/omril321/git-metric" rel="noopener noreferrer"&gt;Git Metric&lt;/a&gt;. I believe it can help tracking the progress of most project migrations.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fh3f22fk6mmiwufqjn3ef.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%2Fi%2Fh3f22fk6mmiwufqjn3ef.png" alt="Alt Text" width="800" height="331"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you are in the middle of a project migration, Git Metric can be useful for you.&lt;br&gt;
With Git Metric you can quickly analyze git repository's history within minutes. Simply define the metrics you want to track (like specific file extensions, or a certain keywords in specific files) - and get a complete and holistic view of your project. You can find more details &lt;a href="https://github.com/omril321/git-metric" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'd love to hear your thoughts about it 😄&lt;/p&gt;

</description>
      <category>showdev</category>
      <category>opensource</category>
      <category>webdev</category>
      <category>javascript</category>
    </item>
  </channel>
</rss>
