<?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: Dan Spratling</title>
    <description>The latest articles on DEV Community by Dan Spratling (@danspratling).</description>
    <link>https://dev.to/danspratling</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%2F325983%2F20800168-f36d-40c0-b40e-bd09b93233e6.jpg</url>
      <title>DEV Community: Dan Spratling</title>
      <link>https://dev.to/danspratling</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/danspratling"/>
    <language>en</language>
    <item>
      <title>Reusing ideas to supercharge your projects</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Wed, 20 Jan 2021 13:28:33 +0000</pubDate>
      <link>https://dev.to/danspratling/reusing-ideas-to-supercharge-your-projects-el1</link>
      <guid>https://dev.to/danspratling/reusing-ideas-to-supercharge-your-projects-el1</guid>
      <description>&lt;p&gt;&lt;strong&gt;Don't waste time creating the same idea over and over again. Here's how I work smart, not hard, by reusing ideas across many projects.&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;This article was originally posted over on &lt;a href="https://danspratling.dev/blog/yearly-review"&gt;danspratling.dev&lt;/a&gt;, where you can see more articles about going freelance and my career.&lt;/p&gt;


&lt;blockquote&gt;
&lt;p&gt;Any idea only used once, may as well be not used at all.&lt;/p&gt;


&lt;/blockquote&gt;

&lt;p&gt;Working in the tech industry is hard. This isn't news to anyone. Having good ideas are also hard, so why should we make our lives harder by forcing ourselves to think of new ideas all the time?&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;But copy and paste is bad, right?&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Well, sometimes.&lt;/p&gt;

&lt;p&gt;As a designer, developer, copywriter or in any other creative job role we'll always find that there are things which are very similar. Copying and pasting content has its uses, but when we decide to do it should depend on what we're doing.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When we should&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;When we are reusing an idea in the same project, it makes sense to ensure that that idea is easily repeatable&lt;/li&gt;
&lt;li&gt;When we are reusing ideas across multiple projects, we can also repeat what we've done before to save time and allow us to create a better overall product&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;When we shouldn't&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;We shouldn't ever copy and paste while learning new techniques, as it will hinder our understanding.&lt;/li&gt;
&lt;li&gt;We obviously shouldn't copy and paste others work unless we've been given explicit permission to do so. If in doubt, check&lt;/li&gt;
&lt;li&gt;We shouldn't try and reuse ideas which don't fit with what we're trying to do. Forcing a square peg into a round hole won't work.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;How we can use it to our advantage&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;So if we can repeat ideas within projects as well as across projects, how do we make the most of this?&lt;/p&gt;

&lt;p&gt;Saving time in advance allows us to compound improvements. This means that the first time we make something it will be fairly basic, but the more we reuse it the more we add until it has a lot of features which apply to a lot of scenarios. Depending on what we're working on, we might even get to a point where we can say we're "finished", which means that copying and pasting that thing provides us with almost everything we could need.&lt;/p&gt;

&lt;p&gt;And having this set up in advance makes us faster. We can deliver requests faster spending more time on new ideas rather than always having to reinvent the wheel. More free time means we can spend that learning new approaches, making improvements to other areas and advancing our careers or businesses.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;Applying this to real workflows&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;I've been using this approach for years to help enhance my workflows. I've worked in agency for years and having my own component library which I could reuse across clients made making changes substantially faster.&lt;/p&gt;

&lt;p&gt;Since starting freelancing, I've noticed the power of reusability even more and regularly use&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Email templates&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Whether we're sending out invoices, , or just setting a professional email footer, or a variety of other repetitive tasks we can use email templates to speed up our workflow by having preset text which only requires minimal changes. We all wish we could get less emails, so we can at least take the effort out of replying to many of them.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Component libraries&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Buttons, heroes, banners, navs. Websites all share a lot of similar components and often (especially when working within a niche) these sites will use these components repeatedly. So there's no reason for us to rebuild them over and over. If lots of websites use a similar style we might even share the libraries between sites.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Website templates (themes)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Even whole websites can be reused and we can select prebuilt themes from many website builders like WordPress, Shopify or Webflow, and we can even create our own. This means websites can easily be spun up in as little as a few hours if we're working with approaches which are very similar, such as informational sites.&lt;/p&gt;

&lt;p&gt;There are many more things which can be reused if we search hard enough.&lt;/p&gt;

&lt;h1&gt;
  
  
  &lt;strong&gt;The real benefits&lt;/strong&gt;
&lt;/h1&gt;

&lt;p&gt;Of course, just reusing elements isn't a benefit, but it sets us up to make far more improvements down the line, and take advantage of them.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We can spend more time focusing on our career&lt;/li&gt;
&lt;li&gt;We can learn new techniques further improving our knowledge&lt;/li&gt;
&lt;li&gt;We may be able to take more time off&lt;/li&gt;
&lt;li&gt;We might earn more by reducing the time taken&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These wont apply to everyone. Some apply more to freelancers. But regardless of who you are, what you do or where you work there will be some benefit for optimising your workflow.&lt;/p&gt;

&lt;p&gt;Work smarter, not harder.&lt;/p&gt;



If you'd like to keep up to date you should follow me on &lt;a href="https://twitter.com/dan_spratling"&gt;Twitter&lt;/a&gt; where you'll be the first to see my newest blog posts (and more).

</description>
      <category>career</category>
      <category>productivity</category>
      <category>freelance</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Is Import or Require better for JavaScript Modules?</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Wed, 13 Jan 2021 13:46:02 +0000</pubDate>
      <link>https://dev.to/danspratling/is-import-or-require-better-for-javascript-modules-3265</link>
      <guid>https://dev.to/danspratling/is-import-or-require-better-for-javascript-modules-3265</guid>
      <description>&lt;p&gt;&lt;strong&gt;Import and Require are both valid ways for including JavaScript Modules, but which is best? Find out what the differences are and which to use in your project.&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;This article was originally posted over on &lt;a href="https://danspratling.dev/blog/yearly-review"&gt;danspratling.dev&lt;/a&gt;, where you can see more articles about going freelance and my career.&lt;/p&gt;


&lt;p&gt;I've been creating websites for years, but have never thought too hard about how i actually include my libraries. Is there even a right option? Which approach should you use?&lt;/p&gt;
&lt;h2&gt;
  
  
  &lt;strong&gt;The different ways to include&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There are a few different ways which you can include files in javascript. You probably use whichever approach you're most familiar with, or whichever the documentation tells you to use.&lt;/p&gt;

&lt;p&gt;We can require modules which includes them in our application&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;but we can also import them&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;path&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After importing via either method, we can use the library in our app which works the same way for both include methods.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//join is a function offered by the path library&lt;/span&gt;
&lt;span class="nx"&gt;path&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In terms of usage, there isn't much difference here.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How including can affect performance&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Above, we are including the entire path library just to use a single function, but path has a lot more functionality than just that one function and including the entire library to use a single function is inefficient.&lt;/p&gt;

&lt;p&gt;We can include just the functions we need with both methods&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;join&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt; 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;join&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Both of these again will work in the same way as before, but now we can drop the library. When using either method there's no size difference (both will include just the join method from the library as well as anything join may depend on).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// now we don't need to specify path.join as join is included directly&lt;/span&gt;
&lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;__dirname&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;filename&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;One thing to consider is if you have a library with a lot of functions you need to use, the include can be cleaner using the import approach.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// each require is indivudial&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;join&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;join&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;parse&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;parse&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sep&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;require&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;sep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// but we can group includes when using import&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;join&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;parse&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;sep&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;path&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This may be something which impacts your project, especially if it's extremely large but for most projects this will be a fairly minor difference, and there's no file size difference between the two.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;It's worth noting that the import above will include the entire library instead of just join if the library doesn't take advantage of modules, making it much less efficient. Be wary of this. If you run into this issue but still want to use import you can instead include only the module using import join from 'path/join'&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Compatibility&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;This is where we start to see some real differences. import was only introduced in es6 (2015), with require being the main way to include packages before that.&lt;/p&gt;

&lt;p&gt;This means that if you want to ensure compatibility with older browsers then using require is a safer choice, though most modern browsers support import and you can transpile back to older versions with babel too.&lt;/p&gt;

&lt;p&gt;If you're writing in node.js rather than for the browser, then support for import has only been included much more recently, with official support for import only coming through in node 14 (2020), and with experimental support in node 12 (2019).&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Futureproofing&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;As you can imagine, with import being the more modern standard it is built to allow more functionality for your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Asynchronous importing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;import allows files to be read asynchronously, which can help improve performance when compiling and reading the files. You probably won't notice significant improvements in a standard app, but if your app includes a lot of external files, or the files you use are on a significantly slow connection, this may help&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Dynamic importing&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;import also allows files to be imported dynamically, so instead of including everything you need when the file is first read &lt;em&gt;which may cause a bloated first load&lt;/em&gt; it will only include libraries when you need them. For an application which has a lot of functionality behind the scenes &lt;strong&gt;like many modern SaaS products&lt;/strong&gt;, delaying the import of specific functionality until it's needed can have a serious performance benefit for the user&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Tree shaking&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Another benefit of import is tree shaking. Tree shaking is a term for pruning modules which aren't being used in your app, ensuring that only the code you need is included. While included methods will often rely on other methods under the hood, you likely won't need everything. Using import allows anything which is completely unused to be &lt;em&gt;shaken out&lt;/em&gt; so you're only left with useful code.&lt;/p&gt;

&lt;p&gt;Of course, all of these approaches will only work if you &lt;em&gt;don't&lt;/em&gt; transpile import to act like require so you'll have to give up compatibility on older browsers to gain these improvements.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Conclusion&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;There isn't really a &lt;em&gt;correct&lt;/em&gt; way of including files, but the way you should use will depend on what you're trying to achieve.&lt;/p&gt;

&lt;p&gt;require is better if you need to ensure compatibility with older browsers, especially if you aren't sure what your browser targets are.&lt;/p&gt;

