<?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: Mario Saul</title>
    <description>The latest articles on DEV Community by Mario Saul (@mariiio).</description>
    <link>https://dev.to/mariiio</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%2F54038%2F1db4e9dc-85fb-4f46-b378-d5795dccadb1.jpg</url>
      <title>DEV Community: Mario Saul</title>
      <link>https://dev.to/mariiio</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mariiio"/>
    <language>en</language>
    <item>
      <title>7 Tips to build your Personal Website 👨🏽‍💻👩🏽‍💻</title>
      <dc:creator>Mario Saul</dc:creator>
      <pubDate>Mon, 02 May 2022 16:26:59 +0000</pubDate>
      <link>https://dev.to/mariiio/7-tips-to-build-an-exceptional-personal-website-ig0</link>
      <guid>https://dev.to/mariiio/7-tips-to-build-an-exceptional-personal-website-ig0</guid>
      <description>&lt;p&gt;Having a personal website can be a great way to showcase your portfolio, write a blog or just make your CV more interesting and stand out among the crowd. &lt;/p&gt;

&lt;p&gt;If you're reading this post, you probably already have your personal website, or are thinking about building it. In any case, I want to share with you 7 things I wish someone had told me when I first started building &lt;a href="https://www.mariosaul.com/" rel="noopener noreferrer"&gt;my personal website&lt;/a&gt;.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;T I P S&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Add analytics&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Don't forget SEO&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Open source your code &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ask for feedback &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Don't re-invent the wheel &lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Get creative&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Learn and have fun &lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📈 Add analytics
&lt;/h2&gt;

&lt;p&gt;Setting up an analytics tool (like &lt;a href="https://analytics.google.com/" rel="noopener noreferrer"&gt;Google Analytics&lt;/a&gt;) will allow you to track your website's performance and understand how visitors interact with it.&lt;/p&gt;

&lt;p&gt;Although this doesn't seem like a very interesting thing for the case of a personal website, there's a couple of great features that can help you gain very helpful insights.&lt;/p&gt;

&lt;p&gt;For example, you can set custom events to track important actions on your site (e.g. every time your CV gets downloaded).&lt;br&gt;
Another cool feature I like is the session source. Whenever you apply to a position and send your website to a company, you can append a query param &lt;code&gt;?utm_source=&amp;lt;COMPANY_NAME&amp;gt;&lt;/code&gt; to know if and when they opened it 🕵️‍♂️.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🔍 Don't forget SEO
&lt;/h2&gt;

&lt;p&gt;Whenever I get a candidate to interview, I google their names to learn more about them. This is the case for many, if not most recruiters out there, so you want to plan on being googled.&lt;/p&gt;

&lt;p&gt;This doesn't mean you need to spend countless hours trying comply with every single SEO rule and best practice, but it is important to be SEO friendly so your website appears when googling your name.&lt;/p&gt;

&lt;p&gt;Here's a few small but important things you can do:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Pre-render pages at build time (SSG) or request time (SSR). Depending on your prefered language, there are many great frameworks you can use like &lt;a href="https://nextjs.org/" rel="noopener noreferrer"&gt;Next.js&lt;/a&gt;, &lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt.js&lt;/a&gt;, &lt;a href="https://www.gatsbyjs.com/" rel="noopener noreferrer"&gt;Gatsby&lt;/a&gt;, &lt;a href="https://jekyllrb.com/" rel="noopener noreferrer"&gt;Jekyll&lt;/a&gt;, and many more&lt;/li&gt;
&lt;li&gt;Make sure you are delivering a good user experience by measuring your &lt;a href="https://web.dev/vitals/" rel="noopener noreferrer"&gt;Core Web Vitals&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Make sure your styles are responsive and mobile friendly&lt;/li&gt;
&lt;li&gt;Add alt tags to your images&lt;/li&gt;
&lt;li&gt;Run a &lt;a href="https://developers.google.com/web/tools/lighthouse" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt; SEO report to get improvement recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  📖 Open source your code
&lt;/h2&gt;

