<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Bill's Thoughts and Ramblings]]></title><description><![CDATA[I have over 13 years of professional experience in full-stack development with a heavy emphasis on front-end development and beautiful user experiences. I want ]]></description><link>https://blog.billpair.com</link><generator>RSS for Node</generator><lastBuildDate>Mon, 20 Apr 2026 12:34:18 GMT</lastBuildDate><atom:link href="https://blog.billpair.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[A Step-by-Step Guide to Building a Full-Stack TypeScript Weather App with Node.js, React, and Tailwind CSS]]></title><description><![CDATA[In this guide, I will walk you through building a full-stack TypeScript weather app using Node.js, React, and Tailwind CSS. This app will fetch weather data from a third-party API, display the current weather, and provide a forecast for the next five...]]></description><link>https://blog.billpair.com/a-step-by-step-guide-to-building-a-full-stack-typescript-weather-app-with-nodejs-react-and-tailwind-css</link><guid isPermaLink="true">https://blog.billpair.com/a-step-by-step-guide-to-building-a-full-stack-typescript-weather-app-with-nodejs-react-and-tailwind-css</guid><category><![CDATA[TypeScript]]></category><category><![CDATA[React]]></category><category><![CDATA[Node.js]]></category><category><![CDATA[Tailwind CSS]]></category><category><![CDATA[Tutorial]]></category><dc:creator><![CDATA[Bill Pairaktaridis]]></dc:creator><pubDate>Sun, 09 Apr 2023 16:35:37 GMT</pubDate><content:encoded><![CDATA[<p>In this guide, I will walk you through building a full-stack TypeScript weather app using Node.js, React, and Tailwind CSS. This app will fetch weather data from a third-party API, display the current weather, and provide a forecast for the next five days.</p>
<h2 id="heading-prerequisites">Prerequisites:</h2>
<p>Before we begin, make sure you have the following installed on your system:</p>
<ol>
<li><p><a target="_blank" href="https://nodejs.org/en">Node.js</a> and npm (latest LTS version recommended)</p>
</li>
<li><p>A code editor like <a target="_blank" href="https://code.visualstudio.com/">Visual Studio Code</a></p>
</li>
<li><p>A basic understanding of TypeScript, React, and Node.js</p>
</li>
</ol>
<h3 id="heading-step-1-set-up-the-project-structure">Step 1: Set up the project structure</h3>
<p>First, let's create a new folder for our project and navigate into it:</p>
<pre><code class="lang-bash">mkdir weather-app
<span class="hljs-built_in">cd</span> weather-app
</code></pre>
<p>Next, create a <code>client</code> folder for the React app and a <code>server</code> folder for the Node.js server:</p>
<pre><code class="lang-bash">mkdir client server
</code></pre>
<h3 id="heading-step-2-set-up-the-nodejs-server">Step 2: Set up the Node.js server</h3>
<p>Navigate to the <code>server</code> folder and initialize a new Node.js project with TypeScript:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> server
npm init -y
npm install typescript ts-node @types/node --save-dev
npx tsc --init
</code></pre>
<p>Edit the <code>tsconfig.json</code> file to enable the "<code>esModuleInterop</code>" option:</p>
<pre><code class="lang-json">{
  <span class="hljs-attr">"compilerOptions"</span>: {
    <span class="hljs-attr">"esModuleInterop"</span>: <span class="hljs-literal">true</span>,
    ...
  }
}
</code></pre>
<p>Install Express, Axios, and their respective types:</p>
<pre><code class="lang-bash">npm install express axios
npm install @types/express @types/axios --save-dev
</code></pre>
<p>Create a file named <code>index.ts</code> in the <code>server</code> folder and set up a basic Express server:</p>
<pre><code class="lang-javascript"><span class="hljs-keyword">import</span> express <span class="hljs-keyword">from</span> <span class="hljs-string">'express'</span>;

<span class="hljs-keyword">const</span> app = express();
<span class="hljs-keyword">const</span> PORT = process.env.PORT || <span class="hljs-number">3001</span>;

