<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Katie-Lynn (KL)</title>
    <description>The latest articles on Forem by Katie-Lynn (KL) (@kkimble006).</description>
    <link>https://forem.com/kkimble006</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%2F764485%2Fc96c2a3e-394a-49c5-a9bc-b14ae3327b0d.jpeg</url>
      <title>Forem: Katie-Lynn (KL)</title>
      <link>https://forem.com/kkimble006</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/kkimble006"/>
    <language>en</language>
    <item>
      <title>Why you should take more time to write good test names</title>
      <dc:creator>Katie-Lynn (KL)</dc:creator>
      <pubDate>Fri, 05 Aug 2022 14:18:00 +0000</pubDate>
      <link>https://forem.com/jobber/why-you-should-take-more-time-to-write-good-test-names-242g</link>
      <guid>https://forem.com/jobber/why-you-should-take-more-time-to-write-good-test-names-242g</guid>
      <description>&lt;p&gt;We all know writing good tests is important. We all know having high test coverage is important. Sometimes we can forget that writing good test names is important too.&lt;/p&gt;

&lt;p&gt;Imagine we are building out a form to submit a user’s account settings. This form includes contact information, branding colours, and a logo image.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--gzPIP5dU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2h7u5uwaxy24t1yhsu6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--gzPIP5dU--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/uploads/articles/2h7u5uwaxy24t1yhsu6q.png" alt="Image description" width="880" height="868"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let’s use this simple example to highlight three reasons why we should all take more time to write thoughtful test names:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Help reviewers provide better feedback
&lt;/h2&gt;

&lt;p&gt;Meaningful test names help others better understand the intention behind the code. Reviewers can then provide possible alternatives to achieve that intention. They can also ensure you consider appropriate edge cases.&lt;/p&gt;

&lt;p&gt;In our form we want to allow users to customize their account by selecting from a list of colours. To make it simple we decide to use all the default css colours in the select list. We created a helper method to turn them into correctly formatted words.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="nx"&gt;PASS&lt;/span&gt;  &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;util&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;convertToSpaceCase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
  &lt;span class="nx"&gt;convertToSpaceCase&lt;/span&gt; &lt;span class="nx"&gt;helper&lt;/span&gt;
    &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;converts&lt;/span&gt; &lt;span class="nx"&gt;camel&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;to&lt;/span&gt; &lt;span class="nx"&gt;space&lt;/span&gt; &lt;span class="k"&gt;case&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The initial description of the test describes what is expected to happen but not necessarily the intention of this utility function. The feedback we might receive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should this helper method also be able to handle other use cases? Kebab case, pascal case, snake case, etc?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a good question, but it doesn’t help us build a better form for our users. This could lead to wasted time and effort. If the test highlighted the intention, this could generate other questions.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="nx"&gt;PASS&lt;/span&gt;  &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;util&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;convertCssColorToDisplayString&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
  &lt;span class="nx"&gt;convertCssColorToDisplayString&lt;/span&gt; &lt;span class="nx"&gt;helper&lt;/span&gt;
    &lt;span class="nx"&gt;when&lt;/span&gt; &lt;span class="nx"&gt;provided&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;css&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt;
      &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;generates&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;displayable&lt;/span&gt; &lt;span class="nx"&gt;color&lt;/span&gt; &lt;span class="nx"&gt;name&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The feedback we might now receive:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should we use this well maintained external library for displaying css colours?&lt;/li&gt;
&lt;li&gt;Are we following our content style guide with the outputted colour names?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The review is now more focused on the intention of what we are building. This should lead to a better experience for our users. The feedback could still request this become a re-usable generic utility component. But we do know the reviewer understands the intent.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Allow non-engineers to provide feedback
&lt;/h2&gt;

