<?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: mlr</title>
    <description>The latest articles on DEV Community by mlr (@mlr).</description>
    <link>https://dev.to/mlr</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%2F1636018%2Fe73fe907-366d-4f47-9fc7-f5a6662af1ef.png</url>
      <title>DEV Community: mlr</title>
      <link>https://dev.to/mlr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mlr"/>
    <language>en</language>
    <item>
      <title>The Thunder Island Navigator</title>
      <dc:creator>mlr</dc:creator>
      <pubDate>Sun, 28 Jul 2024 01:10:38 +0000</pubDate>
      <link>https://dev.to/mlr/the-thunder-island-navigator-2j2n</link>
      <guid>https://dev.to/mlr/the-thunder-island-navigator-2j2n</guid>
      <description>&lt;h2&gt;
  
  
  Join Me On a Career Journey
&lt;/h2&gt;

&lt;p&gt;I haven't posted in a while because I've been working on &lt;a href="https://www.thethunderislandnavigator.net" rel="noopener noreferrer"&gt;The Thunder Island Navigator&lt;/a&gt;, a newsletter about the software engineering field and job market to help aspiring (and seasoned) developers navigate the current market.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxy05tibhgfobbkfit8g6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxy05tibhgfobbkfit8g6.png" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I've built the newsletter using &lt;em&gt;Beehiiv&lt;/em&gt;, which has lots of canned no-code tools to build a simple web page for subscribers and potential subscribers.  For registering and managing the domain, I used Namecheap, which was a really smooth experience overall.&lt;/p&gt;

&lt;p&gt;As of right now, I'm aiming to post a new article every Monday, Wednesday, and Friday.  I may have some special edition articles published on other days, depending on my work schedule.  &lt;/p&gt;

&lt;h2&gt;
  
  
  Why?
&lt;/h2&gt;

&lt;p&gt;My motivation for building the newsletter is twofold. First, it is meant to both to help others navigate the software engineering market and educate people on the field as a whole.  Second, I hope to gain some exposure to my own projects and network with other developers to learn and grow.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Can You Help?
&lt;/h2&gt;

&lt;p&gt;I'm looking to do interviews with developers who want to talk about their job search, career journey, or the cool personal software projects they work on.&lt;/p&gt;

&lt;p&gt;I'm also looking forward to hearing comments or stories from developers who are currently looking for jobs and want to voice the challenges and trends of the market they've encountered in their search so far.&lt;/p&gt;

&lt;p&gt;If you want to reach out to chat, please feel free to send me a message here or by email.  It would be great to hear from everyone.&lt;/p&gt;

&lt;p&gt;It would be greatly appreciated if you could visit the site, add your email, and click Subscribe!&lt;/p&gt;

&lt;p&gt;The direct link to the newsletter is here: &lt;a href="https://www.thethunderislandnavigator.net" rel="noopener noreferrer"&gt;https://www.thethunderislandnavigator.net&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Code on,&lt;br&gt;
Matt&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fup6mmm2njy630cil6asb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fup6mmm2njy630cil6asb.png" alt="Image description" width="800" height="419"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>news</category>
      <category>career</category>
      <category>softwareengineering</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Focus</title>
      <dc:creator>mlr</dc:creator>
      <pubDate>Sat, 22 Jun 2024 19:24:11 +0000</pubDate>
      <link>https://dev.to/mlr/focus-421d</link>
      <guid>https://dev.to/mlr/focus-421d</guid>
      <description>&lt;p&gt;One of the five Scrum values is Focus. There are many ways in which developers can apply the concept of focus. There are also many ways in which developers, managers, and organizations as a whole can impede the application of focus.&lt;/p&gt;

&lt;p&gt;When developers lose focus, the quality of code suffers, productivity suffers, and most importantly, the developers suffer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Singular Goal, Realistic Planning, and Elimination of Multitasking
&lt;/h2&gt;

&lt;p&gt;In Scrum, there is always a Sprint Goal. This goal is singular, transparent, and as brief as possible, which helps developers focus on an achievable outcome.&lt;/p&gt;

&lt;p&gt;Realistic planning makes a world of difference for the outcome of a Sprint. Developers have issues that come up during the Sprint, they get stuck on problems in the code they’re trying to write, unexpected business needs come up; I could go on and on about this one. Planning more lightly makes it easier to be flexible and still deliver on the goal.&lt;/p&gt;

&lt;p&gt;Eliminate multitasking wherever it crops up. It’s often the case that management has dictated that progress must be demonstrated on a daily basis towards multiple different outcomes. In some cases, developers try to switch back and forth between two or three work items throughout the week without finishing any of them. There are all sorts of cases in between and outside these.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;p&gt;Let’s look at a couple of scenarios that might resonate with you.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 1
&lt;/h3&gt;