app.get(<span class="hljs-string">'/'</span>, <span class="hljs-function">(<span class="hljs-params">req, res</span>) =&gt;</span> {
  res.send(<span class="hljs-string">'Hello from the weather app server!'</span>);
});

app.listen(PORT, <span class="hljs-function">() =&gt;</span> {
  <span class="hljs-built_in">console</span>.log(<span class="hljs-string">`Server is running on port <span class="hljs-subst">${PORT}</span>`</span>);
});
</code></pre>
<p>Add a start script to the <code>server/package.json</code> file:</p>
<pre><code class="lang-json"><span class="hljs-string">"scripts"</span>: {
  <span class="hljs-attr">"start"</span>: <span class="hljs-string">"ts-node index.ts"</span>
}
</code></pre>
<p>Test the server by running <code>npm start</code>. You should see the message "Server is running on port 3001".</p>
<h3 id="heading-step-3-set-up-the-react-app">Step 3: Set up the React app</h3>
<p>Navigate to the <code>client</code> folder and create a new React app using the <code>create-react-app</code> template:</p>
<pre><code class="lang-bash"><span class="hljs-built_in">cd</span> ../client
npx create-react-app . --template typescript
</code></pre>
<p>Install the necessary dependencies:</p>
<pre><code class="lang-bash">npm install axios react-query tailwindcss@latest postcss@latest autoprefixer@latest
</code></pre>
<p>Initialize Tailwind CSS:</p>
<pre><code class="lang-bash">npx tailwindcss init
</code></pre>
<p>Add the following to your <code>tailwind.config.js</code> file:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">module</span>.exports = {
  <span class="hljs-attr">purge</span>: [<span class="hljs-string">'./src/**/*.{js,jsx,ts,tsx}'</span>, <span class="hljs-string">'./public/index.html'</span>],
  <span class="hljs-attr">darkMode</span>: <span class="hljs-literal">false</span>,
  <span class="hljs-attr">theme</span>: {
    <span class="hljs-attr">extend</span>: {},
  },
  <span class="hljs-attr">variants</span>: {
    <span class="hljs-attr">extend</span>: {},
  },
  <span class="hljs-attr">plugins</span>: [],
}
</code></pre>
<p>Configure PostCSS by creating a <code>postcss.config.js</code> file in the <code>client</code> folder:</p>
<pre><code class="lang-javascript"><span class="hljs-built_in">module</span>.exports = {
  <span class="hljs-attr">plugins</span>: {
    <span class="hljs-attr">tailwindcss</span>: {},
    <span class="hljs-attr">autoprefixer</span>: {},
  },
}
</code></pre>
<p>Import the Tailwind CSS styles in the <code>src/index.css</code> file:</p>
<pre><code class="lang-css"><span class="hljs-keyword">@import</span> <span class="hljs-string">'tailwindcss/base'</span>;
<span class="hljs-keyword">@import</span> <span class="hljs-string">'tailwindcss/components'</span>;
<span class="hljs-keyword">@import</span> <span class="hljs-string">'tailwindcss/utilities'</span>;
</code></pre>
<h3 id="heading-step-4-fetch-and-display-weather-data">Step 4: Fetch and display weather data</h3>
<p>Now, let's fetch the weather data from a third-party API, such as OpenWeatherMap. Sign up for a free account and get your API key.</p>
<p>In the <code>server/index.ts</code> file, add an endpoint to fetch weather data using Axios:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> axios <span class="hljs-keyword">from</span> <span class="hljs-string">'axios'</span>;

<span class="hljs-comment">// Replace YOUR_API_KEY with your actual API key from OpenWeatherMap</span>
<span class="hljs-keyword">const</span> API_KEY = <span class="hljs-string">'YOUR_API_KEY'</span>;