&lt;p&gt;Next we want to build a phone number input component for our form. The requirements for this input include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If a valid phone number is entered it should display the number in a phone number format (ex: +X (XXX) XXX-XXXX)&lt;/li&gt;
&lt;li&gt;If not a valid phone number is entered we display an error message. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The tests we write for this component, keeping them as readable as possible, may look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt; &lt;span class="nx"&gt;PASS&lt;/span&gt;  &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;components&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;PhoneNumberInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
  &lt;span class="nx"&gt;PhoneNumberInput&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;
    &lt;span class="nx"&gt;when&lt;/span&gt; &lt;span class="nx"&gt;provided&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;
      &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;displays&lt;/span&gt; &lt;span class="nx"&gt;properly&lt;/span&gt; &lt;span class="nx"&gt;formatted&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;
    &lt;span class="nx"&gt;when&lt;/span&gt; &lt;span class="nx"&gt;provided&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;without&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;
      &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;displays&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our Product Manager can easily align our work with their acceptance criteria. Our Designer can see considered edge cases. This could spark discussion:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What happens if the phone number is valid but missing a country code?&lt;/li&gt;
&lt;li&gt;What happens if the phone number copied-pasted into the input and includes special characters?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The resulting conversations help ensure your team is building a good solution. We can improve our phone number input component and update our tests.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PASS&lt;/span&gt;  &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;components&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;PhoneNumberInput&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
  &lt;span class="nx"&gt;PhoneNumberInput&lt;/span&gt; &lt;span class="nx"&gt;component&lt;/span&gt;
    &lt;span class="nx"&gt;when&lt;/span&gt; &lt;span class="nx"&gt;provided&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;
      &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;just&lt;/span&gt; &lt;span class="nx"&gt;numbers&lt;/span&gt;
        &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;displays&lt;/span&gt; &lt;span class="nx"&gt;properly&lt;/span&gt; &lt;span class="nx"&gt;formatted&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;
      &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;special&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt;
        &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;displays&lt;/span&gt; &lt;span class="nx"&gt;properly&lt;/span&gt; &lt;span class="nx"&gt;formatted&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;
      &lt;span class="nx"&gt;without&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt; &lt;span class="nx"&gt;country&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt;
        &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;displays&lt;/span&gt; &lt;span class="nx"&gt;properly&lt;/span&gt; &lt;span class="nx"&gt;formatted&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="kd"&gt;with&lt;/span&gt; &lt;span class="nx"&gt;North&lt;/span&gt; &lt;span class="nx"&gt;American&lt;/span&gt; &lt;span class="nx"&gt;country&lt;/span&gt; &lt;span class="nx"&gt;code&lt;/span&gt;
    &lt;span class="nx"&gt;when&lt;/span&gt; &lt;span class="nx"&gt;provided&lt;/span&gt; &lt;span class="nx"&gt;string&lt;/span&gt; &lt;span class="nx"&gt;without&lt;/span&gt; &lt;span class="nx"&gt;phone&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt;
      &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;displays&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  3. Save other’s time
&lt;/h2&gt;

&lt;p&gt;Lastly we want to ensure that only administrators can access this account settings form.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;PASS&lt;/span&gt;  &lt;span class="nx"&gt;src&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;features&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;AccountSettingsForm&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;test&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;js&lt;/span&gt;
  &lt;span class="nx"&gt;AccountSettingsForm&lt;/span&gt; &lt;span class="nx"&gt;page&lt;/span&gt;
    &lt;span class="nx"&gt;when&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;admin&lt;/span&gt;
      &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;form&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;displayed&lt;/span&gt;
    &lt;span class="nx"&gt;when&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;not&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;admin&lt;/span&gt;
      &lt;span class="err"&gt;✓&lt;/span&gt; &lt;span class="nx"&gt;user&lt;/span&gt; &lt;span class="nx"&gt;is&lt;/span&gt; &lt;span class="nx"&gt;redirected&lt;/span&gt; &lt;span class="nx"&gt;and&lt;/span&gt; &lt;span class="nx"&gt;shown&lt;/span&gt; &lt;span class="nx"&gt;an&lt;/span&gt; &lt;span class="nx"&gt;error&lt;/span&gt; &lt;span class="nx"&gt;message&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is extremely simple example. But this test (and all the tests above) will provide a lot of information for our fellow engineers. Engineers working in this code in the future can quickly learn how this feature should work. They may even share with their PM or Designer. For example: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Ah! To test out this form, first I’ll need to make sure I am logged into my test account as an Admin.”&lt;/li&gt;