&lt;p&gt;The developers work on enterprise applications in an IT department for a finance company. There are 20 different applications for which they are responsible. Every Sprint, a mix of critical items for the bookkeeping software, CRM, and mobile banking app are added for developers to work on. The plan has been "maximized" for the amount of work management thinks the development team can handle over the course of the Sprint.&lt;/p&gt;

&lt;p&gt;Each developer has gained specialized knowledge of one of these applications and has taken “ownership” of the application. Alice specializes in the mobile banking app, and Chris specializes in the bookkeeping software. Both Alice and Chris also help the remaining developers work on the CRM.  Management wants to see progress on each of the three applications every day for each developer.&lt;/p&gt;

&lt;p&gt;By the end of the Sprint, nothing has been released. Small advances were made towards completing some of the work for each app, but it will take at least one or two more Sprints before a release can be made for each of the three apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Scenario 2
&lt;/h3&gt;

&lt;p&gt;The developers work on enterprise applications for a global shipping company. They have several different applications they are responsible for, much like the team from Scenario 1. During their current Sprint, they have planned to work on a new feature for the inventory management application. The new feature will allow other employees of the organization to add images and details about faulty products in the inventory and report them to inventory management and operations teams for investigation. The feature is a small part of a much bigger tool they want to integrate into the application for managing and reporting faulty products.  With that in mind, they have planned lightly, allowing for flexibility to add or remove items and still accomplish their goal.&lt;/p&gt;

&lt;p&gt;Each developer on the team selects one item to work on at a time, all of which are related to the eventual release of this new feature. As developers get stuck, they ask others on the team for help and work together to remove blockers as soon as possible. They complete all their work for the feature halfway through the Sprint and are able to pick up additional work to fix some bugs in the application and pay down other technical debt.&lt;/p&gt;

&lt;h2&gt;
  
  
  Analysis
&lt;/h2&gt;

&lt;p&gt;The team in Scenario 1 is likely familiar to most of us. I’ve worked at several places that take this approach. Management lets the team plan the work but says the team must work on more than one specific goal, they must maximize the amount of work planned, and they must demonstrate progress is being made on all the applications every day.&lt;/p&gt;

&lt;p&gt;Having no singular goal encourages the team to break into specialist groups where some developers work on a specific application and everyone else gains little experience in the domain. Inevitably, when another developer gets stuck on their own work item, others on the team must pause their work—work that is in an entirely different application—and switch over to helping that developer. In this process, the developer(s) who have swooped in to help have to shift their mindset towards the new application and go through significant learning in order to familiarize themselves with the problem. By the time they switch back to their own work, they have lost track of what they were doing and have difficulty restarting.&lt;/p&gt;

&lt;p&gt;Lastly, in this scenario, the original plan for the Sprint left no room for flexibility. If a team member gets stuck and takes longer than anticipated to complete their work, then there’s little chance of a release happening any time during the Sprint.&lt;/p&gt;

&lt;p&gt;On the other hand, the team in Scenario 2 created a clear goal for their Sprint around creating a small, usable feature that was part of a much larger tool. They planned light to accommodate any issues that might arise or unplanned surprises. Their common goal and light planning meant that they could essentially eliminate multitasking, focusing entirely on moving one item at a time towards the bigger release, only having to switch contexts when offering assistance to a peer. Even so, the close relation between all the work in the Sprint implied the lagged time between each context switch was minimized as developers were able to share knowledge across the same domain.&lt;/p&gt;

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

&lt;p&gt;To reiterate, it’s critical for the success to allow developers to focus. Three great starting points to accomplish this are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Have a Sprint Goal&lt;/strong&gt;: The Sprint Goal should be singular, clear, and concise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Realistic Planning&lt;/strong&gt;: Have a light plan that can accommodate more or less work as issues and surprises arise.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Eliminate Multitasking&lt;/strong&gt;: Arguably, points 1 and 2 feed into making this possible. However, developers and managers must understand that multitasking involves context switching, and the lag time accrued in context switching causes a loss in productivity.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Let me know which of these two scenarios is most familiar to you or if you've encountered another type of workplace or management style that doesn't match up with either of the ones here.  Thanks for reading!&lt;/p&gt;

