<?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: Josh Michielsen</title>
    <description>The latest articles on DEV Community by Josh Michielsen (@jmickey).</description>
    <link>https://dev.to/jmickey</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%2F259331%2F7f2346c1-3394-4d9f-9587-72214109bfb5.jpeg</url>
      <title>DEV Community: Josh Michielsen</title>
      <link>https://dev.to/jmickey</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jmickey"/>
    <language>en</language>
    <item>
      <title>On Hiring Developers and the Technical Interview Process</title>
      <dc:creator>Josh Michielsen</dc:creator>
      <pubDate>Fri, 15 Nov 2019 16:04:04 +0000</pubDate>
      <link>https://dev.to/jmickey/on-hiring-developers-and-the-technical-interview-process-2apf</link>
      <guid>https://dev.to/jmickey/on-hiring-developers-and-the-technical-interview-process-2apf</guid>
      <description>&lt;p&gt;After a &lt;a href="https://dev.to/jmickey/comment/h47b"&gt;recent discussion&lt;/a&gt; here on DEV regarding the use of open source contributions in resumes, I wanted to take the time to talk about the technical hiring process. I have a considerable amount of experience with technical interviews, &lt;a href="https://mickey.dev/posts/80-interviews-across-planet/"&gt;both as a candidate&lt;/a&gt;, and as an interviewer. This experience has led me to develop some &lt;em&gt;opinions&lt;/em&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Eliminating Bias
&lt;/h1&gt;

&lt;p&gt;It should be no secret at this point that there is an inherent bias in the IT and software development world when it comes to hiring. It's important that anyone involved in the interview process at a company be aware of their unconscious bias, and take steps to counteract it. &lt;/p&gt;

&lt;p&gt;Some techniques for removing &lt;a href="https://diversity.ucsf.edu/resources/unconscious-bias"&gt;unconscious bias&lt;/a&gt; from the hiring process include:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Anonymous CVs&lt;/strong&gt;: Studies have shown that for the &lt;a href="https://social.hays.com/2014/10/07/cv-different-gender-results/"&gt;same resume men were 6-14% more likely to get an interview&lt;/a&gt;, &lt;a href="https://news.yale.edu/2012/09/24/scientists-not-immune-gender-bias-yale-study-shows"&gt;men with the same credentials are consistently considered more competent&lt;/a&gt;, and &lt;a href="https://www.politifact.com/punditfact/statements/2015/mar/15/jalen-ross/black-name-resume-50-percent-less-likely-get-respo/"&gt;resumes with white-sounding names get 50% more callbacks&lt;/a&gt;. This is why I advocate for blind CVs. Meaning, before a CV ever reaches an engineer all personally identifiable information is removed. This includes names, email addresses, social media links, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unconscious Bias Training&lt;/strong&gt;: &lt;a href="https://www.nature.com/articles/s41562-019-0686-3"&gt;Research&lt;/a&gt; has shown that awareness of unconscious bias is an effective way to reduce it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear, Concise Requirements&lt;/strong&gt;: It's well understood that women don't apply for jobs unless they believe they can meet 100% of the listed job requirements (&lt;a href="https://hbr.org/2014/08/why-women-dont-apply-for-jobs-unless-theyre-100-qualified"&gt;source&lt;/a&gt;). By providing clear and concise job requirements in ads we can increase the number of potential applicants, especially from under represented groups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Degree Requirements&lt;/strong&gt;: There are &lt;em&gt;many&lt;/em&gt; ways to get into this industry, and a degree is only one of those ways. Unless a bachelor's degree is definitely required (e.g. academia), stop listing degrees as a requirement on job ads. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This is by no means an exhaustive list, but the takeaway here is to be aware of the implicit bias in the hiring process and take active steps to combat it.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Phone Interview
&lt;/h1&gt;

&lt;p&gt;The phone interview should be used as an opportunity to not only get to know the candidate better, but also to help the candidate better get to know your company. Many companies forget that the candidate is interviewing them just as much as they're interviewing the candidate.&lt;/p&gt;