&lt;li&gt;“We are opening up accounts to European countries. I’ll let my Product Manager know we currently default our phone number country code to North America.”&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;I hope these examples have highlighted the extra value our tests can provide. Clear and descriptive test names are a great resource for both developers and non-developers alike. We can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;better focus on the value we are trying to provide our users&lt;/li&gt;
&lt;li&gt;collaborate with our whole team to improve the experience for our users&lt;/li&gt;
&lt;li&gt;help others quickly understand the expected user experience &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I hope this article encourages you to take an extra few minutes to re-review your test names the next time you write a test. &lt;/p&gt;

</description>
      <category>testing</category>
      <category>programming</category>
    </item>
    <item>
      <title>What does "trusting your gut" look like?</title>
      <dc:creator>Katie-Lynn (KL)</dc:creator>
      <pubDate>Wed, 16 Mar 2022 17:50:57 +0000</pubDate>
      <link>https://forem.com/jobber/what-does-trusting-your-gut-look-like-5h2</link>
      <guid>https://forem.com/jobber/what-does-trusting-your-gut-look-like-5h2</guid>
      <description>&lt;p&gt;At good companies you succeed and you fail together. Everyone is contributing and making decisions with the best intentions. Everything is in service to the company's (and therefore your own) success. And sometimes we fail and that is okay! Failure provides great learning opportunities. But what about the failures where you think to yourself "I knew that was going to happen..."?&lt;/p&gt;

&lt;p&gt;You remember this feeling in the pit of you stomach early on in the project. Maybe it was during a story mapping session or a technical spike and you knew something was missing. I hope you trust your team and were able to share you concerns immediately. Maybe you did, but couldn't clearly articulate the issue so you let it go. Or maybe you didn't share for other reasons. Either way you might be thinking "I wish I had done more X months ago when I had that feeling". Trying to reflect back you might ask "Why didn't I? Would we all be in a much better place if I had?"&lt;/p&gt;

&lt;p&gt;Reasons you may not have shared your concerns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am not as experienced as others on my team so they must be right.&lt;/li&gt;
&lt;li&gt;I am new/inexperienced, I don't want to waste people's time with my silly questions.&lt;/li&gt;
&lt;li&gt;I am tired of conflict, or the back and forth so I am just going to give up.&lt;/li&gt;
&lt;li&gt;I want to be able to trust my teammates so I am just going to let them carry out the plan as they see fit.&lt;/li&gt;
&lt;li&gt;That is not my job.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these are valid reasons. That gut feeling in the moment is an &lt;a href="https://hbr.org/2022/03/how-to-stop-overthinking-and-start-trusting-your-gut"&gt;important tool you get for free&lt;/a&gt;. As Gail Goodman said at &lt;a href="https://www.linkedin.com/posts/activity-6870124807057412096-REgq?utm_source=linkedin_share&amp;amp;utm_medium=ios_app"&gt;Jobber's Own Your Impact day&lt;/a&gt; "Frustration is a clue to investigate". So take time to understand that feeling. &lt;em&gt;Get good at noticing and understanding that feeling&lt;/em&gt;. &lt;/p&gt;