app.get(<span class="hljs-string">'/weather/:city'</span>, <span class="hljs-keyword">async</span> (req, res) =&gt; {
  <span class="hljs-keyword">const</span> city = req.params.city;

  <span class="hljs-keyword">try</span> {
    <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> axios.get(
      <span class="hljs-string">`https://api.openweathermap.org/data/2.5/weather?q=<span class="hljs-subst">${city}</span>&amp;appid=<span class="hljs-subst">${API_KEY}</span>&amp;units=metric`</span>
    );
    res.json(response.data);
  } <span class="hljs-keyword">catch</span> (error) {
    res.status(<span class="hljs-number">500</span>).send(<span class="hljs-string">'Error fetching weather data'</span>);
  }
});
</code></pre>
<p>In the <code>client/src</code> folder, create a new file named <code>useWeather.ts</code> to fetch weather data using React Query:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> { useQuery } <span class="hljs-keyword">from</span> <span class="hljs-string">'react-query'</span>;
<span class="hljs-keyword">import</span> axios <span class="hljs-keyword">from</span> <span class="hljs-string">'axios'</span>;

<span class="hljs-keyword">const</span> fetchWeather = <span class="hljs-keyword">async</span> (city: <span class="hljs-built_in">string</span>) =&gt; {
  <span class="hljs-keyword">const</span> response = <span class="hljs-keyword">await</span> axios.get(<span class="hljs-string">`/weather/<span class="hljs-subst">${city}</span>`</span>);
  <span class="hljs-keyword">return</span> response.data;
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">const</span> useWeather = <span class="hljs-function">(<span class="hljs-params">city: <span class="hljs-built_in">string</span></span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> useQuery([<span class="hljs-string">'weather'</span>, city], <span class="hljs-function">() =&gt;</span> fetchWeather(city));
};
</code></pre>
<p>Create a new <code>WeatherCard.tsx</code> component to display the weather data:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> React <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;

<span class="hljs-keyword">interface</span> WeatherCardProps {
  weatherData: <span class="hljs-built_in">any</span>;
}

<span class="hljs-keyword">const</span> WeatherCard: React.FC&lt;WeatherCardProps&gt; = <span class="hljs-function">(<span class="hljs-params">{ weatherData }</span>) =&gt;</span> {
  <span class="hljs-keyword">return</span> (
    &lt;div className=<span class="hljs-string">"bg-white p-6 rounded-md shadow-md"</span>&gt;
      &lt;h2 className=<span class="hljs-string">"text-xl font-bold"</span>&gt;
        {weatherData.name}, {weatherData.sys.country}
      &lt;/h2&gt;
      &lt;p className=<span class="hljs-string">"text-gray-600"</span>&gt;{weatherData.weather[<span class="hljs-number">0</span>].description}&lt;/p&gt;
      &lt;p className=<span class="hljs-string">"text-4xl font-bold"</span>&gt;
        {<span class="hljs-built_in">Math</span>.round(weatherData.main.temp)}°C
      &lt;/p&gt;
    &lt;/div&gt;
  );
};

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> WeatherCard;
</code></pre>
<p>Now, update the <code>src/App.tsx</code> file to fetch and display the weather data using the <code>useWeather</code> hook and <code>WeatherCard</code> component:</p>
<pre><code class="lang-typescript"><span class="hljs-keyword">import</span> React, { useState } <span class="hljs-keyword">from</span> <span class="hljs-string">'react'</span>;
<span class="hljs-keyword">import</span> <span class="hljs-string">'./App.css'</span>;
<span class="hljs-keyword">import</span> WeatherCard <span class="hljs-keyword">from</span> <span class="hljs-string">'./WeatherCard'</span>;
<span class="hljs-keyword">import</span> { useWeather } <span class="hljs-keyword">from</span> <span class="hljs-string">'./useWeather'</span>;

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">App</span>(<span class="hljs-params"></span>) </span>{
  <span class="hljs-keyword">const</span> [city, setCity] = useState(<span class="hljs-string">'London'</span>);
  <span class="hljs-keyword">const</span> { data, isLoading, isError } = useWeather(city);

  <span class="hljs-keyword">const</span> handleSearch = <span class="hljs-function">() =&gt;</span> {
    <span class="hljs-comment">// Add your search logic here</span>
  };

  <span class="hljs-keyword">return</span> (
    &lt;div className=<span class="hljs-string">"App"</span>&gt;
      &lt;header className=<span class="hljs-string">"App-header"</span>&gt;
        &lt;h1&gt;Weather App&lt;/h1&gt;
        &lt;input
          <span class="hljs-keyword">type</span>=<span class="hljs-string">"text"</span>
          placeholder=<span class="hljs-string">"Search by city"</span>
          value={city}
          onChange={<span class="hljs-function">(<span class="hljs-params">e</span>) =&gt;</span> setCity(e.target.value)}
        /&gt;
        &lt;button onClick={handleSearch}&gt;Search&lt;/button&gt;
        {isLoading &amp;&amp; &lt;p&gt;Loading...&lt;/p&gt;}
        {isError &amp;&amp; &lt;p&gt;<span class="hljs-built_in">Error</span> fetching weather data&lt;/p&gt;}
        {data &amp;&amp; &lt;WeatherCard weatherData={data} /&gt;}
      &lt;/header&gt;
    &lt;/div&gt;
  );
}