&lt;p&gt;As an example - at &lt;a href="https://condenast.com"&gt;Condé Nast&lt;/a&gt; in London, we keep phone interviews relatively short (30-45 minutes) with a primary focus on cultural compatibility, while selling the company and engineering organisation to the candidate. &lt;/p&gt;

&lt;p&gt;I feel it’s important to emphasise that the phone interview isn’t the right place to ask complex or difficult technical questions, but rather ensure a basic level of compatibility between the team culture and the candidate. As a result we have very few technical questions in the phone interview stage. An example of some of the areas we focus on include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approach to software quality and reliability&lt;/li&gt;
&lt;li&gt;Interacting within a team, and handling conflict/differing opinions&lt;/li&gt;
&lt;li&gt;Understanding of diversity, and your experience working within diverse teams&lt;/li&gt;
&lt;li&gt;Basic application architecture, and what considerations you would make when productionising a software product&lt;/li&gt;
&lt;li&gt;Basic troubleshooting and your approach to problem solving&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These questions give us a good idea of how the candidate approaches working within a team and how they think about the software development process, and are specifically designed to prompt the candidate to ask their own questions. This gives us the ability to understand the way they approach problems, and their thought processes.&lt;/p&gt;

&lt;p&gt;After the phone interview the interviewer provides feedback to a hiring guild along with a recommendation on whether the interviewer believes we should proceed with the candidate. Again, care is taken to leave out any identifying information (including the use of gender-neutral language). The committee may then choose to ask additional questions. It's important that feedback is provided within a standard structure, and that clear reasoning is provided for the recommendation.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wait, What’s a Hiring Guild?
&lt;/h2&gt;

&lt;p&gt;In an engineering organisation, a guild is a group of people who work within different feature teams and meet with some frequency to discuss a specific competency. At Condé Nast, the hiring guild is comprised of various engineers of all levels, and is empowered to continuously improve the technical hiring process, and promote a diverse and inclusive engineering team. The hiring guild has full ownership over the process, and therefore are free to make changes where they see fit. The result of this is not only a reduced load on the People team, but also ensures candidates are properly evaluated by their potential future colleagues.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Technical Interview
&lt;/h1&gt;

&lt;p&gt;Technical Interviews have been a &lt;a href="https://www.researchgate.net/publication/334448588_Hiring_is_Broken_What_Do_Developers_Say_About_Technical_Interviews"&gt;contentious topic&lt;/a&gt; in the software development industry over the last few years. Laszlo Bock, the head of HR at Google - a company well known for subjecting candidates to difficult computer science puzzles (often on a whiteboard) - admitted: "Brainteasers are a complete waste of time". &lt;/p&gt;

&lt;p&gt;In fact, the brainteaser interview style used by Google, Facebook, Netflix, Microsoft, and many others is so famous it has spurred the release of a book designed to help candidates pass them - &lt;a href="http://www.crackingthecodinginterview.com/"&gt;Cracking the Coding Interview&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;It's worth noting these interviews represent yet another form of bias within our industry, which effectively ensures that only those with computer science degrees can succeed.&lt;/p&gt;

&lt;p&gt;So what is the alternative? When designing a technical interview task I like to ask myself some questions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the task going to cause the candidate undue anxiety?&lt;/li&gt;
&lt;li&gt;Is the candidate going to have enough time to properly consider the problem?&lt;/li&gt;
&lt;li&gt;Is the candidate going to be given the opportunity to explain their solution?&lt;/li&gt;
&lt;li&gt;Is the task accessible to those with limited time, such as parents or carers?&lt;/li&gt;
&lt;li&gt;Is the task relevant to the position the candidate has applied for?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At Condé Nast the solution we arrived at was a short two hour technical task that the candidate is free to complete in their own time. The tasks vary slightly based on the position, but are designed to be relevant to the position (e.g. create a basic front end that consumes a public API). We strongly emphasise to the candidate that we &lt;strong&gt;DO NOT&lt;/strong&gt; want them to spend more than two hours on the task. &lt;/p&gt;

&lt;p&gt;We also book the face-to-face interview at the same time we send the task to the candidate, during which we will give the candidate an opportunity to walk us through their solution and explain why they made certain decisions. The technical task is &lt;strong&gt;not a gate&lt;/strong&gt;, but rather provides us with insight into the way they approach a problem, and serves as a point of discussion for the face-to-face interview.&lt;/p&gt;