&lt;p&gt;Your first step should be to better understand the "whys" of the project. Read through the project documentation. Try connecting one-on-one with the Product Manager or the Lead Engineer. Go through what decisions have been made and why. This might immediately resolve your concerns! And you can confidently move forward with the project. Or you may have a clearer understanding of your gut feeling. In either case record and share the results of what you understand so far and the outstanding questions - even a simple slack post to your team. This is beneficial for three reasons: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your teammates can confirm that your understanding is correct or add clarification.&lt;/li&gt;
&lt;li&gt;Your other teammates can stay aligned on the “whys” of the project (they might even have similar concerns). &lt;/li&gt;
&lt;li&gt;With your new understanding you can better articulate and start a discussion to address your concerns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The whole team is now in a better place, the “whys” have been reiterated and your specific concerns have been shared. But why else should you always share your concerns? Let's rephrase the above reasons not to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I am not as experienced as others on my team but they have a lot on their plate and may not have considered X,Y, and Z.&lt;/li&gt;
&lt;li&gt;I am new/inexperienced and this is a great opportunity for me to learn. At the very least, the whole team will better understand the "whys" of the project.&lt;/li&gt;
&lt;li&gt;I am tired of the back and forth, so let's document the risks and potential impact of not addressing these concerns. If needed, setup monitoring and define a contingency plan. With a plan in place we can continue on with the project as is.&lt;/li&gt;
&lt;li&gt;I want to be able to trust my teammates so I am going to ask good questions to help the whole team stay aligned and help ensure they succeed as they carry out their plan.&lt;/li&gt;
&lt;li&gt;That is my job, I need to share my concerns to better help my team and the company succeed.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Let’s go through an example:&lt;/p&gt;

&lt;p&gt;My team was spiking out and planning optimizations for a poor performing component in our mobile app. I understood the importance of this work, our customers were frustrated. But I started getting an uneasy feeling. So I setup time to chat with my team's Product Manager to better understand the problem. During that discussion I realized that we hadn’t identified the true source of the performance issues. We were planning a number of improvements but we hadn’t verified if they would address the root cause of the problem. As a result we decided to add those outstanding questions into our in-progress spike. The whole team then worked on getting answers before moving forward with the right solution. If we didn't have this chat now, we could have risked weeks or months of work building solutions that might not have actually improved the experience for our customers.&lt;/p&gt;

&lt;p&gt;So next time you have that gut feeling use it! It is an important tool you can get better with over time. David Epstein notes in his book &lt;a href="https://www.goodreads.com/book/show/41795733-range"&gt;Range: Why Generalists Triumph in a Specialized World&lt;/a&gt; that &lt;em&gt;good teams are responsible for protesting if something doesn't feel right&lt;/em&gt;. This is even more important when &lt;a href="https://dev.to/jobber/the-real-job-managing-uncertainty-and-the-unknown-18c8"&gt;dealing with unknowns&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What do you do when your gut starts talking?&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Jobber
&lt;/h2&gt;

&lt;p&gt;We are hiring for remote positions across Canada at all software engineering levels! &lt;/p&gt;

&lt;p&gt;Our awesome &lt;a href="https://getjobber.com/"&gt;Jobber&lt;/a&gt; technology teams span across Payments, Infrastructure, AI/ML, Business Workflows &amp;amp; Communications. We work on cutting edge &amp;amp; modern tech stacks using React, React Native, Ruby on Rails, &amp;amp; GraphQL. &lt;/p&gt;

&lt;p&gt;If you want to be a part of a collaborative work culture, help small home service businesses scale and create a positive impact on our communities, then visit &lt;a href="https://getjobber.com/about/careers/?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=eng_blog"&gt;our careers site&lt;/a&gt; to learn more!&lt;/p&gt;

</description>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>The Real Job: Managing Uncertainty and The Unknown</title>
      <dc:creator>Katie-Lynn (KL)</dc:creator>
      <pubDate>Tue, 30 Nov 2021 18:43:02 +0000</pubDate>
      <link>https://forem.com/jobber/the-real-job-managing-uncertainty-and-the-unknown-18c8</link>
      <guid>https://forem.com/jobber/the-real-job-managing-uncertainty-and-the-unknown-18c8</guid>
      <description>&lt;p&gt;There are an endless amount of &lt;em&gt;things&lt;/em&gt; to learn as a software developer. It can be difficult to know what to focus on to ensure you advance in your career. Learning to manage uncertainty and the unknown is one of the most important skills to master. Experienced developers quickly (and effectively) identify, reduce, and plan for uncertainty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What does managing uncertainty look like?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Early on in a developer’s career the amount of what is not known can be overwhelming. To combat that feeling one can become eager to learn as much as possible as fast as possible. This will lead to burn out and can even cause stagnation. Instead start by identifying the specific uncertainty that needs addressing.&lt;/p&gt;