&lt;p&gt;include is better for most other scenarios, especially if you're trying to heavily optimize your app.&lt;/p&gt;

&lt;p&gt;Regardless of which approach you choose, consistency is important as it helps other developers understand what you're aiming to achieve while avoiding&lt;/p&gt;

&lt;p&gt;If you're just starting out, and you're not sure which to pick, I would suggest using include. It's the more modern standard, which means you won't be sacrificing anything by using it but if your app needs to support older standards it's fairly easy to convert import &amp;gt; require using a transpiler like babel, which means this is probably the way to go for most users. Just beware of including the entire library like mentioned above when doing this.&lt;/p&gt;

&lt;p&gt;Here's what I recommend as the most flexible approach that avoids performance issues regardless of your config.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;//for external modules&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;Link&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;next/link&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;

&lt;span class="c1"&gt;//for your internal modules&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;Hero&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../../components/Hero.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="nx"&gt;ArticleFeed&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;../../components/ArticleFeed.js&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;





If you'd like to keep up to date you should follow me on &lt;a href="https://twitter.com/dan_spratling"&gt;Twitter&lt;/a&gt; where you'll be the first to see my newest blog posts (and more).

</description>
      <category>webdev</category>
      <category>development</category>
      <category>performance</category>
      <category>javascript</category>
    </item>
    <item>
      <title>2020 - The good. The bad. The ugly.</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Tue, 05 Jan 2021 17:02:05 +0000</pubDate>
      <link>https://dev.to/danspratling/2020-the-good-the-bad-the-ugly-1c7n</link>
      <guid>https://dev.to/danspratling/2020-the-good-the-bad-the-ugly-1c7n</guid>
      <description>&lt;p&gt;&lt;strong&gt;It's been a tough year filled with lots of emotions. Here's how the year has been for me - special thanks to all those who helped me through it.&lt;/strong&gt;&lt;/p&gt;


&lt;p&gt;This article was originally posted over on &lt;a href="https://danspratling.dev/blog/yearly-review"&gt;danspratling.dev&lt;/a&gt;, where you can see more articles about going freelance and my career.&lt;/p&gt;



&lt;h2&gt;
  
  
  &lt;strong&gt;2020 has been a wild year.&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;It's not uncommon to think of those in the technical industry being kept inside the whole time, but this year has taken that to a whole other level, where many of us switching to a forced work from home environment with very little reason or ability to go outside.&lt;/p&gt;

&lt;p&gt;Not quite how I imagined the remote working revolution to go down.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Career&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;My career has had a lot of ups and downs this year. I started off the year working for a company I hated, which was stuck in the past with no confidence in any of its employees while expecting them to work themselves to the bone.&lt;/p&gt;

&lt;p&gt;I left there in february and moved to a new company working in app development (a new concept for me) which I enjoyed as a new learning experience but the consultancy aspect of the company was strange and it was a very fend-for-yourself kind of environment.&lt;/p&gt;

&lt;p&gt;So in summer time, after the start of the pandemic and talks of the company potentially being forced into making me redundant I decided to go freelance. It was something I'd been thinking about for a long time. It might not have been the perfect opportunity, but it was the one I took. I began hyping up the change on social media and finally took the leap in July.&lt;/p&gt;

&lt;p&gt;That's 3 different roles in a single year, if you weren't counting&lt;/p&gt;

&lt;p&gt;Since then, I've been working on defining my niche and expressing my User Experience focused skillset, but it's been more successful than I'd have ever hoped with loads of freelance enquiries and a lot of work coming through too. A rocky start to the year changed my career path for the better - I don't think I'd ever go back.&lt;/p&gt;

&lt;p&gt;And on top of that all, I released my new portfolio in the beginning of December to help boost my freelancing career even more. I'll be continuing to work on this for the foreseeable future. &lt;a href="https://danspratling.dev"&gt;If you haven't seen it yet, take a look.&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Social&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I started posting on my social media accounts back in March, and since then I've grown to nearly 10,000 followers. I don't post much motivational content, or even memes. I just post what I'm thinking when I think it and still thousands of people enjoy what I have to say, and I'm honestly so grateful.&lt;/p&gt;

&lt;p&gt;I never imagined having any kind of social media presence before and I'm still getting used to it. I started off trying really hard, but that's now toned down and I'm being more true to myself on twitter, posting more about things I'm doing and what I've learned than posting things for likes. It's slower growth, but I prefer it. It's more me.&lt;/p&gt;

&lt;p&gt;You can find me on &lt;a href="https://twitter.com/dan_spratling"&gt;Twitter&lt;/a&gt;, &lt;a href="https://www.linkedin.com/in/dan-spratling/"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://www.instagram.com/danspratling/"&gt;Instagram&lt;/a&gt;, and I've recently started posting regularly on &lt;a href="https://dev.to/danspratling"&gt;Dev.to&lt;/a&gt; and &lt;a href="https://danspratling.medium.com/"&gt;Medium&lt;/a&gt;. Be sure to follow me on each if you like my content.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Personal&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;With being in on-and-off lockdowns throughout most of the year, my personal life has mostly been put on hold, so not much has changed, but I'm currently looking for a larger apartment to rent - hopefully being able to find something in the beginning of the new year.&lt;/p&gt;

&lt;p&gt;Friends, Family, &amp;amp; the outstanding developer community&lt;br&gt;
I would be remiss to not mention a ton of people who helped me get through this year. I wouldn't have made it this far without any of these people.&lt;/p&gt;

&lt;p&gt;My girlfriend has given me constant support and that has been extremely helpful, especially in the periods of time where I was unsure about my working situation.&lt;/p&gt;

&lt;p&gt;My friends and family have also been extremely supportive and even though I haven't been able to see them much (or for some of my friends, at all) it's been really good knowing that they're there for me.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/c_southam"&gt;Chris&lt;/a&gt; has been my mentor since my second job. He built up my confidence to where it is today and that's the most valuable asset I retain to this day, and even though we no longer work together we remain great friends and he still gives me support when I need it!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/tom_hirst"&gt;Tom&lt;/a&gt; is a more recent connection but has taught me a ton of stuff about the freelancing world. His advice is outstanding, but even in private conversations he's always happy to help out with specific questions I might have. His book, &lt;a href="https://gumroad.com/a/155382899"&gt;pricing freelance projects&lt;/a&gt;, helped me understand the value I could bring as a freelancer and while I'm still figuring out the more specific aspects of that, I would not have gotten off to such a good start without his help.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/anniebombanie_"&gt;Annie&lt;/a&gt; is one of the kindest people on twitter and has helped me in numerous ways, from using her designers eye to help me make hard decisions on my portfolio, to cheering me up and being an amazing friend.&lt;/p&gt;

&lt;p&gt;And there are so many more people who I've become friends with and have made this year much more bearable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://twitter.com/rothecoder"&gt;Ro&lt;/a&gt;, &lt;a href="https://twitter.com/devinDford"&gt;Devin&lt;/a&gt;, &lt;a href="https://twitter.com/accolades_dev"&gt;Luc&lt;/a&gt;, &lt;a href="https://twitter.com/natterstefan"&gt;Stefan&lt;/a&gt;, &lt;a href="https://twitter.com/DThompsonDev"&gt;Danny&lt;/a&gt;, &lt;a href="https://twitter.com/miss_lorsx"&gt;Lors&lt;/a&gt;, &lt;a href="https://twitter.com/EddyVinckk"&gt;Eddy&lt;/a&gt;, &lt;a href="https://twitter.com/BauerVadim"&gt;Vadim&lt;/a&gt;, &lt;a href="https://twitter.com/FrancescoCiull4"&gt;Francesco&lt;/a&gt;, &lt;a href="https://twitter.com/SimonHoiberg"&gt;Simon&lt;/a&gt;, &lt;a href="https://twitter.com/KassandraSanch"&gt;Kass&lt;/a&gt;, &lt;a href="https://twitter.com/chrisdixon161"&gt;Chris&lt;/a&gt;, &lt;a href="https://twitter.com/tadaspetra"&gt;Tadas&lt;/a&gt;, &lt;a href="https://twitter.com/lauracharvey"&gt;Laura&lt;/a&gt;, &lt;a href="https://twitter.com/shookcodes"&gt;Sarah&lt;/a&gt;, &lt;a href="https://twitter.com/AnnaJMcDougall"&gt;Anna&lt;/a&gt;, &lt;a href="https://twitter.com/madsbrodt"&gt;Mads&lt;/a&gt;, &lt;a href="https://twitter.com/jackdomleo7"&gt;Jack&lt;/a&gt;, &lt;a href="https://twitter.com/themarcba"&gt;Marc&lt;/a&gt;, &lt;a href="https://twitter.com/catalinmpit"&gt;Catalin&lt;/a&gt;, &lt;a href="https://twitter.com/NehemiahKiv"&gt;Nehemiah&lt;/a&gt;, &lt;a href="https://twitter.com/florinpop1705"&gt;Florin&lt;/a&gt;, &lt;a href="https://twitter.com/adrian_twarog"&gt;Adrian&lt;/a&gt;, and the elusive &lt;a href="https://twitter.com/frontenddude"&gt;"Frontend Dude"&lt;/a&gt; and there are so many more I interact with regularly who I'm so grateful to talk with. Give everyone in the list a follow - I promise you won't regret it.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Round-up&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This year was a tough year, and I know that I had it better than many. What with the &lt;a href="https://blacklivesmatter.carrd.co/"&gt;Black Lives Matter&lt;/a&gt; movement, &lt;a href="https://twitter.com/search?q=%23endsars&amp;amp;src=typed_query"&gt;#ENDSARS&lt;/a&gt;, and of course the pandemic there are a lot of emotions going around. Whether you're struggling with being kept inside, furious at the world or have even lost a loved one you haven't been able to see, my heart goes out to you. This year was tough. Hopefully next year will be better.&lt;/p&gt;



If you'd like to keep up to date you should follow me on &lt;a href="https://twitter.com/dan_spratling"&gt;Twitter&lt;/a&gt; where you'll be the first to see my newest blog posts (and more).