&lt;h1&gt;
  
  
  The Face to Face Interview
&lt;/h1&gt;

&lt;p&gt;The face-to-face interview should be the final stage of the interview process. Of course, as you could probably guess, it's yet another stage of the interview where the interviewer must be aware of potential bias. Some recommendations I have for conducting face-to-face interviews are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep the interview as short as possible. 1-1.5 hours would be my preferred length. Most of your candidates will already have full-time employment, and those that don't may have other responsibilities (e.g. a parent returning to the workforce).&lt;/li&gt;
&lt;li&gt;Keep the number of people in the interview to a minimum. I recommend no more than 3 interviewers. The more interviewers in front of the candidate, the more nervous they're likely to be.&lt;/li&gt;
&lt;li&gt;Provide the option to complete the interview via teleconference. This provides additional flexibility to the candidate and having the opportunity to interview from a space they're more comfortable may help calm nerves. This has the added benefit of opening you up to candidates that aren't local, but might be willing to relocate.&lt;/li&gt;
&lt;li&gt;Ensure the interview is well-structured. There is &lt;a href="https://psyc450.wordpress.com/2011/12/08/interviews-the-interviewer-bias-effect/"&gt;research&lt;/a&gt; that shows that less structured interviews can increase bias.&lt;/li&gt;
&lt;li&gt;Try to ensure a diverse panel of interviewers. This reduces the effect of "similar-to-me" bias.&lt;/li&gt;
&lt;li&gt;Always leave time for the candidate to ask their own questions. Remember, they're interviewing you just as much as you're interviewing them.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  The Conclusion
&lt;/h1&gt;

&lt;p&gt;Hiring is hard. Hiring fairly is harder. However, when you take the time to invest in a fair and inclusive process, the payment is a happier, more effective engineering organisation that advertises itself. &lt;/p&gt;

&lt;p&gt;Research has shown that individuals are less likely to want to work within teams where they don’t feel represented. A development team with good representation makes it a desirable place to be to those in the industry that may not feel like they fit in elsewhere.&lt;/p&gt;

&lt;p&gt;If that isn’t enough to convince you, there is also a &lt;a href="https://www.weforum.org/agenda/2019/04/business-case-for-diversity-in-the-workplace/"&gt;clear business case for diversity&lt;/a&gt; for the hard core capitalists out there...&lt;/p&gt;

&lt;p&gt;Thanks for taking the time to read this post, I know it’s quite long. I welcome your comments below!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This post was originally posted on my blog &lt;a href="https://mickey.dev/posts/hiring-developers/"&gt;here&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>hiring</category>
      <category>inclusion</category>
    </item>
    <item>
      <title>Separate Your Tests with Build Tags</title>
      <dc:creator>Josh Michielsen</dc:creator>
      <pubDate>Mon, 04 Nov 2019 19:17:57 +0000</pubDate>
      <link>https://dev.to/jmickey/separate-your-tests-with-build-tags-5f90</link>
      <guid>https://dev.to/jmickey/separate-your-tests-with-build-tags-5f90</guid>
      <description>&lt;p&gt;Have you ever wanted to separate your unit tests from your integration or smoke tests? Go has a built-in mechanism for allowing you to logically separate your tests, in addition to adding conditionals (e.g. operating system or CPU architecture) with Build Tags.&lt;/p&gt;

&lt;h1&gt;
  
  
  What are Build Tags
&lt;/h1&gt;

&lt;p&gt;Build tags are a directive provided, in the form of a single line comment, at the top of a &lt;code&gt;.go&lt;/code&gt; source file that tells the Go compiler important information about how it should deal with that file when &lt;code&gt;go build&lt;/code&gt; is run.&lt;/p&gt;

&lt;p&gt;For example, the following file will only be included in the build if the &lt;code&gt;GOOS=linux&lt;/code&gt; environment variable is set:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// +build linux&lt;/span&gt;

&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;mypackage&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The build tag needs to be placed as close to the top of the file as possible, and must have a blank line beneath it.&lt;/p&gt;

