<?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: Rouan Wilsenach</title>
    <description>The latest articles on Forem by Rouan Wilsenach (@rouanw).</description>
    <link>https://forem.com/rouanw</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%2F572731%2F74d7d42e-09aa-4994-8ae3-b1da1e4c2382.jpeg</url>
      <title>Forem: Rouan Wilsenach</title>
      <link>https://forem.com/rouanw</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rouanw"/>
    <language>en</language>
    <item>
      <title>Use git bisect to see when you broke the tests</title>
      <dc:creator>Rouan Wilsenach</dc:creator>
      <pubDate>Mon, 06 Sep 2021 10:41:37 +0000</pubDate>
      <link>https://forem.com/rouanw/use-git-bisect-to-see-when-you-broke-the-tests-48io</link>
      <guid>https://forem.com/rouanw/use-git-bisect-to-see-when-you-broke-the-tests-48io</guid>
      <description>&lt;p&gt;I wanted to push a number of commits but my tests failed. Naughty me for not running them more often. Anyway, here's how to use &lt;code&gt;git bisect&lt;/code&gt; to tell when they started failing.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect start HEAD origin/main
git bisect run npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should get a result something like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;b73399a404433af29d95fb66d7b7facc1de49aa3 is the first bad commit
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And then you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect reset
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;when you're done to exit bisect mode and go about fixing things.&lt;/p&gt;

&lt;h2&gt;
  
  
  A bit more explanation
&lt;/h2&gt;