</description>
      <category>webdev</category>
      <category>career</category>
      <category>portfolio</category>
    </item>
    <item>
      <title>I rebuilt my portfolio website twice this year. Here's why.</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Wed, 16 Dec 2020 16:39:00 +0000</pubDate>
      <link>https://dev.to/danspratling/i-rebuilt-my-portfolio-website-twice-this-year-here-s-why-5eap</link>
      <guid>https://dev.to/danspratling/i-rebuilt-my-portfolio-website-twice-this-year-here-s-why-5eap</guid>
      <description>&lt;p&gt;I rebuilt my portfolio website twice this year.&lt;/p&gt;

&lt;p&gt;I know how that sounds.&lt;/p&gt;

&lt;p&gt;So why did I build my portfolio twice in one year when there are so many other things I could have been spending my time on?&lt;/p&gt;

&lt;p&gt;There are a few reasons...&lt;/p&gt;




&lt;p&gt;This article was originally posted over on &lt;a href="https://danspratling.dev" rel="noopener noreferrer"&gt;danspratling.dev&lt;/a&gt;, where you can see more articles about my website, design and development process and other projects I've worked on.&lt;/p&gt;



&lt;h2&gt;
  
  
  Learning how to design
&lt;/h2&gt;

&lt;p&gt;I often use my portfolio website to test out new ideas and concepts, and one of my biggest challenges this year was learning how to design.&lt;/p&gt;

&lt;p&gt;And what better way than to redesign my own website?&lt;/p&gt;

&lt;p&gt;Specifically, I was learning how to use &lt;a href="https://www.figma.com/" rel="noopener noreferrer"&gt;figma - an awesome cloud-based design tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using Figma to design a full website from the ground up helped encourage good working practices like theming &amp;amp; componentization.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/file/eVADlbqyz8cBAfqfo4eM1e/Portfolio-Design?node-id=0%3A1" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.datocms-assets.com%2F38195%2F1608024631-screenshot-2020-12-15-at-09-19-38.png" alt="See the design I created for my new portfolio in Figma"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Could I have done a better job? Absolutely.&lt;/p&gt;

&lt;p&gt;But I learned a lot&lt;/p&gt;

&lt;p&gt;Understanding the core of how figma works will only make my design process faster in the future and allow me to practice more complex skills next time around &lt;/p&gt;

&lt;p&gt;And for a first attempt using figma, it turned out pretty well with the finished website clocking in at over 700 likes on Twitter&lt;br&gt;
&lt;iframe class="tweet-embed" id="tweet-1335897887427923971-50" src="https://platform.twitter.com/embed/Tweet.html?id=1335897887427923971"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1335897887427923971-50');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1335897887427923971&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;h2&gt;
  
  
  Learning new technologies
&lt;/h2&gt;

&lt;p&gt;A portfolio is the perfect place to try out new technologies which are interesting. &lt;/p&gt;

&lt;p&gt;It's large enough to get really stuck into the new tool (or tools) but small enough to not be overwhelming or too complicated to understand what's going on.&lt;/p&gt;

&lt;p&gt;I build my new portfolio using NextJS, TailwindCSS and DatoCMS and before starting the project 3 months ago I'd only used each of these a little.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.datocms-assets.com%2F38195%2F1608024664-screenshot2020-12-15at09-23-18.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%2Fwww.datocms-assets.com%2F38195%2F1608024664-screenshot2020-12-15at09-23-18.png" alt="NextJS homepage"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Using my portfolio to practice new skills means I'm able to demonstrate my experience to clients with a real project to back that up so while I was never too worried about learning these tools, practising with a project which matters helps encourage me to understand each tool deeply as I care more about the results.&lt;/p&gt;

&lt;p&gt;Skills which can then be passed on to my other work resulting in even higher quality builds. &lt;/p&gt;

&lt;h2&gt;
  
  
  Going Freelance
&lt;/h2&gt;

&lt;p&gt;This was the primary reason I decided to rebuild my website from the ground up.&lt;/p&gt;

&lt;p&gt;Going freelance meant a big change to my primary audience, where potential (and repeat) clients become the top priority for my website. My new website needed to show clients exactly what I'm capable of and make it easy for them to hire me. &lt;/p&gt;

&lt;p&gt;Fellow developers are still a core part of my audience, but they became my secondary audience.&lt;/p&gt;

&lt;p&gt;And this change meant my old website was almost entirely useless for my new focus, so if I was ever going to rebuild now was the perfect chance.&lt;/p&gt;

&lt;p&gt;Combine this with a need for a new design and a desire to learn new technologies and a rebuild was the obvious choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  When should you rebuild your website?
&lt;/h2&gt;

&lt;p&gt;If technology has progressed a long way since your website was created and you haven't been actively maintaining it, it's worth considering a rebuild. A fresh start always feels great but it likely isn't always the right choice.&lt;/p&gt;

&lt;p&gt;Benefits to rebuilding from scratch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You'll likely clear off your technical debt, making the solution far more manageable&lt;/li&gt;
&lt;li&gt;It's an opportunity to try out new things, especially on smaller non-consequential projects&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Downsides to rebuilding from scratch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It's a lot of effort and very time-consuming!&lt;/li&gt;
&lt;li&gt;It's harder to test where problems have been solved when you start from scratch&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://danspratling.dev" rel="noopener noreferrer"&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%2Fi%2Fdrjcvfjgdpxw6q36ge6b.png" title="See it for yourself" alt="Dan Spratling's new portfolio website"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;If you need help rebuilding or maintaining your website, or deciding which option is best for you then &lt;a href="https://danspratling.dev/contact" rel="noopener noreferrer"&gt;get in touch&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you'd like to keep up to date you should follow me on Twitter where you'll be the first to see my newest blog posts (and more).&lt;/p&gt;





</description>
      <category>webdev</category>
      <category>career</category>
      <category>portfolio</category>
    </item>
    <item>
      <title>How I make $10k per month after only 3 months freelancing</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Fri, 11 Dec 2020 10:49:10 +0000</pubDate>
      <link>https://dev.to/danspratling/how-i-make-10k-per-month-after-only-3-months-freelancing-3gl</link>
      <guid>https://dev.to/danspratling/how-i-make-10k-per-month-after-only-3-months-freelancing-3gl</guid>
      <description>&lt;p&gt;It's rare that freelancers talk openly about money preferring to keep our experiences to ourselves. I'm different. Here's how I grew my business to earn $10k per month within my first few months freelancing.&lt;/p&gt;




&lt;p&gt;This article was originally posted over on &lt;a href="https://danspratling.dev" rel="noopener noreferrer"&gt;danspratling.dev&lt;/a&gt;, where you can see more articles about going freelance and my career.&lt;/p&gt;




&lt;p&gt;In the 3 months I've been working as a freelancer I've gone from working 1 week in a month to earning double the salary I made at my last job, and I wouldn't have been able to do that without understanding my value and taking the risk required to create a business on my own.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Disclaimer: My earnings and expenses WILL be different from yours, and many things can factor into these figures including experience, location, industry, and project type. Trends are far more important to understand than figures, so focus on that more than the actual monetary value. Figures are converted to USD for easiest comparisons but note that I am based in the UK so tax and other figures will reflect that.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How did I get here?
&lt;/h2&gt;

&lt;p&gt;I started freelancing in July 2020. We were in the middle of a lockdown at the time, due to the Covid pandemic, and I was on the verge of being made redundant from my current firm. I'd been considering freelancing for a while, so I'd been doing my research and figuring out the best way to approach the change, which I've written about &lt;a href="https://danspratling.dev/blog/becoming-a-freelancer" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;For context, my salary before going freelance was £40,000 per year, which is around $53,000 (both numbers are before tax).&lt;/p&gt;

&lt;h2&gt;
  
  
  Breaking down my financials
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Income
&lt;/h3&gt;

&lt;p&gt;So far I've worked for 2 clients. One as a once-off project and one which is a continuing long-term relationship. For my first 2 months, I only worked for a single week, but for the third month, I worked most days which you can see in the graph below.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.datocms-assets.com%2F38195%2F1607682717-income.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%2Fwww.datocms-assets.com%2F38195%2F1607682717-income.png" alt="Graph showing my freelance income from July to November 2020 - data matches the table below"&gt;&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;Month&lt;/th&gt;
&lt;th&gt;Income&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;July&lt;/td&gt;
&lt;td&gt;$1,451.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;August&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;September&lt;/td&gt;
&lt;td&gt;$2,852.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;October&lt;/td&gt;
&lt;td&gt;$9,705.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;November&lt;/td&gt;
&lt;td&gt;$8,296.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Totals&lt;/td&gt;
&lt;td&gt;$22,304.00&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;While these numbers look great, keep in mind that we're only looking at the good part. We still need to consider all of the expenses which come with running a business.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tax &amp;amp; Insurance
&lt;/h3&gt;

&lt;p&gt;As with all businesses, I am charged tax on my income. This means that I do not get to keep everything I earn. A good estimate is to keep 30% of your income aside to pay for tax and other government expenses. I like to be cautious so I actually save slightly more than that, as I will not know the amount to pay until the end of the tax year.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.datocms-assets.com%2F38195%2F1607682719-income-vs-after-tax.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%2Fwww.datocms-assets.com%2F38195%2F1607682719-income-vs-after-tax.png" alt="Graph showing my freelance income plotted against income after tax from July to November 2020 - data matches the table below"&gt;&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;Month&lt;/th&gt;
&lt;th&gt;Income&lt;/th&gt;
&lt;th&gt;Tax (est 30%)&lt;/th&gt;
&lt;th&gt;Income after tax&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;July&lt;/td&gt;
&lt;td&gt;$1,451.00&lt;/td&gt;
&lt;td&gt;$435.30&lt;/td&gt;
&lt;td&gt;$1,015.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;August&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;September&lt;/td&gt;
&lt;td&gt;$2,852.00&lt;/td&gt;
&lt;td&gt;$855.60&lt;/td&gt;
&lt;td&gt;$1,996.40&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;October&lt;/td&gt;
&lt;td&gt;$9,705.00&lt;/td&gt;
&lt;td&gt;$2,911.50&lt;/td&gt;
&lt;td&gt;$6,793.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;November&lt;/td&gt;
&lt;td&gt;$8,296.00&lt;/td&gt;
&lt;td&gt;$2,488.80&lt;/td&gt;
&lt;td&gt;$5,807.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Totals&lt;/td&gt;
&lt;td&gt;$22,304.00&lt;/td&gt;
&lt;td&gt;$6,691.20&lt;/td&gt;
&lt;td&gt;$15,612.80&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  Business Expenses
&lt;/h3&gt;