&lt;p&gt;Making you code public can be a great way to show your coding skills. Since you probably won't be building impressive features that you can show off in your personal website, what you can do is present good quality code.&lt;/p&gt;

&lt;p&gt;Here's a few simple tools and principles you can use:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use a linter (e.g. &lt;a href="https://eslint.org/" rel="noopener noreferrer"&gt;ESLint&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Use a code formatter (e.g. &lt;a href="https://prettier.io/" rel="noopener noreferrer"&gt;Prettier&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;DRY (Don't Repeat Yourself)&lt;/li&gt;
&lt;li&gt;Favor readability (choose descriptive and unambiguous names for variables and functions)&lt;/li&gt;
&lt;li&gt;Keep configurable data at high levels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Making your code available as open source also incentivizes collaboration and transparency, which can be useful for other developers.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;It goes without saying that if you're not going to worry about how your code looks, making it public can be counterproductive.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

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

&lt;p&gt;Out of all the points I presented in this post, I think asking for feedback has the highest ROI of them all (i.e. It's super easy to do and its benefits can be huge).&lt;/p&gt;

&lt;p&gt;Asking your friends and colleagues for feedback can provide extremely valuable insight and give you an understanding of how your site is perceived by other people than yourself. When you do, try to do it with people with different professional backgrounds (engineering, design, UX).&lt;/p&gt;

&lt;p&gt;There’s a lot to be gained from getting other people's feedback and absolutely nothing to lose. All you have to do is ask!&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;In the mood to give me feedback? Check out &lt;a href="https://www.mariosaul.com/" rel="noopener noreferrer"&gt;www.mariosaul.com&lt;/a&gt; and let me know what you think in the comments 🙂&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🏗 Don't re-invent the wheel
&lt;/h2&gt;

&lt;p&gt;The first mistake I made when started building my personal website, was not doing proper research on the available tools and resources. Instead, I found myself wasting valuable time building stuff that was already built.&lt;/p&gt;

&lt;p&gt;Here's a good example of me trying to build a simple 8-bit retro CSS component vs. using a library built for that exact purpose (&lt;a href="https://nostalgic-css.github.io/NES.css/" rel="noopener noreferrer"&gt;NES.css&lt;/a&gt;)&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3c8eawqt6tvem0v9uru6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3c8eawqt6tvem0v9uru6.png" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It not only &lt;a href="https://github.com/mariiio/mariosaul.com/commit/5a607ea44200a974b79b585f9319868f93813bac" rel="noopener noreferrer"&gt;took one minute to add&lt;/a&gt; to my project, but also looks much better than building it myself with my not-so-great CSS skills.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  👨‍🎨 Get creative
&lt;/h2&gt;

&lt;p&gt;One of the main reasons to have a personal website is to get away from the plain old PDF file and show yourself in a more fun and interactive way. There's no point in just copy/pasting your CV into a website if it's not going to be any different than the CV itself.&lt;/p&gt;

&lt;p&gt;The goal should be to present yourself in a different and exciting way. If possible, try to find something that you love or something that represents you in some unique way, and style your site around it.&lt;/p&gt;

&lt;p&gt;If you struggle finding inspiration, you can check out other people's personal websites (there are hundreds of amazing ones you can find online) for getting ideas.&lt;/p&gt;

&lt;p&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  🙇‍♂️ Learn and have fun
&lt;/h2&gt;

&lt;p&gt;If you're an experienced web developer, it might be challenging to find a new skill to learn from such small and simple project. So what you could do is pick a different technology than the one you're used to, e.g. if you're experienced in &lt;a href="https://angular.io/" rel="noopener noreferrer"&gt;AngularJS&lt;/a&gt;, you can build your site using &lt;a href="https://svelte.dev/" rel="noopener noreferrer"&gt;Svelte&lt;/a&gt; (or whatever JS framework the cool kids are using by the time you're reading this).&lt;/p&gt;

