<?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: Jon Samp</title>
    <description>The latest articles on DEV Community by Jon Samp (@jonsamp).</description>
    <link>https://dev.to/jonsamp</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%2F115884%2F0aaa515c-3ab8-4b26-a7e3-b01875a876f0.jpg</url>
      <title>DEV Community: Jon Samp</title>
      <link>https://dev.to/jonsamp</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jonsamp"/>
    <language>en</language>
    <item>
      <title>Best practices for working together</title>
      <dc:creator>Jon Samp</dc:creator>
      <pubDate>Sat, 04 Jan 2020 19:47:48 +0000</pubDate>
      <link>https://dev.to/jonsamp/best-practices-for-working-together-57jc</link>
      <guid>https://dev.to/jonsamp/best-practices-for-working-together-57jc</guid>
      <description>&lt;p&gt;I've had many jobs over the past decade, including genetics researcher, admissions counselor, apple retail employee, and now I'm a software developer. Being a software developer is the best job I've had (by far), but there is a downside I rarely talk about: working with other people has become harder for me. More and more I retreat into my head, get frustrated, then I don't communicate effectively.&lt;/p&gt;

&lt;p&gt;Like any problem, it's much easier to solve when you can define the problem and create a goal post to shoot for. Below are three problems I've noticed on every dev team I've been a part of, with best practices to address them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Feedback
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Problem: Teams need feedback to improve, but it's hard to tell coworkers your opinions (for a lot of reasons).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Giving feedback to each other helps us grow together and to build the best stuff. There's a variety of feedback styles that can really help us grow together, but there are other styles that can do more harm than good. Great feedback has two traits: incredibly specific and given as quickly as possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Specificity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Saying that a piece of work looks "really good" or feels "not quite up to our standards" is feedback that is non-specific and requires the receiver of that feedback to guess about what you really mean. Great feedback sounds like: "This piece of work has a nice, step-by-step flow with its numbered items" or "this button does not match our brand colors and caught my eye when i saw this page".&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Timeliness&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Feedback given months after the event makes it difficult to iterate and learn. In addition, the receiver of the feedback and the giver of feedback will have a growing difference of what happened and how it turned out. Giving feedback as soon as possible is important to getting value from it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Amplification
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Problem: New ideas get shot down before they can grow into great ideas.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Creative thinking and new ideas are our best asset to building incredible products. It's natural to hear a new idea and to find issues with it and to think of ways it may not work, or unknown factors around things we don't know. &lt;/p&gt;

&lt;p&gt;Instead of poking holes in ideas at the start, we can amplify them by repeating them out loud and thinking about how they could work. This is especially important at the beginning of the ideation/proposal process. &lt;/p&gt;

&lt;p&gt;The goal is to amplify each other's ideas to better understand how they could grow. We can always find issues/unknowns later. The beginning of a product process should start with growing an idea instead of snuffing it out.&lt;/p&gt;

&lt;p&gt;A way to do this is by repeating the person's idea back to them, and adding something of your own. Just like the "yes, and ..." &lt;a href="https://en.wikipedia.org/wiki/Yes,_and..."&gt;improv exercise&lt;/a&gt;, we can encourage the people around us to propose ideas and grow them (this is in opposition to the "yes, but... " exercise, that works in the same way and instead shuts down creativity).&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The "Yes" portion of the rule encourages the acceptance of the contributions added by others. Participants in an improvisation are encouraged to agree to proposition, fostering a sense of cooperation rather than shutting down the suggestion and effectively ending the line of communication. ~ &lt;a href="https://en.wikipedia.org/wiki/Yes,_and..."&gt;Wikipedia&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Positive intent
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Problem: How can we know the hater on the team doesn't hate &lt;em&gt;me&lt;/em&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When receiving feedback or when talking to others, assume positive intent. This is in an effort to avoid falling back to the human default of defensiveness. Defensiveness arises out of assuming someone's intention when they provide feedback or comments about a piece of work. By assuming an intention, we shut out critical information that can help us make progress.&lt;/p&gt;

&lt;p&gt;By assuming that everyone has positive intent, we can diffuse defensiveness by knowing that the person speaking to us means well, even if what they are saying runs counter to our efforts. &lt;/p&gt;