&lt;p&gt;Of course, no business is without expenses. Especially one starting from nothing. Most of the expenses incurred were "optional", by which I mean I did not need to purchase them immediately and as you can see, I waited until I had work (and therefore, income) lined up before buying the larger purchases. I could have delayed these purchases until I had more income if required, at the expense of some performance or ergonomics.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;July - Largest expense: Learning materials at $24&lt;/li&gt;
&lt;li&gt;August - Largest expense: Software Licenses at $131&lt;/li&gt;
&lt;li&gt;September - Largest expense: New laptop at $3315&lt;/li&gt;
&lt;li&gt;October - Largest expense: New desk/chair setup at $530 each&lt;/li&gt;
&lt;li&gt;November - Largest expense: Learning materials at $53&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(All expenses have tax included in their price)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.datocms-assets.com%2F38195%2F1607682722-after-tax-vs-business.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%2Fwww.datocms-assets.com%2F38195%2F1607682722-after-tax-vs-business.png" alt="Graph showing my freelance income after-tax plotted against income after business expenses from July to November 2020 - data matches the table below"&gt;&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;Month&lt;/th&gt;
&lt;th&gt;Income&lt;/th&gt;
&lt;th&gt;Tax (est 30%)&lt;/th&gt;
&lt;th&gt;Income after tax&lt;/th&gt;
&lt;th&gt;Expenses&lt;/th&gt;
&lt;th&gt;Income after expenses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;July&lt;/td&gt;
&lt;td&gt;$1,451.00&lt;/td&gt;
&lt;td&gt;$435.30&lt;/td&gt;
&lt;td&gt;$1,015.70&lt;/td&gt;
&lt;td&gt;$35.00&lt;/td&gt;
&lt;td&gt;$980.70&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;August&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;0&lt;/td&gt;
&lt;td&gt;$183.00&lt;/td&gt;
&lt;td&gt;-$183.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;September&lt;/td&gt;
&lt;td&gt;$2,852.00&lt;/td&gt;
&lt;td&gt;$855.60&lt;/td&gt;
&lt;td&gt;$1,996.40&lt;/td&gt;
&lt;td&gt;$3,513.00&lt;/td&gt;
&lt;td&gt;-$1,516.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;October&lt;/td&gt;
&lt;td&gt;$9,705.00&lt;/td&gt;
&lt;td&gt;$2,911.50&lt;/td&gt;
&lt;td&gt;$6,793.50&lt;/td&gt;
&lt;td&gt;$1,133.00&lt;/td&gt;
&lt;td&gt;$5,660.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;November&lt;/td&gt;
&lt;td&gt;$8,296.00&lt;/td&gt;
&lt;td&gt;$2,488.80&lt;/td&gt;
&lt;td&gt;$5,807.20&lt;/td&gt;
&lt;td&gt;$106.00&lt;/td&gt;
&lt;td&gt;$5,701.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Totals&lt;/td&gt;
&lt;td&gt;$22,304.00&lt;/td&gt;
&lt;td&gt;$6,691.20&lt;/td&gt;
&lt;td&gt;$15,612.80&lt;/td&gt;
&lt;td&gt;$4,970.00&lt;/td&gt;
&lt;td&gt;$10,642.80&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Of course, business expenses are not the only expenses to worry about when working for yourself. You also need to consider personal expenses - you need to buy food and pay rent after all. Just covering your business expenses isn't enough. Ensure you are earning enough to cover both your business and personal expenses.&lt;/p&gt;

&lt;p&gt;On average, my personal expenses are around $1600 (£1200) per month so it's essential I earn more than this. Personal expenses are always something to consider when calculating how much your freelance business needs to earn, as you still need to earn enough to pay your bills and effectively pay yourself a wage. Below is a new graph, taking personal expenses into account.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fwww.datocms-assets.com%2F38195%2F1607682725-after-tax-vs-personal.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%2Fwww.datocms-assets.com%2F38195%2F1607682725-after-tax-vs-personal.png" alt="Graph showing my freelance income after-tax + business expenses plotted against income after business + personal expenses from July to November 2020 - data matches the table below"&gt;&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;Month&lt;/th&gt;
&lt;th&gt;Income&lt;/th&gt;
&lt;th&gt;Tax (est 30%)&lt;/th&gt;
&lt;th&gt;Income after tax&lt;/th&gt;
&lt;th&gt;Expenses&lt;/th&gt;
&lt;th&gt;Income after expenses&lt;/th&gt;
&lt;th&gt;Income after personal Expenses&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;July&lt;/td&gt;
&lt;td&gt;$1,451.00&lt;/td&gt;
&lt;td&gt;$435.30&lt;/td&gt;
&lt;td&gt;$1,015.70&lt;/td&gt;
&lt;td&gt;$35.00&lt;/td&gt;
&lt;td&gt;$980.70&lt;/td&gt;
&lt;td&gt;-$619.30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;August&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$0&lt;/td&gt;
&lt;td&gt;$183.00&lt;/td&gt;
&lt;td&gt;-$183.00&lt;/td&gt;
&lt;td&gt;-$1,783.00&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;September&lt;/td&gt;
&lt;td&gt;$2,852.00&lt;/td&gt;
&lt;td&gt;$855.60&lt;/td&gt;
&lt;td&gt;$1,996.40&lt;/td&gt;
&lt;td&gt;$3,513.00&lt;/td&gt;
&lt;td&gt;-$1,516.60&lt;/td&gt;
&lt;td&gt;-$3,116.60&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;October&lt;/td&gt;
&lt;td&gt;$9,705.00&lt;/td&gt;
&lt;td&gt;$2,911.50&lt;/td&gt;
&lt;td&gt;$6,793.50&lt;/td&gt;
&lt;td&gt;$1,133.00&lt;/td&gt;
&lt;td&gt;$5,660.50&lt;/td&gt;
&lt;td&gt;$4,060.50&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;November&lt;/td&gt;
&lt;td&gt;$8,296.00&lt;/td&gt;
&lt;td&gt;$2,488.80&lt;/td&gt;
&lt;td&gt;$5,807.20&lt;/td&gt;
&lt;td&gt;$106.00&lt;/td&gt;
&lt;td&gt;$5,701.20&lt;/td&gt;
&lt;td&gt;$4,101.20&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;td&gt;---&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Totals&lt;/td&gt;
&lt;td&gt;$22,304.00&lt;/td&gt;
&lt;td&gt;$6,691.20&lt;/td&gt;
&lt;td&gt;$15,612.80&lt;/td&gt;
&lt;td&gt;$4,970.00&lt;/td&gt;
&lt;td&gt;$10,642.80&lt;/td&gt;
&lt;td&gt;$2,642.80&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Summary
&lt;/h2&gt;

&lt;p&gt;These graphs may look like they are getting worse and worse, and over the course of 5 months, I've not made a lot of money considering how flashy "earning $10k in a month" sounds. I earned very little for the first 3 months due to the time and effort required just finding the work. These are only the first few months of freelancing, and this is why starting any business is hard, and it's always possible for there to be more periods where I don't have much work.&lt;/p&gt;

&lt;p&gt;I needed to improve my setup and order some new equipment (an ergonomic chair, desk and a new laptop) which were a significant cost but could also have been delayed if necessary and did not &lt;em&gt;have&lt;/em&gt; to be as expensive as the ones I chose. I could have opted for cheaper equipment or delayed the purchases if I was worried about the expenses. These are expenses which won't occur for another 3-5 years, however, so this upfront cost doesn't concern me.&lt;/p&gt;

&lt;p&gt;With the major expenses now paid for, all further income can be used for future business growth and ensuring stability.&lt;/p&gt;




&lt;p&gt;If you'd like to keep up to date you should &lt;a href="https://twitter.com/dan_spratling" rel="noopener noreferrer"&gt;follow me on Twitter&lt;/a&gt; where you'll be the first to see my newest blog posts (and more).&lt;/p&gt;




</description>
      <category>career</category>
      <category>webdev</category>
    </item>
    <item>
      <title>How I found my first freelance project</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Mon, 21 Sep 2020 11:40:47 +0000</pubDate>
      <link>https://dev.to/danspratling/how-i-found-my-first-freelance-project-42gj</link>
      <guid>https://dev.to/danspratling/how-i-found-my-first-freelance-project-42gj</guid>
      <description>&lt;h3&gt;
  
  
  Your first project is always the hardest to find. This is the story of how I found mine.
&lt;/h3&gt;

&lt;p&gt;I've been working as a freelancer for 3 months now and I get asked a lot of questions about how I found my freelance work and how others might find work for themselves. I've decided to share the approach I took finding my first project, my experience with it and the results.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to find freelance projects
&lt;/h2&gt;

&lt;p&gt;There are many ways you can go about finding freelance projects, and each might work for different people. When I started freelancing, I made it known across my network. I reached out to friends and family asking them to recommend me to others. I spread the word on social media, showcasing my skills through the public development of a new portfolio website. I got in touch with previous workplaces offering my services on a freelance basis.&lt;/p&gt;