&lt;p&gt;Let’s use a made up example: Christine is a junior developer who is two months into her first software development role at Company ABC. She is uncertain about many things, including how to use her new tools, the processes that Company ABC has for releasing features, and just general best practices. Christine lists out everything she doesn't know and selects the top 3. Christine uses &lt;a href="https://www.linkedin.com/in/effectiveengineer"&gt;Edmond Lau’s&lt;/a&gt; definition of leverage to decide what is most important (to learn more check out his book &lt;a href="https://www.effectiveengineer.com/book"&gt;The Effective Engineer&lt;/a&gt;). There will be a long-lasting impact on Christine’s team if she can resolve or reduce these 3 uncertainties:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How can I better use my integrated development environment (IDE) to read and write code faster?&lt;/li&gt;
&lt;li&gt;How can I write better tests to ensure quality code coverage?&lt;/li&gt;
&lt;li&gt;How can I understand a new area of the code base to prepare for upcoming work?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next she refines this list to be more specific:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How can I better use my IDE to read and write code faster?&lt;/li&gt;
&lt;li&gt;What are the quick keys to search and find code in my IDE?&lt;/li&gt;
&lt;li&gt;What are the code completion and templating tools in my IDE?&lt;/li&gt;
&lt;li&gt;What add-ons or tooling can I add in my IDE to auto generate common code snippets?&lt;/li&gt;
&lt;li&gt;How can I write better tests to ensure quality code coverage?&lt;/li&gt;
&lt;li&gt;What resources can I use to practice working within our testing framework?&lt;/li&gt;
&lt;li&gt;What is Company ABC’s testing strategy?&lt;/li&gt;
&lt;li&gt;What golden examples do we have available to reference?&lt;/li&gt;
&lt;li&gt;How can I understand a new area of the code base to prepare for upcoming work?&lt;/li&gt;
&lt;li&gt;What current resources and subject matter experts are available?&lt;/li&gt;
&lt;li&gt;What does the data structure look like and how is it displayed to our users?&lt;/li&gt;
&lt;li&gt;What do the tests say about how this code should work?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These will be easy to address! Christine can search existing developer blog posts and technical guides on the internet. She can also use company resources and ask her coworkers for support. She schedules 30 minutes everyday, for the next two weeks, to investigate these questions. She also uses that time to practice what she learns. Christine does a walk through of the new area of code with Jerry, who is very familiar with the code. She now understands at a high level how that code works. She is prepared for the upcoming work.&lt;/p&gt;

&lt;p&gt;It's now time to estimate and plan the next increment of work with her team. Christine shares what she understands of the work and what she knows she still needs to learn. She also shares her new reduced capacity and that she will be taking 30 minutes everyday to learn and improve.&lt;/p&gt;

&lt;p&gt;The team strategizes about how to tackle that upcoming work. They decide a senior developer will pair with Christine. This plan will ensure that the work gets done on time. It also ensures she has immediate support in understanding the remaining code uncertainty.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How do experienced developers manage uncertainty?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The uncertainty grows as software developers progress in their career. The resources available to reduce that uncertainty shrink. And the type of uncertainty changes.&lt;/p&gt;

&lt;p&gt;Let's fast forward 10 years and Christine is now a senior developer tackling new problems. She is ready for the unknown. She is currently investigating how to integrate SMS into Company ABC’s mobile app. She suspects that delivering this project will require significant effort. To prepare for this project Christine starts to list out everything she doesn’t know.&lt;/p&gt;