&lt;p&gt;Tags can also be negated with the &lt;code&gt;!&lt;/code&gt; operator. E.g. A file with &lt;code&gt;// +build !linux&lt;/code&gt; will be included in all builds that aren't on linux.&lt;/p&gt;

&lt;p&gt;Tags can contain multiple conditions. If the conditions are on the same line then they are evaluated as an OR condition. If they're on separate lines they're evaluated as an AND condition.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// +build linux darwin&lt;/span&gt;
&lt;span class="c"&gt;// +build amd64&lt;/span&gt;

&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;mypackage&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The above example file will only be included in &lt;code&gt;linux/amd64&lt;/code&gt; and &lt;code&gt;darwin/amd64&lt;/code&gt; builds.&lt;/p&gt;

&lt;h1&gt;
  
  
  Separating Tests
&lt;/h1&gt;

&lt;p&gt;Build tags can also be used to separate different types of tests, such as unit and integration tests, within separate &lt;code&gt;_test.go&lt;/code&gt; files.&lt;/p&gt;

&lt;p&gt;Let's continue with the example of unit and integration tests.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;myfile_test.go&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;mypackage&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"testing"&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;&lt;code&gt;myfile_integration_test.go&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// +build integration&lt;/span&gt;

&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;mypackage&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"testing"&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;There are two file examples shown above, the &lt;code&gt;myfile_integration_test.go&lt;/code&gt; file contains a build tag of &lt;code&gt;// +build integration&lt;/code&gt;, while the &lt;code&gt;myfile_test.go&lt;/code&gt; file, where unit tests will be stored, contains no build tag. &lt;/p&gt;

&lt;p&gt;When running &lt;code&gt;go test&lt;/code&gt; in the directory where these files are stored the Go test runner will only run the tests in &lt;code&gt;myfile_test.go&lt;/code&gt;. To run the tests within &lt;code&gt;myfile_integration_test.go&lt;/code&gt; the &lt;code&gt;--tags&lt;/code&gt; flag will need to be provided - &lt;code&gt;go test --tags=integration&lt;/code&gt;. &lt;/p&gt;

&lt;p&gt;There is one small problem though. Those following along probably would have picked up on this already. When running &lt;code&gt;go test --tags=integration&lt;/code&gt; the Go test runner still runs the unit tests! To avoid this you can add a negation to the non-integration tests files, like so:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;myfile_test.go&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight go"&gt;&lt;code&gt;&lt;span class="c"&gt;// +build !integration&lt;/span&gt;

&lt;span class="k"&gt;package&lt;/span&gt; &lt;span class="n"&gt;mypackage&lt;/span&gt;

&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="s"&gt;"testing"&lt;/span&gt;

&lt;span class="o"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;With the above build tag included in all unit test files, the Go test runner will continue to run the tests when &lt;code&gt;go test&lt;/code&gt; is used, but they will be excluded when running &lt;code&gt;go test --tags=integration&lt;/code&gt;.&lt;/p&gt;

&lt;h1&gt;
  
  
  Why?
&lt;/h1&gt;

&lt;p&gt;There are plenty of reasons developers might want to separate tests. Some simple example might be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Integration tests are often slower, so you may want to only run them after the unit test (which are often much faster) have passed.&lt;/li&gt;
&lt;li&gt;Smoke tests that are run against the live application, generally after a deployment.&lt;/li&gt;
&lt;li&gt;Deploying the same app to different tenants.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Of course, this is by no means an exhaustive list! If you already separate tests sound off with why in the comments!&lt;/p&gt;

&lt;h1&gt;
  
  
  Conclusion
&lt;/h1&gt;

&lt;p&gt;Build tags are a very useful tool within the Go ecosystem, and there are plenty of other possibilities above and beyond this one example. Head over to the &lt;a href="https://golang.org/pkg/go/build/"&gt;&lt;code&gt;go/build&lt;/code&gt; package&lt;/a&gt; documentation for more information!&lt;/p&gt;

&lt;p&gt;Thanks for reading. Please feel free to leave a comment with any questions or comments!&lt;/p&gt;

</description>
      <category>go</category>
      <category>testing</category>
      <category>howto</category>
    </item>
  </channel>
</rss>