&lt;p&gt;There's no right answer on how to find freelance projects, and some people have success with many different approaches.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Close friends and family&lt;/li&gt;
&lt;li&gt;Previous workplaces&lt;/li&gt;
&lt;li&gt;Social media&lt;/li&gt;
&lt;li&gt;Cold calling, either in person or via email outreach&lt;/li&gt;
&lt;li&gt;Freelancing platforms (upwork, toptal, etc)&lt;/li&gt;
&lt;li&gt;Referrals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can use any or all of these to find your first project (and many projects after that).&lt;/p&gt;

&lt;p&gt;My first project came through twitter.&lt;/p&gt;

&lt;h2&gt;
  
  
  My first project
&lt;/h2&gt;

&lt;p&gt;It took me a few weeks to get my first project. After reaching out to others on the channels I mentioned above I had a lot of feedback, with people getting in touch wanting help with their projects.&lt;/p&gt;

&lt;p&gt;So I had a lot of calls and talked through the ideas proposed (I used Calendly to schedule these). Some projects I could help with, some I couldn't. For those where I could help, I wrote proposals demonstrating how I'd approach fixing their specific problems.&lt;/p&gt;

&lt;p&gt;Some people dropped out at this point, which is expected. Some just want to know how much their idea would cost. After a few calls, I found my first client.&lt;/p&gt;

&lt;p&gt;The project was Pigeon Loans, which you can read more about in the &lt;a href="https://danspratling.dev/projects/pigeon-loans"&gt;Pigeon Loans Case Study on my website&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to choose the right project
&lt;/h2&gt;

&lt;p&gt;When going for your first freelance project, you want to make sure you pick something which is right for you. Whether you get a lot of interest or just one person, if the project isn't right for you then you should be wary of taking it.&lt;/p&gt;

&lt;p&gt;There's something to be said about learning on the go, and a lot of projects will present you with opportunities to learn new things, but if something is far out of your comfort range it might not be the project for you, or you might spend far longer than expected actually delivering what you promised.&lt;/p&gt;

</description>
      <category>career</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Becoming a Freelancer</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Mon, 27 Jul 2020 18:43:08 +0000</pubDate>
      <link>https://dev.to/danspratling/becoming-a-freelancer-5bjn</link>
      <guid>https://dev.to/danspratling/becoming-a-freelancer-5bjn</guid>
      <description>&lt;h2&gt;
  
  
  It was time to make a change.
&lt;/h2&gt;

&lt;p&gt;I've been struggling to thrive in corporate environments for a while. Lots of meetings, very little team-play, or having poor leadership. Some of the workplaces I'd been in had been toxic, others just couldn't accommodate the growth I was capable of. Whether big or small, I'd been held back working for other businesses and I'd had enough.&lt;/p&gt;

&lt;p&gt;It was time to take back control.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This article was &lt;a href="https://danspratling.dev/blog/becoming-a-freelancer"&gt;originally posted on my blog&lt;/a&gt;. Some of the links contained within are affiliate links, and I would be extremely grateful if you choose to support my content if you find it helpful.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;I started researching, as we all do when making a life-changing decision (I hope!). I gathered as much information as I could, looking for ways to make a living as a freelancer. Many of my friends had been freelance at some point so I asked them for help, either by asking for advice or through referrals.&lt;/p&gt;

&lt;h2&gt;
  
  
  Finding clients
&lt;/h2&gt;

&lt;p&gt;Asking for clients through friends and family was a great way to get started. I only found a couple of clients this way, but it's a great boost into the freelance world and gives you a little more freedom to try things out as friends and family are more likely to help you find your feet (mistakes matter less).&lt;/p&gt;

&lt;p&gt;Twitter (and other social media platforms) can also be a great way to find clients. This is likely to be more successful if you have a larger following, but reaching out and offering assistance, showing expertise, and proving yourself will help you gain a following very quickly if you don't already have one. Social media can be free advertising for you if you use it wisely.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some of the most helpful tips
&lt;/h2&gt;

&lt;p&gt;I managed to garner a lot of help from the freelancers I knew, as well as from the reading I was doing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always make a great impression.&lt;/strong&gt;&lt;br&gt;
As a freelancer, one of the best ways to find more work is word of mouth. Doing a great job attracts more jobs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Code is only a part of your value.&lt;/strong&gt;&lt;br&gt;
As a freelancer you aren't just writing code. That's not where your value &lt;strong&gt;really&lt;/strong&gt; lies. Your value is in your expertise. For me, this is my ability to really understand users and find solutions that others aren't able to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't charge hourly.&lt;/strong&gt;&lt;br&gt;
Similar to before, charging hourly presents you as a commodity. By charging hourly, you communicate the message that your value comes from your price, and not the impact what you deliver has for your client.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Take payment upfront.&lt;/strong&gt;&lt;br&gt;
Where possible, take complete payment for the job upfront. Everyone's heard stories of various contractors doing a bad job and then running, but it happens in reverse too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Make contracts.&lt;/strong&gt;&lt;br&gt;
They're boring, I know. But if a relationship does go south, then having a contract in place means both parties know exactly what was meant to be done, for how much, and by when. Nobody complains about a little security.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always be marketing.&lt;/strong&gt;&lt;br&gt;
When you start out, this is obvious, but as you gain work it can be very easy to forget that there will be no work lined up later. Always make new connections.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always be networking.&lt;/strong&gt;&lt;br&gt;
At some point, I guarantee that you'll be asked to utilize a skill you don't have (or have no interest learning). Finding people who do have these skills in advance makes it extremely easy to work with them later.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Work a regular routine.&lt;/strong&gt;&lt;br&gt;
Even when you don't have work on right now, you should still stick to your usual routine. Routine helps keep you efficient, and working when you have no contracted work means you can do your own side projects, more marketing, or any other business requirements you're missing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Don't forget to take breaks.&lt;/strong&gt;&lt;br&gt;
The whole point of freelancing is freedom, so don't get stuck working 12 hour days, and remember that you can take breaks whenever you want without feeling guilty.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some helpful resources
&lt;/h2&gt;

&lt;p&gt;As with all new experiences I undertake, I did some reasearch beforehand to understand better the leap I was about to make. These learning materials helped me greatly to gather a deeper understanding about freelancing or helpful skills around freelancing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Becoming a Better Freelancer.&lt;/strong&gt;&lt;br&gt;
A free &amp;amp; quick guide giving you crucial tips on how to become a freelancer. Also check out &lt;a href="https://twitter.com/tom_hirst/status/1277933730078785537?s=20"&gt;Tom's super helpful thread&lt;/a&gt; or &lt;a href="https://gumroad.com/l/pcUlz"&gt;his book on how to price freelance work&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Start Freelancing Today.&lt;/strong&gt;&lt;br&gt;
Kelly's personal study on &lt;a href="https://startfreelancing.today/"&gt;her journey into becoming a freelancer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Study Web Development.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://gumroad.com/a/464876659"&gt;The all-inclusive guide on how to become a freelancer&lt;/a&gt;, including everything you'll need to start.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;How to get followers on Twitter.&lt;/strong&gt;&lt;br&gt;
Not strictly a resource for freelancing, but given how important twitter was for my new career path, I'd be amiss to leave out &lt;a href="https://gumroad.com/a/750875763"&gt;Danny's excellent guide to Twitter&lt;/a&gt; and the benefits it can bring you.&lt;/p&gt;

&lt;h2&gt;
  
  
  My experience so far
&lt;/h2&gt;

&lt;p&gt;So far, my experience with freelancing has been great. It's definitely proven to be the lifestyle I want. The freedom and flexibility it brings are excellent, and I don't think I'll be able to go back to working for a company.&lt;/p&gt;

&lt;p&gt;Just a little of my experience so far:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I've made contact with 8 clients in less than 2 weeks.&lt;/li&gt;
&lt;li&gt;Over half of these leads came through Twitter.&lt;/li&gt;
&lt;li&gt;I've agreed to my first contract after excellent discussions with the client, and received payment.&lt;/li&gt;
&lt;li&gt;I've lost 2 leads, but it can't be expected that every lead will be a perfect fit.&lt;/li&gt;
&lt;li&gt;I've had the freedom to work on my own projects.&lt;/li&gt;
&lt;li&gt;I haven't had the frustrations of poor management or hangups from other developers.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;Going freelance is a scary experience. You no longer have the safety net, and you're entirely in charge of your own destiny.&lt;/p&gt;

&lt;p&gt;Having control over your career, who you work with and what you work with is an amazing feeling. &lt;/p&gt;

&lt;p&gt;If it's something you've been thinking about doing, consider taking the leap. It might just pay off.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you'd like to keep following my story, &lt;a href="https://twitter.com/dan_spratling"&gt;I post regular updates on Twitter&lt;/a&gt;, so follow me to keep up to date. Newsletter subscribers get early updates so if that interests you &lt;a href="https://danspratling.dev/newsletter"&gt;then sign up for updates&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>devlive</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Understand recursion in 2 minutes</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Mon, 06 Jul 2020 10:27:15 +0000</pubDate>
      <link>https://dev.to/danspratling/understand-recursion-in-2-minutes-59f6</link>
      <guid>https://dev.to/danspratling/understand-recursion-in-2-minutes-59f6</guid>
      <description>&lt;p&gt;Whether you've been in programming for a long time, or just starting out, you'll have heard of recursion, but it can be hard to wrap your head around.&lt;/p&gt;

&lt;p&gt;Recursion is the act of something repeating itself until an escape is found.&lt;/p&gt;