&lt;p&gt;There are many techniques to identify and prioritize project uncertainty. One great way is story and assumption mapping explained by &lt;a href="https://www.linkedin.com/in/teresatorres"&gt;Teresa Torres&lt;/a&gt; in her book &lt;a href="https://www.producttalk.org/2021/05/continuous-discovery-habits/"&gt;Continuous Discovery Habits&lt;/a&gt;. Christine generates her list by considering her past projects. The “surprises'' in other large projects were great learning opportunities. Checkout how &lt;a href="https://getjobber.com/"&gt;Jobber&lt;/a&gt; learns from “surprises'' in &lt;a href="https://www.linkedin.com/pulse/incident-post-mortems-jobber-jesse-van-herk?trk=public_post-content_share-article"&gt;this article about Post Mortems&lt;/a&gt;. Christine also asks her Designer, her Product Manager and subject matter experts at Company ABC to refine and add to this list.&lt;/p&gt;

&lt;p&gt;SMS in the mobile app project:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;How can we immediately show new SMS in the UI when user is looking at the app? Does our existing infrastructure enable this?&lt;/li&gt;
&lt;li&gt;How can we send a push notification to our users when they receive a new SMS?&lt;/li&gt;
&lt;li&gt;How can/should we track usage of SMS in the app?&lt;/li&gt;
&lt;li&gt;How can we …&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Next Christine works with her team to identify the riskiest uncertainty in the list. These are questions that, if answered "no" or "not possible", would stop the project. They are often about the feasibility of a solution. By answering these questions up front the team won’t waste time on an impossible project.&lt;/p&gt;

&lt;p&gt;Christine schedules time for her team to answer these specific questions. The answers look promising so she then organizes a mini-hackathon. This is a time-boxed event for her team to build a working prototype as fast as possible. Christine and her team complete this work with a better understanding of the code. They also reduced some secondary uncertainties, including the decision on whether to use a library or build a UI to display SMS. And lastly, they add new uncertainties they discovered to the list.&lt;/p&gt;

&lt;p&gt;Christine can use what she now knows (and what she now knows she doesn't know) to better estimate and plan work. Her team estimates the work considering time to develop, resources and the remaining uncertainty. She assigns higher estimates to the parts of work with higher uncertainty. Next she provides a realistic project timeline to her stakeholders. The SMS in the mobile app project will take 3 to 4 months considering existing commitments.&lt;/p&gt;

&lt;p&gt;It's unrealistic to reduce all uncertainty up front. Christine plans to tackle the parts of the project with the highest uncertainty first. Christine and her team can inform their stakeholders about new discoveries as early as possible. Then together they can decide to adjust the project timelines or pivot to a different project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why is this important? &lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Identifying, reducing, and planning for uncertainty allows companies to better compare projects. Companies can identify the higher leverage projects to work on now. Managing uncertainty well also allows teams to build and maintain trust with stakeholders.&lt;/p&gt;

&lt;p&gt;Christine has successfully delivered on her last two projects. Her stakeholders at Company ABC are confident she will meet her commitment with this new project. They can appropriately plan their own work around the 3 to 4 month timeline.&lt;/p&gt;

&lt;p&gt;To be successful like Christine, start accepting and welcoming the unknown. It’s in this uncertain space where important growth opportunities live. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;How well do you manage the unknown?&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  About Jobber
&lt;/h2&gt;

&lt;p&gt;We are hiring for remote positions across Canada at all software engineering levels! &lt;/p&gt;

&lt;p&gt;Our awesome Jobber technology teams span across Payments, Infrastructure, AI/ML, Business Workflows &amp;amp; Communications. We work on cutting edge &amp;amp; modern tech stacks using React, React Native, Ruby on Rails, &amp;amp; GraphQL. &lt;/p&gt;

&lt;p&gt;If you want to be a part of a collaborative work culture, help small home service businesses scale and create a positive impact on our communities, then visit our &lt;a href="https://getjobber.com/about/careers?utm_source=devto&amp;amp;utm_medium=social&amp;amp;utm_campaign=eng_blog"&gt;careers site&lt;/a&gt; to learn more!&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>career</category>
      <category>discuss</category>
      <category>motivation</category>
    </item>
  </channel>
</rss>