</description>
      <category>development</category>
      <category>developers</category>
      <category>management</category>
      <category>workplace</category>
    </item>
    <item>
      <title>Little Bugs, Big Problems</title>
      <dc:creator>mlr</dc:creator>
      <pubDate>Tue, 18 Jun 2024 01:32:37 +0000</pubDate>
      <link>https://dev.to/mlr/little-bugs-big-problems-59gg</link>
      <guid>https://dev.to/mlr/little-bugs-big-problems-59gg</guid>
      <description>&lt;p&gt;&lt;strong&gt;Software Engineering Manager:&lt;/strong&gt; “Why haven’t you finished this bug? It’s been in implementation for three days… it’s just a bug, it shouldn’t be this hard.”&lt;br&gt;
&lt;strong&gt;Developer:&lt;/strong&gt; “...”&lt;/p&gt;

&lt;p&gt;This interaction is common in software engineering. In this article, I’ll discuss how bugs are perceived by management, product owners, developers, and others involved in the development process. I’ll elaborate on perceptions of priority, work effort, and impact with examples from my experience.&lt;/p&gt;

&lt;p&gt;Three common themes with bugs in past organizations:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;UI Bugs are Top Priority:&lt;/strong&gt; Management and product owners often see non-UI bugs as less important.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Bugs are Easy to Fix:&lt;/strong&gt; Bugs are perceived as less complex than creating new features.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Developers are too Skilled to Write Bugs:&lt;/strong&gt; Insufficient code reviews lead to bug-prone codebases.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Why These Perceptions Exist
&lt;/h2&gt;

&lt;h3&gt;
  
  
  UI Bugs are Top Priority
&lt;/h3&gt;

&lt;p&gt;Some managers and product owners prioritize the visual interface as the most valuable part of the software, disregarding how functionality issues elsewhere affect the interface.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bugs are Easy to Fix
&lt;/h3&gt;

&lt;p&gt;Teams think bugs are easy to fix because the feature’s code is already written. However, it often requires more than a few tweaks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Developers are too Skilled to Write Bugs
&lt;/h3&gt;

&lt;p&gt;Without an engineering framework, the development process becomes disorganized. Lack of code reviews leads to isolated and complex bugs, weakening software architecture.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Just don’t write bugs…”&lt;br&gt;&lt;br&gt;
— Every software engineering manager ever.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I’m not advocating for the above quote. We all write bugs. The key is changing how teams perceive the work needed to fix bugs, reducing complexity, and improving interactions about bugs among team members.&lt;/p&gt;

&lt;h2&gt;
  
  
  Examples
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Organization 1: Mobile Developer for Hire
&lt;/h3&gt;

&lt;p&gt;I worked on a small team building mobile apps with high turnover due to a lack of structure. Developers were frustrated by endlessly fixing broken code without checks and balances. The codebase was a giant ball of mud—functions were tightly coupled, state was unmanaged, and a single class managed everything.&lt;/p&gt;

&lt;p&gt;I was tasked with fixing a UI bug, while 100+ non-UI bugs affecting measurement accuracy were ignored. After two weeks without progress, I proposed organizing around trunk-based development, implementing code reviews, and refactoring the architecture. This plan took months, but we eventually fixed the controls bug and many others.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organization 2: Enterprise Data Analysis Software
&lt;/h3&gt;

&lt;p&gt;Enterprise software always seems riddled with bugs. At one organization, a bug titled “Issue with Customer Interactions Populating” required refactoring the state management system. Management thought bugs were easy to fix because the code was already written. It took days to identify the problem and refactor the system, fixing several other data issues along the way.&lt;/p&gt;

&lt;p&gt;Despite showing my progress, the manager was frustrated by the time taken. In the end, the codebase improved, but I didn’t receive recognition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Organization 3: Big Finance
&lt;/h3&gt;

&lt;p&gt;Financial software requires 24/7 uptime. This team believed experienced developers didn’t write bugs, leading to a lack of code reviews and collaboration. Critical bugs caused production rollbacks and hotfixes, wasting time and causing blame.&lt;/p&gt;

&lt;p&gt;We proposed requiring two code reviewers per PR to ensure quality. This change boosted code quality and caught bugs early. Pair programming and mentorship improved team health and software quality.&lt;/p&gt;

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

&lt;p&gt;Misconceptions about bugs being easy to fix, less important than UI issues, and the idea that skilled developers don’t write bugs lead to challenges. Recognizing the true complexity of bugs, prioritizing structured code reviews, and fostering better communication can enhance code quality, reduce frustrations, and deliver reliable software solutions.&lt;/p&gt;

&lt;p&gt;Please let me know if you want to hear more about my thoughts on development, the software engineering industry, or related topics.  Thanks for reading!&lt;/p&gt;

</description>
      <category>bugs</category>
      <category>career</category>
      <category>softwaredevelopment</category>
      <category>software</category>
    </item>
  </channel>
</rss>