&lt;p&gt;&lt;a href="//images.ctfassets.net/94cla0dmblrb/6rU8OhgM2F2JO8bx3AeNvx/de57a352a84eef4ae45c654d5a2201ba/fractal-zoom.gif" class="article-body-image-wrapper"&gt;&lt;img src="//images.ctfassets.net/94cla0dmblrb/6rU8OhgM2F2JO8bx3AeNvx/de57a352a84eef4ae45c654d5a2201ba/fractal-zoom.gif" alt="fractal-zoom"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's create a function which we can use recursively. I'm going to create a function which allows us to multiply a number exponentially - multiplying a number by itself.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;multiplyExponential&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;power&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;multiplyExponential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;index&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Recursive functions don't have to be complicated, though they can be harder to write as it's a different way of thinking. So what's going on?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// create a function and pass in the number we want to multiply, and how many times we want to multiply it.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;multiplyExponential&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;power&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;power&lt;/span&gt; &lt;span class="o"&gt;!==&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt; 
    &lt;span class="c1"&gt;// if the calculation hasn't completed, we return the number multiplied by the value returned from the function&lt;/span&gt;
    &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="nx"&gt;number&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;multiplyExponential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;number&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;power&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="c1"&gt;//if we're at the end, we just want to multiply by 1 so nothing changes&lt;/span&gt;
    &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nx"&gt;multiplyExponential&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="c1"&gt;// 7 * 7 * 7 * 7 * 1&lt;/span&gt;
&lt;span class="c1"&gt;//&amp;lt;- 2401&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Warning! When writing code you don't want to create an infinite loop, you need a way to stop eventually. Make sure you always have a way to escape.&lt;/p&gt;

&lt;p&gt;Recursive functions have a fancy name but aren't too different from regular functions. The key difference is that it is a function which calls itself - and that's it!&lt;/p&gt;

&lt;p&gt;Mathematics is a great place to start learning about recursive functions but they can be used in other areas of web development too. I've used recursive components to create navigation menus with nested menus.&lt;/p&gt;

</description>
      <category>codenewbie</category>
      <category>javascript</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Fix your portfolio: Common issues I found reviewing your portfolio websites</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Mon, 29 Jun 2020 15:39:40 +0000</pubDate>
      <link>https://dev.to/danspratling/fix-your-portfolio-common-issues-i-found-reviewing-your-portfolio-websites-141g</link>
      <guid>https://dev.to/danspratling/fix-your-portfolio-common-issues-i-found-reviewing-your-portfolio-websites-141g</guid>
      <description>&lt;p&gt;&lt;em&gt;This article was originally created for Twitter. If you like this, you'll probably like my other posts too, so go ahead and give me a &lt;a href="https://twitter.com/dan_spratling"&gt;follow on twitter&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;



&lt;h2&gt;
  
  
  I spent this weekend reviewing your portfolios, from developers of various skill levels.
&lt;/h2&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xu70YfP6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1265215811209302019/1xz9p0te_normal.jpg" alt="Dan Spratling 🚀 UI &amp;amp; JavaScript Dev profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Dan Spratling 🚀 UI &amp;amp; JavaScript Dev
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @dan_spratling
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      I've had a lot of compliments about my portfolio site.&lt;br&gt;&lt;br&gt;Thank you so much! 💕&lt;br&gt;&lt;br&gt;Today, I'm here to give back.&lt;br&gt;&lt;br&gt;I'll give you a quick review of your site and tweet replies with improvements you could make.&lt;br&gt;&lt;br&gt;Share your site below 👇
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      16:01 PM - 27 Jun 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1276908499646193665" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1276908499646193665" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1276908499646193665" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;It was great fun, and I got to see a lot of awesome sites. Unfortunately, I couldn't get to everyone so I compiled a list of the problems I found.&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;

  &lt;div class="ltag__twitter-tweet__main"&gt;
    &lt;div class="ltag__twitter-tweet__header"&gt;
      &lt;img class="ltag__twitter-tweet__profile-image" src="https://res.cloudinary.com/practicaldev/image/fetch/s--Xu70YfP6--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1265215811209302019/1xz9p0te_normal.jpg" alt="Dan Spratling 🚀 UI &amp;amp; JavaScript Dev profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Dan Spratling 🚀 UI &amp;amp; JavaScript Dev
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        @dan_spratling
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--ir1kO05j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-f95605061196010f91e64806688390eb1a4dbc9e913682e043eb8b1e06ca484f.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      This weekend I did a lot of portfolio reviews for people of various different skill levels.&lt;br&gt;&lt;br&gt;There were a lot of small problems with easy fixes which occurred a lot.&lt;br&gt;&lt;br&gt;So, in order to solve them for everyone, here are the most common mistakes I saw, and how to fix them.&lt;br&gt;&lt;br&gt;🧵👇
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      10:05 AM - 29 Jun 2020
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1277543614663536645" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--fFnoeFxk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-reply-action-238fe0a37991706a6880ed13941c3efd6b371e4aefe288fe8e0db85250708bc4.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1277543614663536645" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--k6dcrOn8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-retweet-action-632c83532a4e7de573c5c08dbb090ee18b348b13e2793175fea914827bc42046.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/like?tweet_id=1277543614663536645" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SRQc9lOp--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev.to/assets/twitter-like-action-1ea89f4b87c7d37465b0eb78d51fcb7fe6c03a089805d7ea014ba71365be5171.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;These are mostly small issues across a broad range of topics, and they are things that won't take long to improve but will give your site that extra polish making you stand out from the rest.&lt;/p&gt;

&lt;p&gt;This is what I most people needed to fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Accessibility (a11y)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &amp;lt;button&amp;gt; and &amp;lt;a&amp;gt;
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;buttons&amp;gt;&lt;/code&gt; and &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tags are not interchangable. &lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tags are links to pages, documents, or positions within a page&lt;/p&gt;

&lt;p&gt;&lt;code&gt;&amp;lt;buttons&amp;gt;&lt;/code&gt; are interactive elements within the page.&lt;/p&gt;

&lt;p&gt;Typically, you want to be using an &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; if you have a URL to go to, while you would use a &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt; for an element which is interactive, but doesn't &lt;em&gt;go somewhere&lt;/em&gt;, like a form submit, carousel arrow or tab heading.&lt;/p&gt;

&lt;p&gt;The confusion comes from the class name &lt;code&gt;.button&lt;/code&gt; or &lt;code&gt;.btn&lt;/code&gt;. It's commonly used to represent something which looks like a physical button.&lt;/p&gt;

&lt;p&gt;Using the class &lt;code&gt;.button&lt;/code&gt; does not mean the element should also be a &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Semantic HTML
&lt;/h3&gt;

&lt;p&gt;If you're still using &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt; to represent everything. Stop.&lt;/p&gt;

&lt;p&gt;There are elements which can represent your intention better.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;nav&amp;gt;&amp;lt;/nav&amp;gt;
&amp;lt;main&amp;gt;&amp;lt;/main&amp;gt;
&amp;lt;aside&amp;gt;&amp;lt;/aside&amp;gt;
&amp;lt;article&amp;gt;&amp;lt;/article&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Screen readers announce what the type of content will be if you use these. In the case of some things, like &lt;code&gt;&amp;lt;button&amp;gt;&lt;/code&gt;, they come pre-configured with all the interaction states you might need.&lt;/p&gt;

&lt;p&gt;It also helps you navigate your code, as these names are so much clearer than 10 nested divs.&lt;/p&gt;

&lt;h3&gt;
  
  
  outline: none;
&lt;/h3&gt;

&lt;p&gt;When you click on something interactive, you'll see a border appear. It's big and blue (in chromium browsers) and doesn't fit with your design.&lt;/p&gt;

&lt;p&gt;It's also very important.&lt;/p&gt;

&lt;p&gt;Could you navigate your screen without a mouse?&lt;/p&gt;

&lt;p&gt;Keyboard only users use outlines to show which element is the current focus. You can change it to match your design, but if you remove it entirely that's effectively the same as disabling the mouse.&lt;/p&gt;

&lt;p&gt;Don't do it.&lt;/p&gt;

&lt;p&gt;Try using a keyboard to navigate any website. Don't touch the mouse. You'll see how important an outline is.&lt;/p&gt;

&lt;h3&gt;
  
  
  Colour contrast
&lt;/h3&gt;

&lt;p&gt;Whether you have a light or dark theme on your website, or you've filled it with lots of colours, make sure everything is readable.&lt;/p&gt;

&lt;p&gt;Colour contrast is exceptionally important as colourblindness is one of the most common disabilities faced.&lt;/p&gt;

&lt;p&gt;Both chrome and firefox offer colour contrast checkers in their inspectors. Use them. Make sure you get that AAA rating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Content &amp;amp; Copy
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Getting in touch
&lt;/h3&gt;

&lt;p&gt;Do not underestimate the power of a contact form.&lt;/p&gt;

&lt;p&gt;It's quick. It's easy. Users don't have to leave your site, and they can't mess it up.&lt;/p&gt;

&lt;p&gt;It always beats all other forms of contact.&lt;/p&gt;

&lt;p&gt;Make sure you're using a contact form as your main form of communication.&lt;/p&gt;

&lt;h3&gt;
  
  
  Avoiding spammers
&lt;/h3&gt;

&lt;p&gt;You'll want to be a lot more selective about which other forms of contact you choose to use.&lt;/p&gt;

&lt;p&gt;An email address is fine.&lt;/p&gt;

&lt;p&gt;But for a personal website, you don't want to be adding your mobile number or home address.&lt;/p&gt;

&lt;p&gt;Don't make it easy for spammers or malicious people to get ahold of your personal info.&lt;/p&gt;

&lt;p&gt;If you're going to give that information out, make sure you've established a connection via another means first.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stop hiding your projects
&lt;/h3&gt;

&lt;p&gt;I was reviewing portfolio websites, but in a lot of cases when viewing the portfolio section of the site I was seeing images covered in an overlay, or no images at all.&lt;/p&gt;

&lt;p&gt;You're hiding the thing I want to see most. You're a developer. I want to see your work.&lt;/p&gt;

&lt;p&gt;So show it off. &lt;/p&gt;

&lt;p&gt;Add images which show the work at its best.&lt;/p&gt;

&lt;p&gt;Add links to a live view of the project.&lt;/p&gt;

&lt;p&gt;Add links to the GitHub page to see your code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pick a (vernacular) lane
&lt;/h3&gt;

&lt;p&gt;You need to pick how you want to present yourself to people and stick to it.&lt;/p&gt;