&lt;p&gt;Here are some details if you want them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Start
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect start HEAD origin/main
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The syntax here is &lt;code&gt;git bisect start &amp;lt;known-bad-commit&amp;gt; &amp;lt;known-good-commit&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In the example above I've used &lt;code&gt;HEAD&lt;/code&gt; as a known bad commit, because it's the latest commit. My example assumes the remote is called &lt;code&gt;origin&lt;/code&gt; and the branch is &lt;code&gt;main&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;You could narrow the range further, but this will work well if your tests are fast enough, and you don't have too many commits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Run
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git bisect run npm &lt;span class="nb"&gt;test&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The syntax here is &lt;code&gt;git bisect run &amp;lt;command&amp;gt;&lt;/code&gt;, where &lt;code&gt;command&lt;/code&gt; will exit with &lt;code&gt;0&lt;/code&gt; if all is well and a non-zero code if not. (Read the docs if this doesn't work because there are some exceptions, but should be a fine assumption in most cases.)&lt;/p&gt;

&lt;p&gt;If you don't have an automated way of telling whether things are fine, you can also do your testing manually. Run &lt;code&gt;git bisect bad&lt;/code&gt; or &lt;code&gt;git bisect good&lt;/code&gt; to mark commits as good as bad. Git will walk you through it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://git-scm.com/docs/git-bisect#_examples"&gt;https://git-scm.com/docs/git-bisect#_examples&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>git</category>
      <category>programming</category>
    </item>
    <item>
      <title>Writing inclusive job adverts</title>
      <dc:creator>Rouan Wilsenach</dc:creator>
      <pubDate>Thu, 22 Jul 2021 14:09:36 +0000</pubDate>
      <link>https://forem.com/rouanw/writing-inclusive-job-adverts-1n0c</link>
      <guid>https://forem.com/rouanw/writing-inclusive-job-adverts-1n0c</guid>
      <description>&lt;p&gt;I recently spent some time helping a startup set up their technical hiring process. Diversity and inclusion are important to me and &lt;a href="https://dev.to/rouanw/want-to-be-a-better-developer-work-somewhere-inclusive-3j34"&gt;I love working at inclusive companies&lt;/a&gt;, so I wanted to make sure the hiring process was as inclusive as possible to help us build a diverse team.&lt;/p&gt;

&lt;p&gt;Here are the highlights of what I learned about inclusive job adverts. &lt;/p&gt;

&lt;h2&gt;
  
  
  Be explicit about your desire to be inclusive
&lt;/h2&gt;

&lt;p&gt;Here's an easy win. Say somewhere in your job advert that you're open to applicants from different backgrounds. This template can get you started:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;[Company Name] is an equal opportunity employer. We celebrate diversity and are committed to creating an inclusive environment for all employees. We welcome applications from those typically underrepresented in tech.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Don't pretend your company is more inclusive than it is. Don't make any wild claims. Just say you'd love to hear from folks who are underrepresented – it makes a big difference to whether someone reading your job ad is likely to apply.&lt;/p&gt;

&lt;h2&gt;
  
  
  Optimise for clarity and transparency
&lt;/h2&gt;

&lt;p&gt;What does it take for someone to go from reading your job advert to clicking "Apply"? Turns out that folks from underrepresented groups are less likely to apply for a job when the job description doesn't clearly set expectations. Here are some areas where you want to make sure you provide as much clarity as possible:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The job application process. This includes what the steps are, how long they take and how long the applicant will need to wait for feedback.&lt;/li&gt;
&lt;li&gt;What the role entails. What will the successful candidate's average day look like?&lt;/li&gt;
&lt;li&gt;What does the company do? What is the culture like?&lt;/li&gt;
&lt;li&gt;Benefits and compensation&lt;/li&gt;
&lt;li&gt;Constraints or deal-breakers. For example, is the job remote-friendly? Do you need to live in a specific country? &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Don't over-specify requirements
&lt;/h2&gt;

&lt;p&gt;We've all seen the classic bulleted list of requirements:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Master's degree in Computer Science&lt;/li&gt;
&lt;li&gt;Docker&lt;/li&gt;
&lt;li&gt;React&lt;/li&gt;
&lt;li&gt;Node&lt;/li&gt;
&lt;li&gt;Redux&lt;/li&gt;
&lt;li&gt;Postgres&lt;/li&gt;
&lt;li&gt;Woodwork&lt;/li&gt;
&lt;li&gt;Test-driven development&lt;/li&gt;
&lt;li&gt;Jenkins&lt;/li&gt;
&lt;li&gt;90s Sitcom Trivia&lt;/li&gt;
&lt;li&gt;AWS InfiniDash&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How is a person looking at this list supposed to make sense of it? Do they need to have done all of it in order to be considered? What if they're super-experienced with Node and React but haven't used Redux? Are they a bad hire?&lt;/p&gt;

&lt;p&gt;The problem with exhaustive lists of requirements is that they facilitate self-selection: the process where a candidate says to themselves "I don't meet the requirements" and doesn't apply. Research shows that women are less likely to apply for job adverts where they don't match all the listed requirements. Is Redux experience really something worth losing a great candidate over?&lt;/p&gt;

&lt;p&gt;Rather have a short list of the requirements that really matter. Karen Catlin recommends picking the five skills your candidate truly needs and including only those. She also advises that you avoid extra-curricular requirements like a well-populated GitHub profile, as these unnecessarily filter out great candidates.&lt;/p&gt;

&lt;h2&gt;
  
  
  Describe experience instead of prescribing it
&lt;/h2&gt;

&lt;p&gt;What makes a software engineer experienced? This question is surprisingly easy to answer wrong. I've worked with self-taught engineers who can code circles around some folks that have an M.Sc. in Computer Science. Ten years of experience could be ten years of doing the same thing repeatedly and learning nothing. Someone else might have learned everything they need to know in a few short years, while working with world-class engineers.&lt;/p&gt;

&lt;p&gt;In the job adverts I put together, I tried an experiment. Instead of prescribing professional experience, I &lt;strong&gt;described&lt;/strong&gt; it. Here's what I mean:&lt;/p&gt;

&lt;p&gt;Traditional prescription of experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;At least a Bachelor's degree in Computer Science or related field&lt;/li&gt;
&lt;li&gt;5 years of software development experience&lt;/li&gt;
&lt;li&gt;At least 2 years of experience working with relational databases&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  My experiment: a description of experience level
&lt;/h3&gt;

&lt;blockquote&gt;
&lt;p&gt;This example is for what you might call a "mid-level" engineer&lt;/p&gt;
&lt;/blockquote&gt;

&lt;ul&gt;
&lt;li&gt;There is a technical stack in which you feel confident delivering features&lt;/li&gt;
&lt;li&gt;You have a broad base of engineering skills and have started to deepen your knowledge in one or two areas&lt;/li&gt;
&lt;li&gt;You're able to contribute to technical conversations about how to solve problems&lt;/li&gt;
&lt;li&gt;You ask questions about whether you're building the right thing, rather than just about how you're building it&lt;/li&gt;
&lt;li&gt;You've made some technical mistakes and learnt from them&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This way, you're building a clear picture of where a person should be at in their career. You're talking about how you might judge someone's experience, rather than providing a box-ticking experience. This approach lets the candidate see what's important to you. If you've got well-articulated descriptions of your company's job grades or salary bands, you might find something there you can re-purpose. As a bonus, this may make salary negotiation fairer because the job requirements will be aligned with your internal promotion and pay processes.&lt;/p&gt;

&lt;p&gt;It is also worth including some wording that encourages folks to apply even if they don't meet all the listed requirements.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use some objective analysis
&lt;/h2&gt;

&lt;p&gt;Turns out people have done some research into the kind of language turns people away from job adverts. For example, the words we use are subtly "gender-coded". The research shows that you'll turn women away if your job description that is full of masculine-coded words.&lt;/p&gt;

&lt;p&gt;There's a great &lt;a href="http://gender-decoder.katmatfield.com/"&gt;online tool&lt;/a&gt; you can use to highlight gender-coded language in your job description. If you have too much masculine language, you can spend a little time rewording things to be more inclusive.&lt;/p&gt;

&lt;p&gt;For the startup I helped, it turned out the job adverts were "strongly masculine-coded". Some example words included: "leading", "competitors" and "decide".  Remember that none of the words are inherently bad. It's just that, once you have enough of them, your description starts to put people off applying for your job. Rather drop them and appeal to a broader audience. As a plus, the research shows the number of "feminine-coded" language in a job description has no impact on the number of male applicants.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ask for feedback
&lt;/h2&gt;

&lt;p&gt;Okay, so you've spent some time improving your job advert. Now test it. Reach out to your network and find some people who match the demographic you're trying to reach. Show them your job adverts and ask them how it makes them feel. Implement their suggestions. They'll also let you know if you've said something silly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Better job  adverts lead to better candidates
&lt;/h2&gt;

&lt;p&gt;Turns out the trick to attracting applicants from underrepresented backgrounds is simply to write a better job description. If you want to attract the many fantastic software engineers from underrepresented backgrounds, you need to put in a bit of work and create a better job advert. Be clear, be concise and be objective.&lt;/p&gt;

&lt;h2&gt;
  
  
  Resources
&lt;/h2&gt;

&lt;p&gt;I'd recommend you read &lt;a href="https://betterallies.com/buy/"&gt;The “Better Allies” Approach to Hiring&lt;/a&gt;. It's a great resource, with practical tips (checklists, even) for making your overall hiring process more inclusive.&lt;/p&gt;

</description>
      <category>inclusion</category>
      <category>hiring</category>
      <category>culture</category>
    </item>
    <item>
      <title>TIL: Add your git repo to a tarball</title>
      <dc:creator>Rouan Wilsenach</dc:creator>
      <pubDate>Tue, 23 Feb 2021 20:04:41 +0000</pubDate>
      <link>https://forem.com/rouanw/til-add-your-git-repo-to-a-tarball-1f6p</link>
      <guid>https://forem.com/rouanw/til-add-your-git-repo-to-a-tarball-1f6p</guid>
      <description>&lt;p&gt;Today I learned that you can neatly pack all of the files in your git repository into a tarball:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git archive &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; my_repo.tar &lt;span class="nt"&gt;-v&lt;/span&gt; HEAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The best thing about this is it will automatically honour your &lt;code&gt;.gitignore&lt;/code&gt; file, so won't include any files you don't care about.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other formats
&lt;/h2&gt;

&lt;p&gt;It also works with zip files:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git archive &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;zip &lt;span class="nt"&gt;-o&lt;/span&gt; my_repo.zip &lt;span class="nt"&gt;-v&lt;/span&gt; HEAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Excluding files
&lt;/h2&gt;

&lt;p&gt;In order to exclude files from the archive, you can specify them in a &lt;a href="https://git-scm.com/docs/gitattributes"&gt;&lt;code&gt;.gitattributes&lt;/code&gt;&lt;/a&gt; file. Here's an example that excludes the &lt;code&gt;README.md&lt;/code&gt; file from the export:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;README.md export-ignore
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Including the git repo itself
&lt;/h2&gt;

&lt;p&gt;It doesn't include the git repository itself (the &lt;code&gt;.git&lt;/code&gt; directory). If you'd like to include it, you can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git archive &lt;span class="nt"&gt;--format&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-o&lt;/span&gt; my_repo.tar &lt;span class="nt"&gt;-v&lt;/span&gt; HEAD
&lt;span class="nb"&gt;tar&lt;/span&gt; &lt;span class="nt"&gt;-rf&lt;/span&gt; my_repo.tar .git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/a/3069593/1688034"&gt;https://stackoverflow.com/a/3069593/1688034&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://stackoverflow.com/a/11621730/1688034"&gt;https://stackoverflow.com/a/11621730/1688034&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>todayilearned</category>
      <category>programming</category>
      <category>git</category>
    </item>
    <item>
      <title>Want to be a better developer? Work somewhere inclusive.</title>
      <dc:creator>Rouan Wilsenach</dc:creator>
      <pubDate>Wed, 03 Feb 2021 11:41:02 +0000</pubDate>
      <link>https://forem.com/rouanw/want-to-be-a-better-developer-work-somewhere-inclusive-3j34</link>
      <guid>https://forem.com/rouanw/want-to-be-a-better-developer-work-somewhere-inclusive-3j34</guid>
      <description>&lt;p&gt;When we fail to welcome diversity, we're missing out on being better at software engineering.&lt;/p&gt;

&lt;p&gt;The skills you need to thrive in an inclusive workplace are the same skills that will make you an amazing software developer. So not only do we have teams where diversity is not valued – the developers in those teams are missing out on the chance to be so much better at their jobs!&lt;/p&gt;

&lt;h2&gt;
  
  
  The skills that make you inclusive and awesome
&lt;/h2&gt;

&lt;p&gt;Let's break this down. I'm going to show you three skills you need in order to succeed in a diverse workplace – three skills that will also make you a stand-out software developer.&lt;/p&gt;

&lt;h3&gt;
  
  
  Communication
&lt;/h3&gt;

&lt;p&gt;If the person you're talking to comes from a different background, you might have a harder time understanding them or getting your point across. When you don't share the same childhood experiences, don't watch the same TV shows or live in the same country, you have to make a special effort to understand each other.&lt;/p&gt;

&lt;p&gt;This requires a really good communication skillset. The same skillset that is great for explaining technical topics to people without a technical background, onboarding a junior developer or finding the right way to present data to a user.&lt;/p&gt;

&lt;h3&gt;
  
  
  Empathy and imagination
&lt;/h3&gt;

&lt;p&gt;Working effectively with someone different from yourself requires something we often call &lt;a href="https://en.wiktionary.org/wiki/empathy"&gt;empathy&lt;/a&gt; – the ability to see things from their perspective.&lt;/p&gt;

&lt;p&gt;Empathy also helps you:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Collaborate with co-workers playing different roles e.g. product management, design, legal, sales&lt;/li&gt;
&lt;li&gt;Better understand what your users or customers need from the software you're building (spoiler: your user base is likely very diverse)&lt;/li&gt;
&lt;li&gt;Guide someone you mentor as they try to visualise a career path or a find a resolution to a difficult situation&lt;/li&gt;
&lt;li&gt;Review code well - this requires the ability to understand what the person was trying to achieve through the code they wrote&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's where I think things get really interesting. At its core, empathy is an act of &lt;strong&gt;imagination&lt;/strong&gt;. To truly understand someone, you need to put yourself in their shoes and see the world like they do. It's easy to leap from here to the general value of imagination in the workplace – imaginative thinkers are better problem solvers, more creative, more resourceful.&lt;/p&gt;

&lt;p&gt;But this extends to writing code too:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Writing software is in many ways creating something out of nothing and for that you need a bit of imagination to understand what it is you're trying to create&lt;/li&gt;
&lt;li&gt;Debugging software requires the ability to imagine what's happening in the computer's memory&lt;/li&gt;
&lt;li&gt;Software design is often about creating useful abstractions. These act as metaphors for a system and you need to use your imagination to create them and understand them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Self-awareness
&lt;/h3&gt;

&lt;p&gt;How do you see yourself? Are you aware of your strengths and weakness? Of your prejudices and biases? Of how you come across? Being able to answer these questions is crucial to working effectively with people from different backgrounds and is also the bedrock of a good software engineering career.&lt;/p&gt;

&lt;p&gt;Knowing yourself will allow you to better plan your career, know the skills you need to build and gather the right feedback to support your learning. It will also help you understand the adjustments you need to make to respond to different situations (e.g. a new project, a tough job interview, learning a new UI framework).&lt;/p&gt;

&lt;h2&gt;
  
  
  A fuller bookshelf
&lt;/h2&gt;

&lt;p&gt;Not only will working in an inclusive workplace help you gain the skills above, but I've found that working with people from a variety of backgrounds gives you a much broader range of skills to draw from, to lean on and to enjoy learning from. If you imagine the skill-set of your team as a bookshelf with each book representing a skill, a diverse team means you get to work with a much fuller bookshelf. &lt;/p&gt;

&lt;h2&gt;
  
  
  Good engineering and diversity are on the same path. Are you?
&lt;/h2&gt;

&lt;p&gt;If you're hiring software developers and you think you have to make a choice between hiring a diverse team and a good team – think again.&lt;/p&gt;

&lt;p&gt;If you're a software developer looking for your next role (irrespective of your background) look to work in as diverse a team as possible and favour employers seeking to build an inclusive workplace.&lt;/p&gt;

&lt;p&gt;I believe there's a strong ethical argument for us to demand inclusivity as a core practice from our employers, but even on a personal level doing so will give you the opportunity to work with people that can teach you some of the most valuable (and rarest) skills in the tech industry.&lt;/p&gt;

&lt;p&gt;&lt;span&gt;Photo by &lt;a href="https://unsplash.com/@wocintechchat?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Christina @ wocintechchat.com&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Unsplash&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;

</description>
      <category>inclusion</category>
      <category>career</category>
    </item>
  </channel>
</rss>