&lt;p&gt;And last but not least, &lt;strong&gt;have fun&lt;/strong&gt; building it! No matter how big or small, simple or complicated your website will be, you're gonna spend hours working on it. So if you don't find it fun or exciting in any way, you'll most likely end up dropping it unfinished and move on to your next side project.&lt;/p&gt;




&lt;p&gt;So there it is, my 7 tips to build an exceptional personal website. Thanks for reading and I hope this post was useful to you.&lt;/p&gt;

&lt;center&gt;

Feel free to reach out to me in the comments or in my social media 😊!

| 🐦 [Twitter](https://twitter.com/mario_saul) | 👨🏽‍💻 [Github](https://github.com/mariiio) | 💼 [LinkedIn](https://www.linkedin.com/in/mario-saul) | 📸 [Instagram](https://www.instagram.com/mario_saul) |
|-----------    |------------   |------------   |-------------  |

&lt;/center&gt;

</description>
      <category>career</category>
      <category>portfolio</category>
      <category>website</category>
      <category>showdev</category>
    </item>
    <item>
      <title>Use this LinkedIn bot to land your dream job in 3 easy steps 🤖</title>
      <dc:creator>Mario Saul</dc:creator>
      <pubDate>Wed, 06 May 2020 14:45:29 +0000</pubDate>
      <link>https://dev.to/mariiio/use-this-linkedin-bot-to-land-your-dream-job-in-3-easy-steps-4gb4</link>
      <guid>https://dev.to/mariiio/use-this-linkedin-bot-to-land-your-dream-job-in-3-easy-steps-4gb4</guid>
      <description>&lt;h2&gt;
  
  
  🥱 TL;DR
&lt;/h2&gt;

&lt;p&gt;Follow the instructions and start connecting!&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--566lAguM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/mariiio"&gt;
        mariiio
      &lt;/a&gt; / &lt;a href="https://github.com/mariiio/linkedin_connect"&gt;
        linkedin_connect
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Configurable and easy to use LinkedIn tool to automate connections with personalized messages.
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  ⛔ Getting rejected?
&lt;/h2&gt;

&lt;p&gt;Did you see the post of your dream job on &lt;em&gt;LinkedIn&lt;/em&gt; and decided to apply?&lt;br&gt;
Then Hold on and don't click that &lt;em&gt;Easy Apply&lt;/em&gt; button!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Brtip_MT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/750/1%2AjWUPTgHTKcjJPZ2l3ZEw-Q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Brtip_MT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/750/1%2AjWUPTgHTKcjJPZ2l3ZEw-Q.png" alt="Easy Reject button" width="238" height="72"&gt;&lt;/a&gt;&lt;br&gt;
You should know that if you do it means your job application will end up in a pile of hundreds of other job applications. This doesn't necessarily mean you won't get noticed and get the interview. But if you want to significantly  increase your chances and have recruiters spend more than 10 seconds on your resume, I'm here to tell you there's a better way!&lt;/p&gt;
&lt;h2&gt;
  
  
  👁️‍🗨️ Get referred
&lt;/h2&gt;

&lt;p&gt;The best way to get the interview is to get referred or recommended by an influential employee within the company. It will push your resume further up the line, or lead straight to an interview.&lt;/p&gt;

&lt;p&gt;The good news is that even if you don't have insider connections to your organization of interest, it is possible to get a referral. Many companies have a referral compensation program and even if the company you're applying to doesn't, most people are willing to help a fellow collegue.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--qAxVdZJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/750/1%2ASZJzbg5F8W8w9W7sUHQ6jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--qAxVdZJH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/750/1%2ASZJzbg5F8W8w9W7sUHQ6jw.png" alt="referral request" width="688" height="424"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So there you have it, instead of blindly submiting your application, go to the company's &lt;em&gt;LinkedIn&lt;/em&gt; page and start sending personalized messages to as many employees in relevant positions as possible.&lt;/p&gt;

&lt;p&gt;Easy peasy, right? Well.. as simple as it may sound, it takes time, a lot of time! That's why after long hours of doing this cumbersome job with many companies manually I decided to build a simple bot to automate it.&lt;/p&gt;
&lt;h2&gt;
  
  
  🤖 Let the bot do the work
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Step 1️⃣
&lt;/h3&gt;

&lt;p&gt;Go to the &lt;em&gt;People&lt;/em&gt; section of the company you're interested in (make sure your &lt;em&gt;LinkedIn&lt;/em&gt; is in english)&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mnbpZwpg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/750/1%2AhiUi6wZxiN_ZZo4kaPirNA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mnbpZwpg--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/750/1%2AhiUi6wZxiN_ZZo4kaPirNA.png" alt="https://www.linkedin.com/company/{COMPANY_NAME}/people/" width="219" height="267"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2️⃣
&lt;/h3&gt;

&lt;p&gt;Copy the content of &lt;a href="https://raw.githubusercontent.com/mariiio/linkedin_connect/master/linkedin_connect.js"&gt;the script&lt;/a&gt; and modify the constants at the top to your liking:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;╔═══════════════════╦═════════════════════════════════════════════╗
║     Constant      ║                Description                  ║
╠═══════════════════╬═════════════════════════════════════════════╣
║ MAX_CONNECTIONS   ║ Maximum amount of connection requests       ║
║ WAIT_TO_CONNECT   ║ Time in ms to wait before requesting to     ║
║                   ║ connect                                     ║
║ WAIT_AFTER_SCROLL ║ Time in ms to wait before new employees     ║
║                   ║ load after scroll                           ║
║ MESSAGE           ║ Message to connect (%EMPLOYEE% and %COMPANY%║
║                   ║ will be replaced with the real values, 300  ║
║                   ║ characters max.)                            ║
║ POSITION_KEYWORDS ║ Keywords to filter employees in specific    ║
║                   ║ positions                                   ║
╚═══════════════════╩═════════════════════════════════════════════╝
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const MAX_CONNECTIONS = 30;
const WAIT_TO_CONNECT = 3000;
const WAIT_AFTER_SCROLL = 3000;
const MESSAGE = `Hi %EMPLOYEE%, I'm a Software Engineer with 4 years of experience in full-stack web development. 
I see you're currently working at %COMPANY% where I saw a Full Stack job post and was interested to hear more about it. 
Would you (or a colleague) have time to chat about the position?
Thanks!`;
const POSITION_KEYWORDS = ["software", "developer", "r&amp;amp;d", "hr", "recruiting"];
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Step 3️⃣
&lt;/h3&gt;

&lt;p&gt;Open the Console panel (Press Command+Option+J for Mac or Control+Shift+J for Windows), paste the script and hit enter to run the script (or &lt;a href="https://developers.google.com/web/tools/chrome-devtools/javascript/snippets#create"&gt;add it as a snippet&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Ih5jO_xr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/mariiio/linkedin_connect/raw/master/demo/demo.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Ih5jO_xr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://github.com/mariiio/linkedin_connect/raw/master/demo/demo.gif" alt="Bot in action" width="600" height="246"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That's it! Get ready to receive lots of messages of people who want to help you land your dream job.&lt;/p&gt;

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

&lt;p&gt;I built the bot for myself, I ran into a problem and solved it the best way I knew how, coding. It saved me hours of work, helped me get several interviews and expand my network with relevant connections.&lt;/p&gt;

&lt;p&gt;Despite it's simplicity and many limitations (e.g. only works for &lt;em&gt;LinkedIn&lt;/em&gt; in english, might not work for other browser than Chrome, highly dependant on &lt;em&gt;LinkedIn&lt;/em&gt; current structure) I decided to share it with the world to help those in the same situation as me.&lt;/p&gt;

&lt;p&gt;Finally, I want to mention that I've read of people online who got temporarily banned from connecting on &lt;em&gt;LinkedIn&lt;/em&gt; for abusing the use of automations tools. Although I haven't had any issues so far (after sending hundreds of messages), I advise you use it with caution and at your own risk :)&lt;/p&gt;


&lt;center&gt;

&lt;p&gt;Feel free to reach out to me in the comments or in my social media 😊!&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;🐦 &lt;a href="https://twitter.com/mario_saul"&gt;Twitter&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;👨🏽‍💻 &lt;a href="https://github.com/mariiio"&gt;Github&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;💼 &lt;a href="https://www.linkedin.com/in/mario-saul"&gt;LinkedIn&lt;/a&gt;
&lt;/th&gt;
&lt;th&gt;📸 &lt;a href="https://www.instagram.com/mario_saul"&gt;Instagram&lt;/a&gt;
&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;/center&gt;

</description>
      <category>bot</category>
      <category>career</category>
      <category>showdev</category>
      <category>linkedin</category>
    </item>
    <item>
      <title>Why have engineers run interviews</title>
      <dc:creator>Mario Saul</dc:creator>
      <pubDate>Fri, 07 Jun 2019 14:13:55 +0000</pubDate>
      <link>https://dev.to/mariiio/why-have-engineers-run-interviews-instead-of-hr-4h9a</link>
      <guid>https://dev.to/mariiio/why-have-engineers-run-interviews-instead-of-hr-4h9a</guid>
      <description>&lt;p&gt;Recruiting and hiring can be a time consuming, frustrating and hard process. Particularly for tech companies where employees are in much higher demand than in any other area. So much so that most companies tend to outsource the job to HR consulting firms or even hire a professional themselves. It seems to be clear that it's not something to take lightly, selecting the right people is critical and one you just can’t afford to get wrong.&lt;/p&gt;

&lt;p&gt;So if it's such a big deal, why is it that we choose to have our engineers take care of it rather than specialized professionals? I mean, it does seem contradictory since we are far from experts on the subject. Even more if we see it from a practical perspective, it is way more expensive to take engineers away from working billable hours with the clients than to have it outsourced.&lt;/p&gt;

&lt;p&gt;Before I answer the question I would like to clarify that we don't have anything against the way HR run interviews, quite the contrary I would say. We understand that a professionally driven interview can be of great significance when evaluating a candidate, and that's why we often send them to meet with a pro in order to get an external opinion subsequent to getting our approval.&lt;/p&gt;

&lt;p&gt;So without further ado, let's dive right into the answer.&lt;/p&gt;

&lt;h2&gt;
  
  
  They know what is like to be on the other side of the table
&lt;/h2&gt;

&lt;p&gt;Interviews can be pretty stressful, even for someone who's gone through many of them. Just think about it, walking into a strange room to meet strange people and try to make a good impression, while at the same time collecting enough information to decide whether the job is right for you or not.&lt;/p&gt;

&lt;p&gt;It's easy to understand why some people just don't do well in interviews, it can be so overwhelming that they let their nerves get the best of them. And although good communication skills are paramount for the job, an awkward interview doesn't necessarily mean a candidate doesn't possess them.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“You can only understand people if you feel them in yourself.” – John Steinbeck&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Many of our engineers know this firsthand, since not so long ago they were going through the same themselves. Having been in the other person's shoes is key to truly make sense of their situation, and what's more, this empathy naturally results in making the interviewer seem more human and therefore less daunting during the interview.&lt;/p&gt;

&lt;h2&gt;
  
  
  Cut from the same cloth
&lt;/h2&gt;

&lt;p&gt;I've always thought of job interviews kind of like going on a first date, the picture does look pretty similar to the one I painted in the previous section: Feelings of excitement and nervousness are all over the place, while trying to look like a catch at the same time. After all, they both boil down to similar questions such as whether they can both picture themselves spending a whole lot of time with each other.&lt;/p&gt;

&lt;p&gt;The success or failure of a first date can be determined by the ability of finding something in common and moving away from the weather small talk all night long. Same goes for a job interview, and being able to hold deep meaningful conversations require both parties to share some common experiences and of course be able to speak the same language. Sounds like a no-brainer to me: Who can meet these requirements better than someone who has the same educational background, faced the same challenges and is already doing the job?&lt;/p&gt;

&lt;p&gt;This first date analogy also helped me understand how important it is to know that an interview is a two way street. You're not only selecting from among several candidates, the best candidates are also selecting from among several options. Therefore if you want to properly give the right impression, you need the best representatives. You are marketing your organization at all times, and it's equally important to paint the right picture to candidates who don't end up getting the job as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Personal development
&lt;/h2&gt;

&lt;p&gt;At &lt;a href="https://www.wyeworks.com/"&gt;WyeWorks&lt;/a&gt; we understand that having great technical skills is just the first step to becoming a great software engineer, like my friend Sebastián explained in his post &lt;a href="https://www.wyeworks.com/blog/2019/01/18/what-makes-a-great-software-engineer-great/"&gt;What makes a great software engineer great&lt;br&gt;
&lt;/a&gt;, which is why we are constantly searching for opportunities that enable people to take the next step and develop a more diverse skill set.&lt;/p&gt;

&lt;p&gt;Many people may think that interviewing isn't that hard of a job and believe they can become experts by simply conducting a few interviews. I know this firsthand since I was one of those people myself, and let me tell you I couldn't have been more wrong. Immediately after my first experience as an interviewer I realized how challenging the job can be. You don't want to have awkward silences during the interview, you have to know how to direct the show, be well prepared and be as good of a listener as you are a speaker. Not to mention all the small stuff such as being aware of body language and detecting the interaction's subtleties.&lt;/p&gt;

&lt;p&gt;I've been conducting interviews for only about a year and a half now, and with each new one I become more aware of how much I still have to learn. But also as I look back to my early interviewing days, I can see how much I've grown since then and how it has helped me develop skills that I can use in many different areas of my life, even beyond work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing thoughts
&lt;/h2&gt;

&lt;p&gt;So if the benefits are so clear, why aren't all companies taking this approach? Well, it's not all rainbows and unicorns. First of all you need engineers who are willing to get out of their confort zones and are motivated enough to invest a significant amount of time and effort into it. Then, it's worth mentioning that when compared to its alternatives, taking this approach means an investment for the company.&lt;/p&gt;

&lt;p&gt;Is it worth it then? Absolutely, we truly believe that a company is only as good as its people, which is why we put our best efforts into building the best company we can.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Originally published in &lt;a href="https://www.wyeworks.com/blog/2019/06/07/why-we-have-engineers-run-interviews-instead-of-hr/"&gt;WyeWorks blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>interview</category>
      <category>startup</category>
      <category>software</category>
      <category>recruiting</category>
    </item>
    <item>
      <title>Testing Vue.js in Rails with Webpacker and Jest</title>
      <dc:creator>Mario Saul</dc:creator>
      <pubDate>Tue, 16 Jan 2018 18:02:49 +0000</pubDate>
      <link>https://dev.to/mariiio/testing-vuejs-in-rails-with-webpacker-and-jest-374a</link>
      <guid>https://dev.to/mariiio/testing-vuejs-in-rails-with-webpacker-and-jest-374a</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published in &lt;a href="https://wyeworks.com/blog/2018/1/16/Testing-Vuejs-in-Rails-with-Webpacker-and-Jest/"&gt;WyeWorks blog&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;In the project I'm working on, I was given the task of investigating how to integrate &lt;a href="https://vuejs.org/"&gt;Vue.js&lt;/a&gt; with our existing Rails app. So I started reading the official guide, watching tutorials and reading various posts until I finally got a fully working Vue component.&lt;/p&gt;

&lt;p&gt;Finally it was time to write some tests, but unfortunately, the &lt;a href="https://github.com/rails/webpacker"&gt;Webpacker&lt;/a&gt; gem doesn't include testing configuration, so I had to do it on my own.&lt;/p&gt;

&lt;p&gt;To my surprise, I found that there wasn't much documentation on how to do the setup. So I figured I'd make this post to share with you how I managed to eventually get it working.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Install Jest
&lt;/h2&gt;

&lt;p&gt;I decided to go with &lt;a href="https://facebook.github.io/jest/"&gt;Jest&lt;/a&gt; for no personal preference, I just noticed that &lt;a href="https://github.com/vuejs/vue-cli"&gt;vue-cli&lt;/a&gt; ships with it and went for it.&lt;/p&gt;

&lt;p&gt;To install Jest all you have to do is run &lt;code&gt;yarn add --dev jest&lt;/code&gt; from the root of your project.&lt;br&gt;
Then, add a test script to your &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "scripts": {
    "test": "jest",
    ...
  },
  ...
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now you can run your tests with &lt;code&gt;yarn test&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Define the location of your tests
&lt;/h2&gt;

&lt;p&gt;If you try to run &lt;code&gt;yarn test&lt;/code&gt; at this point, you'll see that &lt;code&gt;config/webpack/test.js&lt;/code&gt; failed. This is because of the way &lt;a href="https://facebook.github.io/jest/docs/en/configuration.html#testmatch-array-string"&gt;Jest looks for test files in the project&lt;/a&gt;. It basically executes all files matching &lt;code&gt;.spec.js&lt;/code&gt; or &lt;code&gt;.test.js&lt;/code&gt; in the whole project. In this case, the file matched &lt;code&gt;*.test.js&lt;/code&gt; so it tried to run it as a test.&lt;/p&gt;

&lt;p&gt;Since we don't want the Webpack config file as well as other files in the project that meet this criteria to run with our tests, we need to tell Jest where to look for them.&lt;/p&gt;

&lt;p&gt;In my case since I'm using &lt;a href="http://rspec.info/"&gt;Rspec&lt;/a&gt;, I decided to point it to the &lt;code&gt;spec/javascripts&lt;/code&gt; directory. But you can feel free to choose whichever directory fits your project the best.&lt;/p&gt;

&lt;p&gt;To do this you just have to add &lt;a href="https://facebook.github.io/jest/docs/en/configuration.html#roots-array-string"&gt;roots&lt;/a&gt; to your &lt;code&gt;package.json&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"jest": {
  "roots": [
    "spec/javascript"
  ]
},
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; &lt;em&gt;If your &lt;code&gt;package.json&lt;/code&gt; is quite big and you don't want to keep adding more stuff to it, you can define the jest configuration through the &lt;code&gt;--config &amp;lt;path/to/js|json&amp;gt;;&lt;/code&gt; option. If you choose to do so, your &lt;code&gt;package.json&lt;/code&gt; should now be like:&lt;/em&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  {
    "scripts": {
      “test”: “jest --config spec/javascript/jest.conf.js”,
      ...
    },
    ...
  }
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;p&gt;To verify it worked, you can create a &lt;code&gt;spec/javascript/team.spec.js&lt;/code&gt; file with a simple test like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;test('there is no I in team', () =&amp;gt; {
  expect('team').not.toMatch(/I/);
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now run &lt;code&gt;yarn test&lt;/code&gt; again and you should see a green "PASS" in the output meaning that it worked 🎉.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Babel to the rescue
&lt;/h2&gt;

&lt;p&gt;Now that we got our first test working, let's take it one step further and try to test a Vue component.&lt;/p&gt;

&lt;p&gt;The first thing you'd probably try is to create a file under the &lt;code&gt;spec/javascript/&lt;/code&gt; directory and name it something like &lt;code&gt;my_component.spec.js&lt;/code&gt;. Then try to import your component from within your spec with the &lt;a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import"&gt;import&lt;/a&gt; statement like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  import MyComponent from '../../app/javascript/my_component.vue';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you did try this, go ahead and run your tests. You'll see a &lt;code&gt;SyntaxError: Unexpected token import&lt;/code&gt; in the output.&lt;/p&gt;

&lt;p&gt;The problem here is that &lt;code&gt;import&lt;/code&gt; is part of ECMAScript 6, so we need the help of a transpiler such as &lt;a href="https://babeljs.io/"&gt;Babel&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To get it working you need to install two packages by running &lt;code&gt;yarn add --dev babel-jest babel-preset-es2015&lt;/code&gt; and add the "es2015" preset to your &lt;code&gt;.babelrc&lt;/code&gt; file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "presets": ["es2015",
    ["env", {
            ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to take it one step further, you can add &lt;a href="https://facebook.github.io/jest/docs/en/configuration.html#moduledirectories-array-string"&gt;moduleDirectories&lt;/a&gt; to your &lt;code&gt;.package.json&lt;/code&gt; so you don't have to type out the full path to your modules:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"jest": {
    ...
  "moduleDirectories": [
    "node_modules",
    "app/javascript"
    ]
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;So what we had before as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  import MyComponent from '../../app/javascript/my_component.vue';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can now be written as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  import MyComponent from 'my_component.vue';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  4. Where's Vue?
&lt;/h2&gt;

&lt;p&gt;If you followed every step, you should be getting a &lt;code&gt;SyntaxError&lt;/code&gt; when trying to run your tests. This means that it successfully imported your component, but it can't yet understand &lt;code&gt;.vue&lt;/code&gt; file's format.&lt;/p&gt;

&lt;p&gt;Fortunately, we have a package that will take care of it for us, &lt;a href="https://github.com/eddyerburgh/vue-jest"&gt;vue-jest&lt;/a&gt;.&lt;br&gt;
So go ahead and run &lt;code&gt;yarn add --dev vue-jest&lt;/code&gt; along with adding "moduleFileExtensions", "transform" and "mapCoverage" as explained in the &lt;a href="https://github.com/eddyerburgh/vue-jest/blob/master/README.md"&gt;README&lt;/a&gt;.&lt;br&gt;
Your &lt;code&gt;package.json&lt;/code&gt; should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;"jest": {
  ...
    "moduleFileExtensions": [
    "js",
    "json",
    "vue"
  ],
  "transform": {
    "^.+\\.js$": "&amp;lt;rootDir&amp;gt;/node_modules/babel-jest",
    ".*\\.(vue)$": "&amp;lt;rootDir&amp;gt;/node_modules/vue-jest"
  },
  "mapCoverage": true
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;With &lt;a href="https://facebook.github.io/jest/docs/en/configuration.html#modulefileextensions-array-string"&gt;moduleFileExtensions&lt;/a&gt; we no longer need the &lt;code&gt;.vue&lt;/code&gt; when importing Single File Components. So what we had before as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  import MyComponent from 'my_component.vue';
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;can now be written as&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  import MyComponent from 'my_component';.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You should now be able to use &lt;code&gt;import&lt;/code&gt; seamlessly.&lt;/p&gt;

&lt;p&gt;The rules in the &lt;a href="https://facebook.github.io/jest/docs/en/configuration.html#transform-object-string-string"&gt;transform&lt;/a&gt; section indicate which package is responsible for the transformation of testing files. In our case, we want &lt;code&gt;vue-jest&lt;/code&gt; to handle all our &lt;code&gt;.vue&lt;/code&gt; files, so they are converted to plain javascript before being handled by Jest.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://facebook.github.io/jest/docs/en/configuration.html#mapcoverage-boolean"&gt;mapCoverage&lt;/a&gt; is set in order to use source maps that the transformer emits. Jest will use them to try and map code coverage against the original source code when writing reports and checking thresholds.&lt;/p&gt;

&lt;p&gt;Lastly, let's add the official unit testing utility library for Vue, &lt;a href="https://vue-test-utils.vuejs.org/en/"&gt;vue-test-utils&lt;/a&gt;. Just run &lt;code&gt;yarn add --dev @vue/test-utils&lt;/code&gt; and you are good to go.&lt;/p&gt;

&lt;p&gt;You can now start writing tests for your Vue components 🎉&lt;/p&gt;

</description>
      <category>vue</category>
      <category>rails</category>
      <category>webpack</category>
      <category>jest</category>
    </item>
  </channel>
</rss>