&lt;p&gt;In the case of a portfolio, it should be written almost entirely in the present tense in the first person.&lt;/p&gt;

&lt;p&gt;You're trying to sell yourself, so you want to feel like a real human being.&lt;/p&gt;

&lt;p&gt;This may change slightly if you have a blog (first or second person) or if you're talking about your projects (past tense) but as a general rule, you need to be consistent.&lt;/p&gt;

&lt;h3&gt;
  
  
  You're in charge. Act like it.
&lt;/h3&gt;

&lt;p&gt;One thing everyone seems to forget is a portfolio is a way to sell yourself.&lt;/p&gt;

&lt;p&gt;You're an expert in yourself, and the things you've created.&lt;/p&gt;

&lt;p&gt;But many people present themselves with too much modesty.&lt;/p&gt;

&lt;p&gt;This translates to uncertainty and if you're unsure about yourself, so is the person who's looking at your site.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write with purpose
&lt;/h3&gt;

&lt;p&gt;Your website has a goal. For a portfolio, this is likely to be used to get job offers or to get freelance work.&lt;/p&gt;

&lt;p&gt;All of your copy should be written with that in mind.&lt;/p&gt;

&lt;p&gt;You are taking your users on a journey and your contact form is at the end of that journey.&lt;/p&gt;

&lt;p&gt;Make sure you convince your users to fill it out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Responsive design
&lt;/h3&gt;

&lt;p&gt;It's 2020. Make sure your sites work on mobile as well as desktop.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't over-do it
&lt;/h3&gt;

&lt;p&gt;It was immediately clear which users were confident with their designs, and which weren't.&lt;/p&gt;

&lt;p&gt;Those without design experience did everything to the extreme.&lt;/p&gt;

&lt;p&gt;Too many layers. Too many colours. Too many borders.&lt;/p&gt;

&lt;p&gt;Minimal design is a beautiful thing, and for developers who are new to design, it's quite straightforward to implement yourself and make look nice.&lt;/p&gt;

&lt;p&gt;Having a clean minimal site is far better than standing out with a bad one.&lt;/p&gt;

&lt;p&gt;If you want to create something awesome and unique then go for it but start off simple and work your way there.&lt;/p&gt;

&lt;p&gt;I'll often use resources such as &lt;a href="https://dribbble.com/"&gt;Dribbble&lt;/a&gt; or &lt;a href="https://uidesigndaily.com/"&gt;UI Design Daily&lt;/a&gt; to find designs I like to take inspiration from for my own.&lt;/p&gt;

&lt;h3&gt;
  
  
  Utilize whitespace
&lt;/h3&gt;

&lt;p&gt;Another beginner design issue. Many of the designs had as much crammed into as small a space as possible.&lt;/p&gt;

&lt;p&gt;15 projects on a screen. 40 icons showing all the technologies you know &amp;amp; the tools you use all squeezes into a small panel.&lt;/p&gt;

&lt;p&gt;It's much better to give things space to breathe. 4 of your best projects displayed in a space large enough to fit them is better than showing everything at once.&lt;/p&gt;

&lt;p&gt;Don't overwhelm your users. Give your content space to breathe.&lt;/p&gt;

&lt;h3&gt;
  
  
  The importance of consistency
&lt;/h3&gt;

&lt;p&gt;Your users will build mental models of how your site works as they navigate the site.&lt;/p&gt;

&lt;p&gt;Headers are large and a different colour. Links are rounded buttons with uppercase text.&lt;/p&gt;

&lt;p&gt;Changing this breaks their mental model, making it harder for them to use the site. Changing these models often leads to frustration.&lt;/p&gt;

&lt;p&gt;Keeping the design consistent makes your life easier too. You only have to think about one design for each element type.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't forget the small things
&lt;/h3&gt;

&lt;p&gt;Small alignment issues, spacing issues or colour differences build up.&lt;/p&gt;

&lt;p&gt;Your users might not be able to explicitly point out what the problem is, but their subconscious will notice that things are slightly off.&lt;/p&gt;

&lt;p&gt;Giving your site that final sweep and making sure that everything lines up nicely and is as you intended makes a big difference.&lt;/p&gt;

&lt;p&gt;Make it shine. Your portfolio is intended to impress.&lt;/p&gt;

&lt;h2&gt;
  
  
  Performance
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Image optimisation
&lt;/h3&gt;

&lt;p&gt;Images are often the largest files we load on our websites.&lt;/p&gt;

&lt;p&gt;In order to make sites load quickly, we need to reduce image size as much as possible.&lt;/p&gt;

&lt;p&gt;Don't serve users images 4x too big. Don't add in unnecessary detail they won't appreciate.&lt;/p&gt;