<span class="hljs-keyword">export</span> <span class="hljs-keyword">default</span> App;
</code></pre>
<p>You now have a basic full-stack TypeScript weather app using Node.js, React, and Tailwind CSS. You can expand this app by adding a five-day forecast, error handling, and user input validation.</p>
<p>What would you add or change? Sign off in the comments!</p>
]]></content:encoded></item><item><title><![CDATA[How I Went from Salaried to Freelancing Making 4x More My First Year]]></title><description><![CDATA[That's right. It's not clickbait. And I'm gonna tell you exactly what I did.
Time for a little history lesson. I've been a developer in Greece for over a decade. Although I've been able to earn a comfortable living for local standards, I always felt ...]]></description><link>https://blog.billpair.com/how-i-went-from-salaried-to-freelancing-making-4x-more-my-first-year</link><guid isPermaLink="true">https://blog.billpair.com/how-i-went-from-salaried-to-freelancing-making-4x-more-my-first-year</guid><category><![CDATA[Career]]></category><category><![CDATA[Freelancing]]></category><dc:creator><![CDATA[Bill Pairaktaridis]]></dc:creator><pubDate>Sat, 04 Sep 2021 14:28:44 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1630762041407/B_7Qt4nti.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>That's right. It's not clickbait. And I'm gonna tell you exactly what I did.</p>
<p>Time for a little history lesson. I've been a developer in Greece for over a decade. Although I've been able to earn a comfortable living for local standards, I always felt a lot left on the table. Around the middle of 2019, I started scouting and occasionally interviewing through some remote work platforms. At that point, I realized around what my rate should be (roughly 2x what I was making), but I'd also have to cover my own expenses, such as taxes, social security, accredited accountants, etc. </p>
<p>With all that taken into account, I was still ahead but not by much. So I opted to stay at my then-current position since I was happy and was still learning a ton, especially React Native, which was ramping up to be one of the hottest technologies in the world.</p>
<p>Roughly a year later, after getting turned down for a raise, I aggressively started the process of getting incorporated (that's a requirement in the EU), as well as looking at job postings on both remote work platforms, as well as directly through LinkedIn and StackOverflow (hugely underrated work platform for devs, by the way). </p>
<p>What I found out after hitting the global market was sobering. Competition is fierce, and the level required is much higher than locally. However, I was determined to break into the worldwide market. I got rejected. A LOT. But what I figured out was that I was casting too broad a net.</p>
<h2 id="specificity-over-generalization">Specificity over generalization</h2>
<p>Once I started going after positions that focused on my strengths (Frontend, React and React Native), I saw much greater traction and success. Eventually, I landed on a job posting that lacked a lot of details but seemed intriguing enough. I got on a call with a recruiter from <a target="_blank" href="https://app.usebraintrust.com/r/bill4/">Braintrust</a> and eventually, I was onboarded on the platform.</p>
<p>Braintrust is very talent-oriented, so I had to submit a proposal with my rate, along with some details about me and my background. A couple of days later I got on a call with an engineering manager, then a code pairing interview and then 2 cultural and team fit interviews. Overall, the process was very painless and lasted just 2 weeks. 3 hours after that final interview I got the confirmation mail that I was accepted and that changed everything.</p>
<p>I was able to quit my regular job, start working my own hours, and truly experience what it's like to work in a large, diverse team with great engineering challenges.</p>
<p><em>Hint: If you wanna learn which company that is, subscribe and it will be revealed in a future post</em></p>
<p>The journey wasn't easy but it was 100% worth it. I firmly believe that if you consider yourself an engineer of value, sooner or later going after contract and consulting work will be the only option. I've also found that it's probably the best way to avoid burnout. Engineers tend to want to have meaning in their work because the matter of survival is solved relatively early on. This way you get to pick the projects you work on and how frequently you want to work on something else. It's also great that <strong>you</strong> get to pick how much you earn and not expect the salary proposition from a recruiter or company HR that doesn't actually have your best interests at heart.</p>
<p>At Braintrust, you get to decide on your own rate after seeing the range that clients offer.</p>
<p><em>Disclaimer: I know I'm singing the praises of Braintrust but I am not being paid to do so. I am a proud member of that community and believe that it's a great avenue for freelancers looking to break into the global scene.</em></p>
]]></content:encoded></item><item><title><![CDATA[What Makes an Engineer Attractive to High-End Clients?]]></title><description><![CDATA[So, you're a senior engineer. You feel that you offer a top-shelf skillset. But you're having a really hard time booking high-end clients or jobs. This guide's for you.
Focus on what you want
I've found that I achieved much greater success once I sta...]]></description><link>https://blog.billpair.com/what-makes-an-engineer-attractive-to-high-end-clients</link><guid isPermaLink="true">https://blog.billpair.com/what-makes-an-engineer-attractive-to-high-end-clients</guid><category><![CDATA[Career]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Bill Pairaktaridis]]></dc:creator><pubDate>Sun, 29 Aug 2021 13:20:51 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1629624375226/xu_Lr3doC.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>So, you're a senior engineer. You feel that you offer a top-shelf skillset. But you're having a really hard time booking high-end clients or jobs. This guide's for you.</p>
<h3 id="focus-on-what-you-want">Focus on what you want</h3>
<p>I've found that I achieved much greater success once I started focusing on roles I wanted and, conversely, the skillset required. So, when I stopped looking for "full-stack", "frontend", "javascript" and focused on React and React Native roles specifically, I found that I was getting significantly more replies and moving through the interview process with much greater success. If you want to have a high success rate, you need to learn to pick your battles.</p>
<h3 id="first-impressions">First impressions</h3>
<p>Iron out your own personal pitch and present yourself as a top-level professional from the get-go. This starts with your proposal letter or cover letter when submitting your CV. For example, this is what I'd write for a Senior React Native Engineer role:</p>
<blockquote>
<p>With over a decade of professional experience in several key web technologies, such as Ruby on Rails, Django, HTML5, SASS, as well as 3 years of dedicated experience on React Native, with 4 apps published and being used by thousands of users worldwide, I believe I'd be a great fit for your team. I also bring experience as a team lead and have extensive remote work experience, having worked primarily remote for the past 3 years. I can also help architect high-level solutions with other teams, to achieve optimal results. If there's anything you'd like to go in-depth on, feel free to reach out to me.</p>
</blockquote>
<p>Beyond that, when you get some face-to-face or Zoom time with the client, make sure you are in a well-lit environment, with a clean background and professional attire. I'm not necessarily talking about a button-down shirt, but a nice polo shirt goes a long way. </p>
<p>Remember that most interviews are about feel, more so than skill level. Be positive, talk clearly, and try to have an actual conversation with the interviewer. A great skill to develop is to eliminate filler phrases and sounds from your speech pattern, such as "umm", "eeeeh", "like" and so on. It's much better to take longer pauses between sentences than try to talk quickly and fumble over yourself.</p>
<h3 id="be-prepared">Be prepared</h3>
<p>Do some research on the company before your first interview. If you don't know what they do, a simple look at their website should fill in some gaps. Extra points if you can actually find out what their tech stack is, so you can have a bit more context about the role and how everything fits together. Don't go overboard and cyberstalk your interviewer though!</p>
<h3 id="turn-the-tables">Turn the tables</h3>
<p>Most interviewees take on a very passive role during the interview and just answer questions and when the interviewer on the other side inevitably asks "So, any questions?", they draw a blank. Another part of "being prepared" is trying to figure out where you might fit and how you can improve things after you come on board. Nobody hires a senior engineer to move buttons around with CSS. You are hired to solve real problems and even find problems and suggest high-level solutions. So ask how the teams work together. What would be required of you? How do they see you improving things? Are there some best practices that they may not be utilizing? <strong>Be memorable.</strong></p>
<h3 id="relax">Relax</h3>
<p>I know the pressure of getting a highly demanding job or contract may be overwhelming. But when you're looking at the global market, there are countless positions that you'd fit in. Relax and be your <strong>best self</strong> and don't let the pressure crush you and limit your potential. One way of achieving that is playing the numbers game. Before I landed my position at a prestigious California tech company from my home in Greece (<em>more on that in a future post</em>), I had applied to dozens, probably close to 50 positions. I hadn't utilized everything I'm outlining here, so my success rate was pretty low initially, but I didn't put all my eggs in one basket.</p>
<p>Eventually, I had 3 offers and I picked the one I'm at currently. Rejecting a client or company is never easy but it's better to have the options than have the one position be sink or swim.</p>
<p>For now, this should give you a leg up on most interviews and fellow engineers. Also, be sure to check out my <a target="_blank" href="https://blog.billpair.com/the-most-important-skill-for-a-senior-engineer">other post</a> and the <strong>most important skill for a senior engineer</strong>.</p>
<p>Until next time, peace.</p>
]]></content:encoded></item><item><title><![CDATA[It's Okay to Suck]]></title><description><![CDATA[It's honestly fine.
I have over 11 years of professional web development experience and a Computer Engineer degree and when I started a new position at a big company about 2 months ago, I sucked.
It took me 2 weeks to build a single screen in their R...]]></description><link>https://blog.billpair.com/its-okay-to-suck</link><guid isPermaLink="true">https://blog.billpair.com/its-okay-to-suck</guid><category><![CDATA[Career]]></category><category><![CDATA[impostor syndrome]]></category><dc:creator><![CDATA[Bill Pairaktaridis]]></dc:creator><pubDate>Sun, 22 Aug 2021 17:30:21 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1629653310056/X9JDDjypD.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>It's honestly fine.</p>
<p>I have over 11 years of professional web development experience and a Computer Engineer degree and when I started a new position at a big company about 2 months ago, I sucked.</p>
<p>It took me 2 weeks to build a single screen in their React Native app. But you know what? I accepted that it's impossible for me to just slot in a completely new code base and team and just hit the ground running. So I asked questions and scheduled calls with the engineers that actually built all that stuff to better understand everything.</p>
<p>And I did my best to code up to their standards. And my PR review still needed a bunch of minor changes.</p>
<p>But nobody minded. In fact, my engineering manager commended my communication skills and proactive attitude.</p>
<p>I know that my experience is not gonna be the same for everyone but for a lot of people, they accept that new hires take a while to get going.</p>
<p>Don't know who needs to hear this but it's better to ask questions and risk looking like a fool than struggle with something for days that someone else could help resolve in minutes.</p>
<p>Almost everyone I know suffers from <a target="_blank" href="https://en.wikipedia.org/wiki/Impostor_syndrome">Impostor Syndrome</a>, which is roughly the feeling that you are where you are because of trickery and you'll soon be found out and fired because everyone else seems to be doing better than you. I'm saying "almost everyone" because impostors don't suffer from it. However, you need to trust the people that hired and manage you and trust that they, in fact, know better. If you were honest in your interviews, you didn't trick anyone. You might take longer or shorter periods to learn than your peers. But you might have something they lack. </p>
<p>Perhaps, you are a master of <a target="_blank" href="https://blog.billpair.com/the-most-important-skill-for-a-senior-engineer">communication</a>. </p>
<p>It's okay to suck because everyone feels the same way. The trick is to try to suck a little bit less day by day.</p>
]]></content:encoded></item><item><title><![CDATA[The Most Important Skill for a Senior Engineer]]></title><description><![CDATA[We live in the era of constantly new and emerging technologies. It feels like every other week there's a new, hot Javascript framework that is definitely gonna be the next big thing.
Personally, I've gone from jQuery to vanilla JS to Angular to Vue.j...]]></description><link>https://blog.billpair.com/the-most-important-skill-for-a-senior-engineer</link><guid isPermaLink="true">https://blog.billpair.com/the-most-important-skill-for-a-senior-engineer</guid><category><![CDATA[Career]]></category><category><![CDATA[Software Engineering]]></category><dc:creator><![CDATA[Bill Pairaktaridis]]></dc:creator><pubDate>Fri, 20 Aug 2021 08:27:42 GMT</pubDate><enclosure url="https://cdn.hashnode.com/res/hashnode/image/upload/v1629448024091/qjS0O2kUf.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>We live in the era of constantly new and emerging technologies. It feels like every other week there's a new, hot Javascript framework that is <strong>definitely</strong> gonna be the next big thing.</p>
<p>Personally, I've gone from jQuery to vanilla JS to Angular to Vue.js and now to React and React Native, hopefully for good. I don't particularly enjoy hopping from one to the other and RN allows me to build powerful mobile apps and React, along with its new, favorite baby, <strong>Next.js</strong>, allows you to build amazing web apps with very little busy work.</p>
<p>(If it's not clear, I <strong>highly</strong> recommend getting into <a target="_blank" href="https://nextjs.org/learn/basics/create-nextjs-app?utm_source=next-site&amp;utm_medium=nav-cta&amp;utm_campaign=next-website">Next.js</a>)</p>
<p>But after a few years, the tech stuff becomes more-or-less expected from a senior engineer. You expect them to be up to date with the latest, established tech or, at the very least, be able to learn it rather quickly. I've hopped onto projects and frameworks with little prior knowledge, but the fact that I have more than a decade of experience allowed me to get up to speed pretty fast.</p>
<p>So, beyond that, what is actually the best skill a senior engineer could have?</p>
<h2 id="communication">Communication</h2>
<p>This might seem boring or cliche but it is 100% true. Ask any <em>good</em> manager and they'll confirm that. An engineer being able to articulate complex tasks to other engineers and non-engineers and break them down to easily digestible chunks is worth their weight in gold. In fact, it's been the one consistent praise I've gotten in my performance reviews. Being easy to work with and likeable will take you much farther than knowing all the ins and outs of Javascript, Python, React etc. And it all comes down to communication skills.</p>
<p>Now, communication, on its own, is hard to pin down as a concept and skill. So, I'd break it down like so:</p>
<ul>
<li>Mastery of the language - If you are a non-native English speaker, improving that as much as possible will pay dividends</li>
<li>Nuance - Able to convey in text subtlety and emotion, so you don't appear cold and detached</li>
<li>Positive attitude - Do not transfer your frustration to the other person and always try to have a positive spin on things</li>
<li>Asynchronous communication - Able to transfer as much useful information in as few back-and-forths as possible. I will expand on that at a later post</li>
</ul>
<p>Beyond communication, overall soft skills are what separate engineers from upper level management. So, if that's your career goal, I'd focus on those, along with your hard skills. I will go into that as well at a later date.</p>
<p>Until next time, peace!</p>
]]></content:encoded></item></channel></rss>