&lt;p&gt;A practical way to do this is to ask clarifying questions about the opposing point of view to make it as specific and clear as possible (instead of defending your original stance). After that, then you can make an informed decision about how to proceed. Read more from &lt;a href="https://knowyourteam.com/blog/2017/12/01/the-power-of-assuming-positive-intent/"&gt;this article&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>teamwork</category>
      <category>career</category>
    </item>
    <item>
      <title>How to create React Native/Expo npm packages</title>
      <dc:creator>Jon Samp</dc:creator>
      <pubDate>Mon, 30 Dec 2019 04:00:38 +0000</pubDate>
      <link>https://dev.to/jonsamp/how-to-create-react-native-expo-npm-packages-1b7g</link>
      <guid>https://dev.to/jonsamp/how-to-create-react-native-expo-npm-packages-1b7g</guid>
      <description>&lt;p&gt;Developing npm modules that work with Expo is different from the traditional flow that you can use with a regular 'ol React project. Usually in a React project, you could create a module inside a folder on your computer, then run &lt;code&gt;yarn link&lt;/code&gt; inside it and proceed to link it inside your testing playground. &lt;/p&gt;

&lt;p&gt;Expo is powered by React Native, which uses a bundler to bundle your app's dependencies. This prevents &lt;code&gt;yarn link&lt;/code&gt; from working as usual.&lt;/p&gt;

&lt;p&gt;To develop a package, there are two different strategies depending on what you need to do. You might need to create the contents of the package, or you might need to verify it works as an import in real project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Creating the contents of the package
&lt;/h2&gt;

&lt;p&gt;Create a testing app with &lt;code&gt;expo init&lt;/code&gt;. Inside it, create a folder named &lt;strong&gt;your-package-name&lt;/strong&gt;, with in an &lt;strong&gt;index.tsx&lt;/strong&gt; file inside. The file structure should look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;testing-app/
  your-package-name/
    index.tsx
    ...
  App.tsx
  ...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Inside &lt;strong&gt;App.tsx&lt;/strong&gt;, you can now &lt;code&gt;import Foo from './your-package-name'&lt;/code&gt;, and develop it just like a regular component --that's because this is the exact same as creating a regular component. By doing this, you get the awesome dev-experience/fast-reload of Expo.&lt;/p&gt;

&lt;h2&gt;
  
  
  Testing the package as a dependency
&lt;/h2&gt;

&lt;p&gt;When the package is in a spot that is complete, you are ready to test it as an import into a real project. We're going to do this without publishing it to npm or using a tool like &lt;code&gt;yalc&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;In another spot on your computer, create a folder named after your package: &lt;strong&gt;your-package-name&lt;/strong&gt;. Inside it, copy over all the files that make up your package. Then, run &lt;code&gt;expo init example&lt;/code&gt; to create an &lt;strong&gt;example&lt;/strong&gt; folder inside your package folder, like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;your-package-name
  example/
    ...[expo app here]
  index.tsx
  ...

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



&lt;p&gt;To install the package in the &lt;strong&gt;example&lt;/strong&gt; Expo app you just made, &lt;code&gt;cd&lt;/code&gt; into the parent &lt;strong&gt;your-package-name&lt;/strong&gt; directory, and run &lt;code&gt;npm pack&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;This will package up your module into a &lt;strong&gt;.tgz&lt;/strong&gt; file. When you run the command, the last line of output will tell you the file name that it just saved (it should look like: &lt;strong&gt;your-package-name-version.tgz&lt;/strong&gt;). Copy it, then &lt;code&gt;cd&lt;/code&gt; back into the &lt;strong&gt;example&lt;/strong&gt; folder and run &lt;code&gt;yarn add [your-copied-name].tgz&lt;/code&gt; and your package will be installed as a dependency. Inside the Example, you can now import it with &lt;code&gt;import Foo from 'your-package-name'&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Now you can create an example that will test your package within an app, and if you commit it to GitHub, others can also see a working example of your package too.&lt;/p&gt;

&lt;p&gt;Once your package is in a good spot, follow with your &lt;code&gt;npm publish&lt;/code&gt; flow.&lt;/p&gt;

&lt;p&gt;To see an example of an Expo compatible project with an &lt;strong&gt;example&lt;/strong&gt; folder, check out my &lt;a href="https://github.com/jonsamp/react-native-fade"&gt;&lt;code&gt;react-native-fade&lt;/code&gt; package&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Happy package-ing!&lt;/p&gt;

</description>
      <category>npm</category>
      <category>reactnative</category>
      <category>expo</category>
    </item>
  </channel>
</rss>