&lt;p&gt;I always recommend using &lt;a href="https://cloudinary.com/invites/lpov9zyyucivvxsnalc5/l0jromrdt4sbsy0kxqut"&gt;Cloudinary&lt;/a&gt; to optimize images. It has a free tier &amp;amp; works great with any site. (Plus, you'll support me by signing up, even for the free tier)&lt;/p&gt;

&lt;h2&gt;
  
  
  User Experience (UX)
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Take your users on a journey
&lt;/h3&gt;

&lt;p&gt;Your portfolio is meant to get you leads or job offers.&lt;/p&gt;

&lt;p&gt;Many people often put the expectation on the user to find their way to what they need.&lt;/p&gt;

&lt;p&gt;They won't. You have to guide them.&lt;/p&gt;

&lt;p&gt;If you want to convince them you're the right person for the job, you might lead them to your projects. From your projects page, you should make it extremely easy to find your contact form.&lt;/p&gt;

&lt;p&gt;Your users shouldn't have to think about navigating your site. You should do that for them.&lt;/p&gt;

&lt;h3&gt;
  
  
  Social media isn't a goal
&lt;/h3&gt;

&lt;p&gt;Social media and contact forms are often mixed together in one place, but social media is not a good way to contact you.&lt;/p&gt;

&lt;p&gt;You're assuming they have social media accounts, and you're leading them away from your website before they've reached their goal.&lt;/p&gt;

&lt;p&gt;Social media is more like a newsletter. It's how they keep up to date with your content regularly, and continue being reminded that you exist.&lt;/p&gt;

&lt;p&gt;They won't use it to get in touch with you. Give them a contact form.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't overwhelm your user
&lt;/h3&gt;

&lt;p&gt;People have short attention spans. If you've made a lot of things, or know a lot of things that's great!&lt;/p&gt;

&lt;p&gt;But as a user, I only care about what's relevant to me.&lt;/p&gt;

&lt;p&gt;Let me filter your projects. Start with your favourite technologies.&lt;/p&gt;

&lt;p&gt;Focus on what you want others to see to give them the best impression.&lt;/p&gt;

&lt;p&gt;Give me too much to look at and I probably won't look hard at anything.&lt;/p&gt;

&lt;h3&gt;
  
  
  Wide content
&lt;/h3&gt;

&lt;p&gt;Wide paragraphs are hard to read.&lt;/p&gt;

&lt;p&gt;Lots of eye movement leads to fatigue and makes it very hard to track your position on the page.&lt;/p&gt;

&lt;p&gt;Users also have short attention spans and won't focus on your content if you don't make it easy for them.&lt;/p&gt;

&lt;p&gt;Consider shrinking the widths of your paragraphs, making them taller instead.&lt;/p&gt;

&lt;p&gt;Typically, the rule is if your copy is wider than 2/3rds of your container width, or 800px, it's probably too wide.&lt;/p&gt;

</description>
      <category>design</category>
      <category>a11y</category>
      <category>ux</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Is it ever a good idea to design in the browser?</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Mon, 02 Mar 2020 16:43:14 +0000</pubDate>
      <link>https://dev.to/danspratling/is-it-ever-a-good-idea-to-design-in-the-browser-1d7a</link>
      <guid>https://dev.to/danspratling/is-it-ever-a-good-idea-to-design-in-the-browser-1d7a</guid>
      <description>&lt;p&gt;This article was first written on my blog. You can find the original post here: &lt;a href="https://danspratling.com/2020-03-02-is-it-ever-a-good-idea-to-design-in-the-browser/"&gt;https://danspratling.com/2020-03-02-is-it-ever-a-good-idea-to-design-in-the-browser/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;Designing for the web is often a long process. First, you have to establish the goals of your site, the potential users, the theme, and the content you want to display, and you haven't even started creating the designs yet.&lt;/p&gt;

&lt;p&gt;Then you dive into each webpage and work out how the content you have will fit on a screen, where to draw attention, and how to get the user to click the button which gets them to buy your product (or whichever type of conversion you are going for).&lt;/p&gt;

&lt;p&gt;Then, after all that, you finally start building. Any developer could tell you, even after all this planning, things still go wrong. Things don't work as expected, get missed, or are just impossible because they work on paper but not in code. It isn't anybody's fault, but it happens and is frustrating.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why are there inconsistencies between design and code?
&lt;/h2&gt;

&lt;p&gt;Often designers aren't developers and don't have any insight into how programmers create things or what limits us. They learn from their experiences, as do we, but are picking up knowledge second hand. They design in grids, but probably don't know the nuances of CSS Grid. They aren't at fault for this, but it does mean there's always going to be some creative control given to the developer to try to match the designs as best as they can.&lt;/p&gt;

&lt;h2&gt;
  
  
  Designing in the browser
&lt;/h2&gt;

&lt;p&gt;To fix some of these problems, you might take the approach of designing in the browser. You skip the design step (or most of it) and create the site based on wireframes. You would work much more collaboratively with your designer and start adding in customisations after the wireframes are complete. Think a pair programming approach but with a creative instead.&lt;/p&gt;

&lt;p&gt;It's faster to implement as a large part of the process is cut out, and prevents you from having to deliver (or backtrack) on promises which can't work in code. The collaborative approach also means you can quickly make changes to things which don't work or look right, instead of waiting for a response (or forgetting about them). Feedback is immediate.&lt;/p&gt;

&lt;p&gt;The downside is that it's harder to change once built. Designing in a program like Sketch or XD is faster than writing up code, and when you're handing over a flat design, there's no expectation that the user can navigate around or that things will be functional. On the other hand, clients will often expect a website to be fully functional upon viewing it, even if it's only in the design phase.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using traditional design
&lt;/h2&gt;

&lt;p&gt;Traditional design methods are still a great approach to take. They're more flexible and more suitable for nailing down precisely what the client without the complexity of coding the site as well. It's easier to make significant changes as none of the functionality is affected at the design phase, which causes drastic changes to be less costly too.&lt;/p&gt;

&lt;p&gt;The traditional approach also gives you a definitive end goal, where you know what you have to achieve before you even start building. That can be very reassuring, especially for more junior developers.&lt;/p&gt;

&lt;p&gt;On the other hand, that also means the developer has less creative freedom. It's much harder to suggest design changes after the designs are finished and sometimes that makes it harder to be flexible, especially if the client has already seen it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Which should I use?
&lt;/h2&gt;

&lt;p&gt;As always, you should use the approach which is best for you. In most business scenarios, this will probably be traditional design methods. Still, if you're a freelancer or you're working on a personal project, you could see benefits from designing directly in the browser.&lt;/p&gt;

&lt;p&gt;Designing in the browser is an excellent approach for developing side projects. If you're creating a site for yourself, or somebody you know well, then it can save you time and energy. It also means that you don't get blocked as a developer by not knowing how to use a design tool.&lt;/p&gt;

&lt;p&gt;Choose the approach which is best for you. Both can be good, and both can be harmful. You need to have a good understanding of your client's needs and maybe most importantly, know how well they understand the development process.&lt;/p&gt;

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

&lt;p&gt;If you enjoyed my article, please leave a like or a comment. &lt;a href="https://twitter.com/dan_spratling"&gt;You can follow me on twitter&lt;/a&gt; to keep up to date with my latest posts &amp;amp; discussion within the development community.&lt;/p&gt;

</description>
      <category>design</category>
      <category>webdev</category>
      <category>discuss</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Writing proper documentation. Why is it so hard?</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Tue, 25 Feb 2020 17:19:27 +0000</pubDate>
      <link>https://dev.to/danspratling/writing-proper-documentation-why-is-it-so-hard-346n</link>
      <guid>https://dev.to/danspratling/writing-proper-documentation-why-is-it-so-hard-346n</guid>
      <description>&lt;p&gt;We've all been there, searching for a new pattern, UI element, or method. You remember seeing it before somewhere but &lt;em&gt;can't quite remember where&lt;/em&gt;, or you've got a great idea that you can't quite realize, or you want to try out a new library. When the documentation doesn't live up to the software it's based on, &lt;strong&gt;it drags the whole product down&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why does poor documentation exist?
&lt;/h2&gt;

&lt;p&gt;There are many reasons we can get documentation that isn't fit for purpose. Project deadlines, developer turnover, or merely leaving documentation until it's too late all lead to poor documentation. On top of this, writing documentation can be hard because developers typically want to be coding, not copywriting. At the same time, documentation is too technical for copywriters to be able to create alone. There are lots of reasons why lousy documentation exists, but it's so critical that there's no excuse good enough not to do it. &lt;strong&gt;If you want your software to grow, you have to document it well&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  How do you write proper documentation?
&lt;/h2&gt;

&lt;p&gt;Well written documentation ultimately starts right at the beginning of the project. You need to think of how you're going to document what you do, and your goal for the documentation afterward. If you want to share it publicly, you'll probably need an external docs site, some tutorials, and some examples, but for an internal project, you might need less (or you might not). How you create the documentation is up to you. However, two popular solutions are creating a website specifically designed for documentation, or creating git a repository containing lots of well-formatted markdown files.&lt;/p&gt;

&lt;h3&gt;
  
  
  Content
&lt;/h3&gt;

&lt;p&gt;All well-written documentation should comprise a short tutorial to get up and started with the software and a more robust set of documentation explaining and more in-depth docs showing all the options you have available, what they do, and your choices (if applicable). The best documentation shows instances when you might use these, things to know beforehand, and a few cases with expected results to help you get started. Inadequate documentation only lists functions that are available to you, but not how or why to use them. As a user, you shouldn't come away confused, so document everything you can think of and always give examples.&lt;/p&gt;

&lt;h3&gt;
  
  
  Navigation
&lt;/h3&gt;

&lt;p&gt;When a user is reading your documentation, they only view it chronologically one time, while they are first learning how your software works. After that, they'll be jumping in and out at different points, trying to remember how things worked, but the order of this won't be logical or even predictable. So navigation should be simple and well structured to allow quick access to what is needed. Links between pages and content within the same page are needed to make finding specific elements just as easy.&lt;/p&gt;

&lt;h3&gt;
  
  
  Previews
&lt;/h3&gt;

&lt;p&gt;While documentation can be excellent on its own, sometimes it's just not enough. People learn in different ways, and for some, reading isn't the answer. There are lots of different ways you could preview your code, and they differ depending on the software. A playground to test out what you're building without having to set up a code environment, or pre-created apps stored in a repo allowing a developer to reverse-engineer your code can be great, allowing users to see the end product before using it themselves. But don't sacrifice well-written documentation to create previews as previews enhance your documentation but can never replace it.&lt;/p&gt;

&lt;p&gt;There's ultimately a lot to think about when writing documentation, but neglecting it is a mistake. It's as important as writing code itself, and a skill to admire among developers. If you're the only person who knows how to use your code, it's useless.&lt;/p&gt;

</description>
      <category>writing</category>
      <category>watercooler</category>
    </item>
    <item>
      <title>Switching to native app development - Week 1</title>
      <dc:creator>Dan Spratling</dc:creator>
      <pubDate>Tue, 18 Feb 2020 13:28:56 +0000</pubDate>
      <link>https://dev.to/danspratling/switching-to-native-app-development-week-1-5c3</link>
      <guid>https://dev.to/danspratling/switching-to-native-app-development-week-1-5c3</guid>
      <description>&lt;p&gt;Last week, I started a new job working on mobile apps. Before this I’d only worked on websites so this is a substantial change for me. As you can expect, after only a week I’ve not done too much - some setup, a few bug fixes, a lot of perusing already written code.&lt;/p&gt;

&lt;p&gt;Note: I’m creating apps using Vue.js and NativeScript. This may not apply to every development flow, but &lt;em&gt;should&lt;/em&gt; apply across all NativeScript projects.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I've learned so far.
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;App structure looks almost exactly the same as website structure. node_modules, package.json, webpack.config (and all the other .config files) still exist. App replaces src but contains components, pages, images, store, which you’d also find in a web app.&lt;/li&gt;
&lt;li&gt;You still have the ability to use everything you used in web development if you wanted. JavaScript frameworks and libraries, css compilers (sass, less, etc), state management tools. If you can do it on the web, you can probably do it here too.&lt;/li&gt;
&lt;li&gt;Emulators are fiddly to set up (but not painstakingly so) as they require changes to your system config. Guides are really helpful.&lt;/li&gt;
&lt;li&gt;Other than the visual rendering of the apps (which you can’t use browsers for, but will need to use emulators or connected apps on real devices), your code &lt;/li&gt;
&lt;li&gt;Code is not written in HTML, despite looking similar. Instead it’s compiled down to XML which restricts what you’re able to use. &lt;code&gt;&amp;lt;div&amp;gt;&lt;/code&gt;  doesn’t exist any more but the built in components work in a very similar to way to what you’re used to (GridLayout = css Grid). Here’s a code example which creates the image below (ignoring styling).
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;GridLayout&lt;/span&gt; &lt;span class="na"&gt;rows=&lt;/span&gt;&lt;span class="s"&gt;“auto,&lt;/span&gt; &lt;span class="na"&gt;auto&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="na"&gt;columns=&lt;/span&gt;&lt;span class="s"&gt;“*,&lt;/span&gt; &lt;span class="na"&gt;auto&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt; &lt;span class="na"&gt;col=&lt;/span&gt;&lt;span class="s"&gt;“1”&lt;/span&gt; &lt;span class="na"&gt;row=&lt;/span&gt;&lt;span class="s"&gt;“1”&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;“status-wrapper”&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;row=&lt;/span&gt;&lt;span class="s"&gt;“0”&lt;/span&gt; &lt;span class="na"&gt;col=&lt;/span&gt;&lt;span class="s"&gt;“0”&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;“title”&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;This is the title&lt;span class="nt"&gt;&amp;lt;/Label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;row=&lt;/span&gt;&lt;span class="s"&gt;“1”&lt;/span&gt; &lt;span class="na"&gt;col=&lt;/span&gt;&lt;span class="s"&gt;“0”&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;“subtitle”&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;This is the description&lt;span class="nt"&gt;&amp;lt;/Label&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;Label&lt;/span&gt; &lt;span class="na"&gt;row=&lt;/span&gt;&lt;span class="s"&gt;“0”&lt;/span&gt; &lt;span class="na"&gt;col=&lt;/span&gt;&lt;span class="s"&gt;“1”&lt;/span&gt; &lt;span class="na"&gt;rowSpan=&lt;/span&gt;&lt;span class="s"&gt;“2”&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;“icon”&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Icon&lt;span class="nt"&gt;&amp;lt;/Label&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/GridLayout&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--1stSP4Nt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://danspratling.com/images/nativescript-app-component-demo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--1stSP4Nt--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://danspratling.com/images/nativescript-app-component-demo.png" alt="Component output by the above code" width="720" height="180"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.nativescript.org/start/introduction"&gt;NativeScript Docs&lt;/a&gt;&lt;/p&gt;




&lt;p&gt;Originally written on &lt;a href="https://danspratling.com"&gt;https://danspratling.com&lt;/a&gt;&lt;br&gt;
&lt;a href="https://twitter.com/dan_spratling"&gt;Twitter&lt;/a&gt; | &lt;a href="https://github.com/danspratling"&gt;Github&lt;/a&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>appdev</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
