<?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: Tammy Lee</title>
    <description>The latest articles on DEV Community by Tammy Lee (@tammalee).</description>
    <link>https://dev.to/tammalee</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%2F116111%2F19aa94b1-7428-4e77-8c0f-ed8a4f38024c.jpg</url>
      <title>DEV Community: Tammy Lee</title>
      <link>https://dev.to/tammalee</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/tammalee"/>
    <language>en</language>
    <item>
      <title>Social Media Accessibility</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Fri, 06 Dec 2019 04:44:24 +0000</pubDate>
      <link>https://dev.to/tammalee/social-media-accessibility-57ih</link>
      <guid>https://dev.to/tammalee/social-media-accessibility-57ih</guid>
      <description>&lt;p&gt;I was link-surfing when I came across an accessibility feature in Twitter I'd never heard of before, adding an image alt attribute!&lt;/p&gt;


&lt;blockquote class="ltag__twitter-tweet"&gt;
      &lt;div class="ltag__twitter-tweet__media"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--74osFfIY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/media/ELEziegUYAAP4zY.png" alt="unknown tweet media content"&gt;
      &lt;/div&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--9qaWEPAW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1109144813109075968/2GOxgz7S_normal.png" alt="Spoopy Lee profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Spoopy Lee
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/tammalee"&gt;@tammalee&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Did you know, there is a more accessible way to post images on Twitter? &lt;a href="https://t.co/Rj15uaNJZu"&gt;help.twitter.com/en/using-twitt…&lt;/a&gt; 
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      03:57 AM - 06 Dec 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1202799248770662400" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1202799248770662400" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1202799248770662400" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      1
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;What the whaaaat? This prompted me to check if Instagram had something similar and...&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--9qaWEPAW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://pbs.twimg.com/profile_images/1109144813109075968/2GOxgz7S_normal.png" alt="Spoopy Lee profile image"&gt;
      &lt;div class="ltag__twitter-tweet__full-name"&gt;
        Spoopy Lee
      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__username"&gt;
        &lt;a class="comment-mentioned-user" href="https://dev.to/tammalee"&gt;@tammalee&lt;/a&gt;

      &lt;/div&gt;
      &lt;div class="ltag__twitter-tweet__twitter-logo"&gt;
        &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--B8bbACBj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/twitter-99c56e7c338b4d5c17d78f658882ddf18b0bbde5b3f42f84e7964689e7e8fb15.svg" alt="twitter logo"&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__body"&gt;
      Did you know, you can bypass the AI-generated alt tags on your Instagram posts and write your own alt text?&lt;br&gt;&lt;br&gt;&lt;a href="https://t.co/b26J4fBVX1"&gt;help.instagram.com/503708446705527&lt;/a&gt;
    &lt;/div&gt;
    &lt;div class="ltag__twitter-tweet__date"&gt;
      04:16 AM - 06 Dec 2019
    &lt;/div&gt;


    &lt;div class="ltag__twitter-tweet__actions"&gt;
      &lt;a href="https://twitter.com/intent/tweet?in_reply_to=1202803936232497152" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-reply-action.svg" alt="Twitter reply action"&gt;
      &lt;/a&gt;
      &lt;a href="https://twitter.com/intent/retweet?tweet_id=1202803936232497152" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-retweet-action.svg" alt="Twitter retweet action"&gt;
      &lt;/a&gt;
      0
      &lt;a href="https://twitter.com/intent/like?tweet_id=1202803936232497152" class="ltag__twitter-tweet__actions__button"&gt;
        &lt;img src="/assets/twitter-like-action.svg" alt="Twitter like action"&gt;
      &lt;/a&gt;
      0
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/blockquote&gt;


&lt;p&gt;..BAM! The two social media channels I use the most often both have accessibility features I hadn't realized I could be using!&lt;/p&gt;

&lt;p&gt;Apparently, even Tumblr has taken a stab at &lt;a href="https://unwrapping.tumblr.com/post/182100543757/were-making-tumblr-more-accessible"&gt;making their site more accessible&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But, they don't have the ability to add an img alt attribute.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/nwKAcgHFrzs"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;What accessibility-related things have you run into on various social media platforms? &lt;/p&gt;

</description>
      <category>a11y</category>
      <category>socialmedia</category>
    </item>
    <item>
      <title>[Discuss] Complicated WordPress Data Migrations</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Sat, 30 Nov 2019 17:22:47 +0000</pubDate>
      <link>https://dev.to/tammalee/discuss-complicated-wordpress-data-migrations-52j2</link>
      <guid>https://dev.to/tammalee/discuss-complicated-wordpress-data-migrations-52j2</guid>
      <description>&lt;p&gt;I'm planning out one of the most complex data migrations in WordPress I've ever been tasked to do. &lt;/p&gt;

&lt;p&gt;I'll have to switch multiple custom post types to posts, map old taxonomies to new ones, AND map old ACF blocks to new ACF blocks. (Thank goodness this WordPress install is still using the classic editor and not Gutenberg, which would be a whole another layer of complexity.)&lt;/p&gt;

&lt;p&gt;I've written before about &lt;a href="https://medium.com/kick-point/migrating-posts-from-craft-cms-to-wordpress-a-post-migration-script-634d1819a827" rel="noopener noreferrer"&gt;migrating from Craft CMS to WordPress&lt;/a&gt; using a mixture of manual techniques and web scraping. (I have since improved this process so it doesn't overwork the computer. XD)&lt;/p&gt;

&lt;p&gt;I find a shell script with WP CLI can solve a lot of tricky problems, too.&lt;/p&gt;

&lt;p&gt;I'm super curious how other people handle these sort of complicated migrations? What are some things to watch out for? How did you test the results? Is there an automated way to test the results?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>wordpress</category>
      <category>mysql</category>
    </item>
    <item>
      <title>Learning Gutenberg</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Sat, 30 Nov 2019 17:08:56 +0000</pubDate>
      <link>https://dev.to/tammalee/learning-gutenberg-4dei</link>
      <guid>https://dev.to/tammalee/learning-gutenberg-4dei</guid>
      <description>&lt;p&gt;WordPress dominates the CMS landscape. When WordPress introduces a big change it makes a splash. For a lot of small shop developers and freelancers, the introduction of the new Gutenberg editor was an intimidating tsunami!&lt;/p&gt;

&lt;p&gt;If you haven't made the switch to Gutenberg &lt;a href="https://wptavern.com/classic-editor-plugin-may-be-included-with-5-0-updates-support-window-set-to-end-in-2021" rel="noopener noreferrer"&gt;you have until December 31, 2021&lt;/a&gt; to do so; at that time the &lt;a href="https://en-ca.wordpress.org/plugins/classic-editor/" rel="noopener noreferrer"&gt;Classic Editor plugin&lt;/a&gt;, which serves the old editing experience, will stop being supported.&lt;/p&gt;

&lt;p&gt;Thousands of small businesses and freelancers depend on WordPress and it can be hard as a solo developer to learn a completely new skillset. To help, I have some resources than can teach you how to create Gutenberg blocks!&lt;/p&gt;

&lt;h2&gt;
  
  
  JavaScript
&lt;/h2&gt;

&lt;p&gt;You will absolutely need to learn JavaScript. You have until the end of 2021 so we might as well do this right and start with the basics.&lt;/p&gt;

&lt;p&gt;If you're good at learning on your own, there are a lot of resources you can use to learn!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnjioweylbbfkyiik6k1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsnjioweylbbfkyiik6k1.png" alt="Graphic says learn JS in three hours. No ads." width="800" height="443"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.freecodecamp.org/news/best-javascript-tutorial/" rel="noopener noreferrer"&gt;Free Code Camp - The Best JavaScript Tutorials&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rxvjbz6i7tgss70c5sh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6rxvjbz6i7tgss70c5sh.jpg" alt="Free JavaScript course" width="635" height="849"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you get it RIGHT NOW Zac is offering his &lt;a href="https://javascriptforwp.com/product/javascript-basics/" rel="noopener noreferrer"&gt;JavaScript Basics&lt;/a&gt; course for FREE!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1rtpjumdllvyfoq0qir.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm1rtpjumdllvyfoq0qir.jpg" alt="Graphic says, ES6 for Everyone" width="800" height="335"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wes Bos' &lt;a href="https://es6.io/" rel="noopener noreferrer"&gt;ES6 for Everyone&lt;/a&gt; is a great starting point!&lt;/p&gt;

&lt;p&gt;If you aren't so great learning on your own, or it's been a long time since you had learning worked into your schedule, you might want to sign up for an online bootcamp!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lbmm9ol72lzwgtgzxrq.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5lbmm9ol72lzwgtgzxrq.jpg" alt="Graphic says, JS bootcamp 6 weeks" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascriptforwp.com/bootcamp/javascript/" rel="noopener noreferrer"&gt;JavaScript Boot Camp&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's intense because it is a boot camp, but you will walk away with a very good foundation in modern JavaScript. The thing I like about Zac's bootcamps are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Slack support/class camaraderie&lt;/li&gt;
&lt;li&gt;Live lectures via Zoom&lt;/li&gt;
&lt;li&gt;Assignments and tests&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I have a hard time learning on my own; scratch that. I have a hard time motivating myself to learn on my own. Zac gets it. Having set times for lectures and deadlines really helped me get through my first boot camp!&lt;/p&gt;

&lt;h2&gt;
  
  
  React
&lt;/h2&gt;

&lt;p&gt;Did reading the word 'React' make you flop sweat? I'm not going to lie to you, it's a paradigm shift if you've never used a JavaScript framework before. There is a reason why I suggest you take a foundational JavaScript course or two before you tackle React.&lt;/p&gt;

&lt;p&gt;"Grosssss! WHY do I have to learn React if I'm working in WordPress?"&lt;/p&gt;

&lt;p&gt;Because Gutenberg blocks are built with React. ¯_(ツ)_/¯&lt;/p&gt;

&lt;p&gt;There's no use fighting it, if you want to do cool things with WordPress in a Gutenberg world you'll have to learn React.&lt;/p&gt;

&lt;p&gt;And hey, if you're a freelancer who knows React you can probably drum up a lot of work converting pre-Gutenberg plugins to Gutenberg! I've considered it myself, but I work for a busy startup now and I just don't have time for a side gig.&lt;/p&gt;

&lt;p&gt;So where do you start? I swear I'm not getting a kickback for recommending these guys but Zach Gordon and Wes Bos to the rescue, again!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdaeghk3kbc4a80f4md66.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdaeghk3kbc4a80f4md66.jpg" alt="Graphic says, React Bootcamp 6 weeks online" width="800" height="404"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascriptforwp.com/bootcamp/react/" rel="noopener noreferrer"&gt;Another boot camp&lt;/a&gt;! Seriously, I loved my boot camp experience! And if you take Zac's January JS boot camp the React boot camp starts March 23, 2020! I'm telling you, by the end of 2020 you're going to be in good shape!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hfqsp2pvui1r73nsevt.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hfqsp2pvui1r73nsevt.jpg" alt="Graphic says, React for Beginners" width="800" height="506"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Wes says you can &lt;a href="https://reactforbeginners.com/" rel="noopener noreferrer"&gt;learn React in a couple of afternoons&lt;/a&gt;! If you are already familiar with ES6 JS then sure, you can probably learn React in a couple of afternoons! But if you don't know JS yet… you should probably start there.&lt;/p&gt;

&lt;p&gt;And if you're a bit strapped for cash or you're very comfortable piecing things together from blog posts/articles then Free Code Camp has almost &lt;a href="https://www.freecodecamp.org/news/tag/react/" rel="noopener noreferrer"&gt;500 posts about React&lt;/a&gt;!&lt;/p&gt;

&lt;p&gt;And if you're going to learn React you might as well do this &lt;a href="https://egghead.io/courses/getting-started-with-redux" rel="noopener noreferrer"&gt;free course on Redux&lt;/a&gt;, which is used by Gutenberg. You likely won't have much to do much with it, but it's good to understand Redux to get a full understanding of how Gutenberg works!&lt;/p&gt;

&lt;h2&gt;
  
  
  Gutenberg Blocks
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8gio2plsemz14bwf6nc.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu8gio2plsemz14bwf6nc.jpg" alt="Graphic says, JavaScript and WordPress 6 week online bootcamp" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you don't have time to learn JavaScript then React THEN how it works with WordPress &lt;a href="https://javascriptforwp.com/bootcamp/wordpress/" rel="noopener noreferrer"&gt;I suggest this boot camp&lt;/a&gt;! This is the boot camp I took in January 2019.&lt;/p&gt;

&lt;p&gt;Zac also offers courses, instead of boot camps, so if you really want to target Gutenberg learnings these might be the courses for you!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascriptforwp.com/product/gutenberg-theme-development-course/" rel="noopener noreferrer"&gt;Gutenberg Theme Development&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascriptforwp.com/product/gutenberg-block-development-course/" rel="noopener noreferrer"&gt;Gutenberg Block Development&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://javascriptforwp.com/product/advanced-gutenberg-development/" rel="noopener noreferrer"&gt;Advanced Gutenberg Development&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As for myself, I sort of waded right into developing Gutenberg Blocks with just a JS bootcamp under my belt! It was enough for me to pick up on how things were happening, I could reverse-engineer a few blocks, and I spent many hours pouring over &lt;a href="https://github.com/WordPress/gutenberg" rel="noopener noreferrer"&gt;the Gutenberg repo&lt;/a&gt; trying to figure out how things are pieced together.&lt;/p&gt;

&lt;p&gt;Now that things have calmed down a bit in my life, I'm backfilling knowledge by going on my own journey of Gutenberg learning and I'm absolutely using some of the links above!&lt;/p&gt;

&lt;p&gt;Good luck, noble WordPress Warriors! You got this!&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>react</category>
      <category>javascript</category>
    </item>
    <item>
      <title>5 Things I learned at Artifact Conf 2019</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Wed, 02 Oct 2019 03:06:41 +0000</pubDate>
      <link>https://dev.to/tammalee/5-things-i-learned-at-artifact-conf-2019-29a6</link>
      <guid>https://dev.to/tammalee/5-things-i-learned-at-artifact-conf-2019-29a6</guid>
      <description>&lt;p&gt;I got up at 3.30am to take three flights (one of which was delayed by a blizzard) and arrived in Austin, TX at 7pm to attend &lt;a href="https://artifactconf.com/" rel="noopener noreferrer"&gt;Artifact Conf&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Was it worth it? ABSOLUTELY!&lt;/p&gt;

&lt;h2&gt;
  
  
  K.I.S.S.
&lt;/h2&gt;

&lt;p&gt;If you aren't familiar with the acronym K.I.S.S. It stands for &lt;strong&gt;K&lt;/strong&gt;eep &lt;strong&gt;I&lt;/strong&gt;t &lt;strong&gt;S&lt;/strong&gt;imple, &lt;strong&gt;S&lt;/strong&gt;tupid. &lt;/p&gt;

&lt;p&gt;Websites are becoming over-engineered, bloated, and more to download as time goes on. Why?&lt;/p&gt;

&lt;p&gt;It seems it's largely JavaScript's fault.&lt;/p&gt;

&lt;p&gt;Here's some advice:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;see if HTML5 can reproduce some JS functionality, then kill that JS&lt;/li&gt;
&lt;li&gt;see if CSS3 can reproduce some JS functionally, then kill that JS&lt;/li&gt;
&lt;li&gt;see if you can use &lt;a href="https://nuxtjs.org/" rel="noopener noreferrer"&gt;Nuxt.js&lt;/a&gt; instead of Vue, &lt;a href="https://preactjs.com/" rel="noopener noreferrer"&gt;Preact.js&lt;/a&gt; instead of React, or &lt;a href="https://svelte.dev/" rel="noopener noreferrer"&gt;Svelte.js&lt;/a&gt; which compiles down to Vanilla JS&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why would you put the burden of a heavy tech stack on a user? DO YOU HATE YOUR VISITORS?&lt;/p&gt;

&lt;h2&gt;
  
  
  I Got 99 Problems But Components Ain't One
&lt;/h2&gt;

&lt;p&gt;Do you think a design system is just a matter of building a bunch of reusable components? Nooope. (Don't feel bad, that's pretty much the impression I had before I attended this conference.)&lt;/p&gt;

&lt;p&gt;Design systems help align teams, are a shared language, and help eliminate the boring task of rebuilding the same basic components over and over again. &lt;/p&gt;

&lt;p&gt;If you're a designer, a good design system can take 80% of the work off of your plate so you can spend time doing the work that actually matters! The work that requires your skill and creativity! You know, the stuff that makes you a designer?&lt;/p&gt;

&lt;p&gt;A design system also lets a developer stub out what a page might look like given a rough sketch using existing components. Then the developer and designer can work together to see if they need a new component or if an existing component can be altered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Stop. Collaborate and Listen
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Great. Now that song is going to be stuck in my head.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Stop what you are doing. Did you just start building something without bothering to ask questions? To listen to who your users are going to be? To communicate and collaborate with the rest of your team?&lt;/p&gt;

&lt;p&gt;Your final product will be stronger and more relevant to your users if you actually take the time to listen to what they have to say, to collaborate with other people, and to stop and think.&lt;/p&gt;

&lt;h2&gt;
  
  
  Slow Down (and Think)
&lt;/h2&gt;

&lt;p&gt;I come from the digital marketing world and in that world the pace is break-neck. Hand-offs are more like having deliverables thrown at your head from a speeding car. Solutions need to be found quickly because solving problems wasn't built into the budget. So you tend to go for the first thing that looks solution-shaped without taking the time to slow down and really think about it.&lt;/p&gt;

&lt;p&gt;Quick (and first solutions) leave you open to bias and usually aren't future-proof. Take the time to challenge why you picked the first solution that came to mind.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Future of Web Animation is Mind-Blowing
&lt;/h2&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1179148683776016384-924" src="https://platform.twitter.com/embed/Tweet.html?id=1179148683776016384"&gt;
&lt;/iframe&gt;

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



&lt;/p&gt;

&lt;p&gt;The end.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;PS.&lt;/strong&gt; The Alamo Draft House is a great place for a conference! &lt;br&gt;
&lt;strong&gt;PPS.&lt;/strong&gt; I don't know how I can go back to Canada where I won't be able to find Mexican vanilla ice cream milkshakes with cinnamon on top. So. Good!&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Stock Photo that I vandalized was taken by &lt;a href="https://unsplash.com/@lostfrequency?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Enrique Macias&lt;/a&gt; on &lt;a href="https://unsplash.com" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>conference</category>
      <category>webdesign</category>
      <category>performance</category>
    </item>
    <item>
      <title>[Discuss] What if WordPress.org Died?</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Sat, 14 Sep 2019 17:40:09 +0000</pubDate>
      <link>https://dev.to/tammalee/discuss-what-if-wordpress-org-died-2bap</link>
      <guid>https://dev.to/tammalee/discuss-what-if-wordpress-org-died-2bap</guid>
      <description>&lt;p&gt;Not to be an alarmist, but I have been wondering for a couple of years now what we'd use if Automattic pulled the plug on WordPress.org and only allowed WordPress to be used on their .com platform? &lt;/p&gt;

&lt;p&gt;[Edit: I have been assured that this would never happen. So, alternative, a frustrated user is granted a wish and they wish that WordPress would vanish! What would you use?]&lt;/p&gt;

&lt;p&gt;It turns out, &lt;a href="https://premium.wpmudev.org/blog/fall-or-matt-in-hell/" rel="noopener noreferrer"&gt;I'm not the only one who has been wondering this&lt;/a&gt;. (Let's be honest, there are few unique thoughts in the world.)&lt;/p&gt;

&lt;p&gt;It's one thing to predict the fall of an empire, but it's another to be prepared for it.&lt;/p&gt;

&lt;p&gt;WordPress dominates the CMS market but it isn't the only solution out there.&lt;/p&gt;

&lt;h2&gt;
  
  
  PHP-based CMS
&lt;/h2&gt;

&lt;p&gt;If the next two popular CMSs were to battle it out, we'd likely see Joomla and Drupal going toe-to-toe in the ring. I could see WordPress developers moving to those two because at least they're still PHP-based.&lt;/p&gt;

&lt;p&gt;I should probably also mention a fun CMS called &lt;a href="https://grabaperch.com/" rel="noopener noreferrer"&gt;Perch&lt;/a&gt;. Perch, by itself, is a great solution for smaller sites. Perch isn't a CMS &lt;em&gt;system&lt;/em&gt; it's more like, hmm... a content management tool. It's a great solution for smaller sites that still run on PHP. I haven't checked out Perch Runway, yet, which seems to be intended for larger sites, and I hear there is a Perch Shop? I haven't used Perch for years but I felt I'd be remiss not mentioning it because I think it is a neat little system!&lt;/p&gt;

&lt;p&gt;For myself? I'd be abandoning PHP-based CMSs entirely and hopping over to a static site solution.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hosted Static Sites
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.netlify.com/" rel="noopener noreferrer"&gt;Netlify.com&lt;/a&gt; and &lt;a href="https://forestry.io/" rel="noopener noreferrer"&gt;Forestry.io&lt;/a&gt; both offer static-generated hosting solutions.&lt;/p&gt;

&lt;p&gt;Hugo is fast to generate static files. If I had an enormous news site with a deep archive, I'd rebuild it in Hugo with probably Netlify to handle deployments because I'm more of a Link than a Mario when it comes to pipelines.&lt;/p&gt;

&lt;p&gt;I've used Forestry.io in the early days and liked what I saw. It's Hugo-based with a CMS. (At least, it was when I first tested it out. I should really revisit and see what's happened in the past year!) This would be a pretty good solution for Agencies and teams where developers aren't the ones populating content.&lt;/p&gt;

&lt;h2&gt;
  
  
  BYOCMS
&lt;/h2&gt;

&lt;p&gt;You could build your own CMS. I've worked with many clients who have been on custom CMS systems and as such I beg you not to build one. It's such a pain in the arse to try to migrate sites or get content from a custom CMS. I've even seen situations where a company decides to fold and there go all of their sites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Headless CMS
&lt;/h2&gt;

&lt;p&gt;Instead, I'd use a headless CMS like &lt;a href="https://buttercms.com/" rel="noopener noreferrer"&gt;Butter&lt;/a&gt; or &lt;a href="https://www.contentful.com/r/knowledgebase/jamstack-cms/" rel="noopener noreferrer"&gt;Contentful&lt;/a&gt;. These CMS solutions let you build what you need in the Admin and you get to build out the front-end in anything you like.&lt;/p&gt;

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

&lt;p&gt;There are so many solutions for ways to build websites than with WordPress right now, that I don't think I'd be too pressed if I suddenly couldn't use it anymore, but I know this isn't the case for everyone!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;If WordPress.org were to suddenly vanish, what would YOU be using as an alternative for your clients?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Base header photo by &lt;a href="https://unsplash.com/@mattbotsford?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Matt Botsford&lt;/a&gt; on &lt;a href="https://unsplash.com" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>wordpress</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Busted! How I Solved a Varnish Cache issue!</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Thu, 29 Aug 2019 14:53:40 +0000</pubDate>
      <link>https://dev.to/tammalee/busted-how-i-solved-a-varnish-cache-issue-238k</link>
      <guid>https://dev.to/tammalee/busted-how-i-solved-a-varnish-cache-issue-238k</guid>
      <description>&lt;p&gt;I am not the world's greatest detective.&lt;/p&gt;

&lt;p&gt;To be honest, I'm not even the &lt;em&gt;fourth best&lt;/em&gt;, but I didn't let that stop me from solving the &lt;strong&gt;Mystery of the Busted Varnish Cache&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;We were minding our own business, doing performance reports, checking data, etc when we noticed that we had several sites where it seemed like the home page wasn't being cached.&lt;/p&gt;

&lt;p&gt;How did we know this? By the abysmal load times! 10+ seconds?! What?!&lt;/p&gt;

&lt;p&gt;We needed more data.&lt;/p&gt;

&lt;h1&gt;
  
  
  Backstory
&lt;/h1&gt;

&lt;p&gt;We host a 400+ sub-site &lt;a href="https://wordpress.org/support/article/create-a-network/" rel="noopener noreferrer"&gt;WordPress Multisite&lt;/a&gt; network with &lt;a href="https://pantheon.io/" rel="noopener noreferrer"&gt;Pantheon&lt;/a&gt; hosting.&lt;/p&gt;

&lt;p&gt;We inherited it after years of spotty maintenance.&lt;/p&gt;

&lt;p&gt;There are so many things to refactor, that one code cleaner thinger estimated it would take us 34 years to clean it all up. Hahahaha &lt;em&gt;but really, I'm sobbing here.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So, long story short, we rely a lot on caching to make the visitor experience less crap while we get our code in order.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This is the sort of compromise you sometimes have to make IRL.&lt;/em&gt;&lt;/p&gt;

&lt;h1&gt;
  
  
  Troubleshooting
&lt;/h1&gt;

&lt;p&gt;First up, we visited the website via Chrome. It was fine but slow. However, the main URL immediately performed a redirect and &lt;code&gt;/en&lt;/code&gt; was appended to the URL.&lt;/p&gt;

&lt;p&gt;Ahhhh, it was a bilingual WordPress site using the &lt;a href="https://polylang.pro/downloads/polylang-pro/" rel="noopener noreferrer"&gt;Polylang Pro plugin&lt;/a&gt; to switch between French and English. (&lt;em&gt;Bonjour! Je Suis Canadienne, eh? I can also tell you I went to the library with a grapefruit en Français and other Year 1 phrases.&lt;/em&gt;) To make the switch, the homepage redirects to a page with either &lt;code&gt;/en&lt;/code&gt; or &lt;code&gt;/fr&lt;/code&gt; in the URL.&lt;/p&gt;

&lt;p&gt;With this in mind, we used &lt;code&gt;curl&lt;/code&gt; from the command line to see what was happening with headers etc.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -I https://www.domainname.ca
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Hm. The information we got back was as expected:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cache-control: public, max-age=86400
via: 1.1 varnish
age: 53
x-served-by: cache-mdw17340-MDW, cache-sea1027-SEA
x-cache-hits: 0, 1
x-cache: Miss from cloudfront
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The cache-control was set to 24 hours, that's cool. (&lt;a href="https://wordpress.org/plugins/pantheon-advanced-page-cache/" rel="noopener noreferrer"&gt;Pantheon has a plugin&lt;/a&gt; that will refresh the cache of a single page if you update it. Long cache TTLs are your friend, if you can use them.)&lt;/p&gt;

&lt;p&gt;We have an age, which means we have a working cache.&lt;/p&gt;

&lt;p&gt;Huh. So... Varnish was getting hit but Cloudfront wasn't? A quick check shows that our Cloudfront isn't configured to cache so that explains that.&lt;/p&gt;

&lt;p&gt;And yet... why are we getting such slow load times if we're hitting the Varnish cache?&lt;/p&gt;

&lt;p&gt;Let's try the redirected URL:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;curl -I https://www.domainname.ca/en
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Oh-ho! This gave us some unexpected information:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;set-cookie: pll_language=en; expires=Fri, 31-Jul-2020 19:37:04 GMT; Max-Age=31536000; path=/; domain=.xxxxxxxxxxxxxxx.io
cache-control: public, max-age=86400
via: 1.1 varnish
age: 0
x-served-by: cache-mdw17359-MDW, cache-sea1030-SEA
x-cache: MISS, MISS
x-cache-hits: 0, 0
x-cache: Miss from cloudfront
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Huh. That URL is definitely not caching anything. (&lt;em&gt;Age is zero, x-cache is a double MISS, and x-cache-hits are zero.&lt;/em&gt;)&lt;/p&gt;

&lt;p&gt;But wait! What the &lt;em&gt;hairy heck&lt;/em&gt; is that &lt;code&gt;set-cookie&lt;/code&gt; header doing there? That wasn't on the home page...&lt;/p&gt;

&lt;h1&gt;
  
  
  Solution
&lt;/h1&gt;

&lt;p&gt;Pantheon &lt;a href="https://pantheon.io/docs/global-cdn-caching/#debugging-cookies-and-the-global-cdn" rel="noopener noreferrer"&gt;has a page all about debugging cookies and their global CDN&lt;/a&gt; which explained what was going on.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If your output looks like the following (i.e. an Age of 0) after more than one request, check if a cookie is being set (with the Set-Cookie header). Setting cookies will prevent the CDN from caching that page&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Bing bing bing! It looks like our Polylang Pro plugin was setting a cookie for language preference using the &lt;code&gt;set-cookie&lt;/code&gt; header!&lt;/p&gt;

&lt;p&gt;If we weren't running 100+ sites with this plugin to handle translations we might have considered swapping it out for a different plugin.&lt;/p&gt;

&lt;p&gt;Thankfully, it turns out that &lt;a href="https://eugdpr.org/" rel="noopener noreferrer"&gt;GDPR&lt;/a&gt; meant Polylang Pro had &lt;a href="https://polylang.pro/doc/is-polylang-compatible-with-the-eu-cookie-law/" rel="noopener noreferrer"&gt;developed a way to prevent the &lt;em&gt;pll_language&lt;/em&gt; cookie from setting&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Our &lt;code&gt;wp-config.php&lt;/code&gt; file was updated to include this change and bam, now our multilingual homepages are caching.&lt;/p&gt;

&lt;p&gt;Of course, the trade-off is that if you return to a site it won't remember your language preference but that seems like a small sacrifice to make for the site loading 8 seconds faster.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;¯\_(ツ)_/¯&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Base Photo by &lt;a href="https://unsplash.com/@joannakosinska?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Joanna Kosinska&lt;/a&gt; on &lt;a href="https://unsplash.com/?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>php</category>
      <category>wordpress</category>
      <category>performance</category>
    </item>
    <item>
      <title>[Comic] Stickers</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Fri, 09 Aug 2019 13:20:01 +0000</pubDate>
      <link>https://dev.to/tammalee/comic-stickers-1foo</link>
      <guid>https://dev.to/tammalee/comic-stickers-1foo</guid>
      <description>&lt;p&gt;So, uh, I have feelings about laptop stickers.&lt;/p&gt;


&lt;div class="instagram-position"&gt;
  &lt;iframe id="instagram-liquid-tag" src="https://www.instagram.com/p/B08cym-lPQq/embed/captioned/"&gt;
  &lt;/iframe&gt;
  
&lt;/div&gt;


&lt;p&gt;&lt;code&gt;¯\_(ツ)_/¯&lt;/code&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>culture</category>
      <category>art</category>
      <category>comics</category>
    </item>
    <item>
      <title>Burnout!</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Tue, 16 Jul 2019 17:26:00 +0000</pubDate>
      <link>https://dev.to/tammalee/burnout-7e1</link>
      <guid>https://dev.to/tammalee/burnout-7e1</guid>
      <description>&lt;p&gt;Did you know Illinois has a lot of corn? I do, now, because I am just wrapping up a vacation in the heart of Illinois!&lt;/p&gt;

&lt;p&gt;While on vacation I popped in on the &lt;a href="https://javascriptforwp.com/conference/"&gt;JavaScript For WordPress&lt;/a&gt; conference to present on the topic of Burnout.&lt;/p&gt;

&lt;p&gt;I am two years into recovery from burnout and still chugging along. I was one of the lucky few who, thanks to a timely job change, was able keep working while I went through crisis, diagnosis, and recovery.&lt;/p&gt;

&lt;p&gt;The video isn't available yet but the slide deck is. There is a lot more to burnout than you might think and I wish I'd had some of this information before I burned out. I might've been able to prevent it.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://bit.ly/js4wpburnout"&gt;Burnout Slide Deck&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hope this is helpful!&lt;/p&gt;

&lt;p&gt;Photo by &lt;a href="https://unsplash.com/@charlesdeluvio?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText"&gt;Charles 🇵🇭&lt;/a&gt; on &lt;a href="https://unsplash.com/"&gt;Unsplash&lt;/a&gt;&lt;br&gt;
ROCKETSHIP accruements added by me!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>productivity</category>
      <category>mentalhealth</category>
      <category>career</category>
    </item>
    <item>
      <title>5 Surprising Things I Learned Running my Own Web Business</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Tue, 09 Jul 2019 05:56:05 +0000</pubDate>
      <link>https://dev.to/tammalee/5-surprising-things-i-learned-running-my-own-web-business-2dlk</link>
      <guid>https://dev.to/tammalee/5-surprising-things-i-learned-running-my-own-web-business-2dlk</guid>
      <description>&lt;p&gt;When I was 33 years old, a fantastic opportunity came my way. My employer decided to ditch external clients and focus exclusively on the parent company's properties. I was offered the 60-ish external clients if I wanted to take them.&lt;/p&gt;

&lt;p&gt;It isn't often an opportunity like that comes along! (And I totally acknowledge my luck.)&lt;/p&gt;

&lt;p&gt;However, I didn't say yes right away. I took a couple of days to work up my business plan and, more importantly, my exit strategies. (I'll write about why the exit strategy was the first thing I thought about in another post.)&lt;/p&gt;

&lt;p&gt;I ran that company on the side for three years while working full time, and in that time grew the client base from 60+ to 90+ clients before I sold. In that time, I learned a lot about business but these are, perhaps, the five things I never thought I'd learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  You don't have to accept every job that comes your way
&lt;/h2&gt;

&lt;p&gt;Shocking, I know! Here's a secret: not every client is worth taking on because they will cost you more in communication time and &lt;a href="https://en.wikipedia.org/wiki/Scope_creep" rel="noopener noreferrer"&gt;scope creep&lt;/a&gt; than they're worth. How can you tell if a job is going to be worth it?&lt;/p&gt;

&lt;p&gt;Here's a list of considerations I use to figure it out if I should avoid a job:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When I communicate with the client, am I able to clearly understand what it is the client wants? Are they good at putting their thoughts into words? Nothing spoils a relationship faster than building the wrong thing then having to refactor on your own dime.&lt;/li&gt;
&lt;li&gt;Do they hesitate to pay a non-refundable deposit to begin work? It could be that they're one of those clients who wait for you to finish the work then try to negotiate on the price. Avoid.&lt;/li&gt;
&lt;li&gt;If they want something automated, do they already have that process manually figured out? Too many clients think automation will build process for them but that is not how it works and I always advise those clients to figure out their manual process first, then come back to me to have it automated.&lt;/li&gt;
&lt;li&gt;Is the client demanding right from the start? Clients that demand exclusive attention and treatment are ones I often turn down, because I like to treat each client with the same care and attention, but sometimes...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;... sometimes money is tight and you &lt;strong&gt;need&lt;/strong&gt; to take a job you'd normally avoid. This is when I adjust my rates or pad the estimate to cover the extra time a client will take.&lt;/p&gt;

&lt;p&gt;If a committee is making decisions on a project I slap an extra 30% for communication onto my estimate. Does that seem like a lot to you? I've tracked the numbers and it usually still falls short. Sometimes, if I know a client will be making decisions by committee I'll specify exactly how many meetings/revisions they get then encourage them to meet with me only when they've come to a decision. If they really want me to be present during decision-making meetings I charge by the hour for those meetings. Sometimes that helps keep things short and my involvement in the decision-making process to a minimum.&lt;/p&gt;

&lt;p&gt;Are you desperate for a job but the client is demanding and a bit of an a$$hole? Charge an a$$hole tax! I remember being on the phone with a client who not only was demanding and overbearing but kept using condescending language and saying he was doing me a big favour trusting me with this project because I'm a woman. Every time he said something that made me mad, I raised the hourly rate. By the time I wrote up an estimate for him the rate was up around $300/hour. That is how much he'd have to pay me to work with him.&lt;/p&gt;

&lt;p&gt;He rejected my estimate and went elsewhere. Yay! But if he'd paid the outrageous price, I would've felt compensated for putting up with him.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; If you REALLY REALLY don't want to work with a client, just don't work with them. Don't tell yourself you can put up with it for the money (if they agree to pay your jacked up rates). There have been projects I have been so miserable on I've nearly given up working in web. At the end of the day, I'd rather work two jobs at my regular rate for a great client than one job at double or triple my rate with an asshole client.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can fire clients
&lt;/h2&gt;

&lt;p&gt;Did you know you can fire clients? You can! Sometimes this is the only way to brush off a demanding client or get your sanity back. Things you might want to consider:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make sure your contract has an escape clause&lt;/li&gt;
&lt;li&gt;Make sure your contract clearly defines scope&lt;/li&gt;
&lt;li&gt;If they've paid a deposit, offer to give them the work you've done so far so they can take it to another developer to finish&lt;/li&gt;
&lt;li&gt;BE POLITE. It's very tempting to tell them to eff-off but don't do this. You want to part ways as cleanly and politely as possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Yes, the conversation will be uncomfortable. Yes, there may be anger coming at you for this decision. Try writing out a firing script and procedure ahead of time so you can stick to it even if you're upset or angry. And make sure you have a lawyer lined up in case the client threatens to sue.&lt;/p&gt;

&lt;p&gt;Firing a client is always a last resort for me but, man, does it feel nice knowing that it's an option.&lt;/p&gt;

&lt;h2&gt;
  
  
  If you're too busy, raise your prices
&lt;/h2&gt;

&lt;p&gt;This one surprised the heck out of me! I was drowning in clients wanting me to work with them and I was strongly considering hiring someone to help me out with all of this new business! Before I committed to that path, I decided to do some reading and that, coupled with reflecting on the clients I currently had, made me raise my prices.&lt;/p&gt;

&lt;p&gt;I lost some business but you know what? Those were all with clients who were trying to squeeze every concession and free bit of work from me that they could while still paying me as little as possible! They were the clients that were the most exhausting to work with because every step of the way involved negotiation and bargaining even if I wouldn't budge on my numbers.&lt;/p&gt;

&lt;p&gt;When I raised my prices I still had many clients wanting to work with me, but:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;They were willing to pay my new rate&lt;/li&gt;
&lt;li&gt;They weren't as demanding&lt;/li&gt;
&lt;li&gt;They were just, overall, better clients&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The lost business was quickly made up for by the higher rate, my inbox was no longer a battlefield, and my quality of life was better.&lt;/p&gt;

&lt;h2&gt;
  
  
  Farm your existing client base
&lt;/h2&gt;

&lt;p&gt;Too many people focus on acquiring new clients when there is work that can be done with existing clients! &lt;/p&gt;

&lt;p&gt;There is a cost associated with on-boarding new clients. You have to add them to your &lt;a href="https://en.wikipedia.org/wiki/Customer_relationship_management" rel="noopener noreferrer"&gt;CRM&lt;/a&gt;, figure out how to work with them, build trust with them, and all of that takes time and care.&lt;/p&gt;

&lt;p&gt;With existing clients, you already have all of that figured out! It saves you money and time to go back to existing clients with a proactive solution to problems they may not have really paid attention to. Did you build them a website but they couldn't afford your SEO package? Well, flag them for a year later then follow up again! They may have a new budget and can afford it!&lt;/p&gt;

&lt;p&gt;Did you just add a new service or product to your business? Hit up your existing client list to see if anyone might want it! This is also a good chance to touch base with a past client and see how what you built them is performing. &lt;/p&gt;

&lt;p&gt;You are maintaining relationships with good clients, right? A phone call or email every once in a while is a good way to make sure they remember you and impress them with how thoughtful you are about their business. (I'm not going to go into much detail on this, just go search for blog posts about &lt;em&gt;farming&lt;/em&gt; clients vs &lt;em&gt;hunting&lt;/em&gt; clients and see what turns up! There is a lot of good information out there!)&lt;/p&gt;

&lt;h2&gt;
  
  
  Word of mouth is the best marketing
&lt;/h2&gt;

&lt;p&gt;The only marketing I spent money on was an easy to remember domain name and officially branded stationary.&lt;/p&gt;

&lt;p&gt;I don't think I even had analytics on my website.&lt;/p&gt;

&lt;p&gt;I was in a unique situation, starting off with 60+ clients, but I did find that the clients that came my way via word of mouth were often better clients than the ones that cold-called me.&lt;/p&gt;

&lt;p&gt;Think about it. Word of mouth means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An existing client liked your work enough to recommend you&lt;/li&gt;
&lt;li&gt;The new client already thinks favourably about your work&lt;/li&gt;
&lt;li&gt;You and your new client have someone in your network in common&lt;/li&gt;
&lt;li&gt;The new client may already be familiar with your rates and how you work and is okay with both&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Word-of-mouth marketing means you're getting pre-warmed clients who already know a bit about you and your work and are keen to work with you! I'll take one of these sorts of clients over five clients who picked me out of a search engine results page any time.&lt;/p&gt;

&lt;p&gt;Running my own business was a rewarding opportunity to learn about client relations and accounts receivable and many other aspects of agency life that, as a developer, I hadn't really had to consider before. It was a valuable experience and I hope these tips help you with your own business endeavours!&lt;/p&gt;

&lt;p&gt;Cover photo (The number 5 on a green background)by &lt;a href="https://unsplash.com/@mr_t55?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Tony Hand&lt;/a&gt; on &lt;a href="https://unsplash.com/search/photos/five?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;. Pêche illustrations by me at one o'clock in the morning in an airport. XD&lt;/p&gt;

</description>
      <category>business</category>
      <category>career</category>
    </item>
    <item>
      <title>How often do you restart your computer?</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Wed, 26 Jun 2019 21:06:38 +0000</pubDate>
      <link>https://dev.to/tammalee/how-often-do-you-restart-your-computer-a25</link>
      <guid>https://dev.to/tammalee/how-often-do-you-restart-your-computer-a25</guid>
      <description>&lt;p&gt;I abuse my computers. I'm terrible. I hate restarting and I hate closing tabs.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1143985978685575168-952" src="https://platform.twitter.com/embed/Tweet.html?id=1143985978685575168"&gt;
&lt;/iframe&gt;

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



&lt;/p&gt;

&lt;p&gt;My policy is this, when my computer gets to be slow enough to annoy me I'll finally restart it.&lt;/p&gt;

&lt;p&gt;I'm the worst.&lt;/p&gt;

&lt;p&gt;What's your policy?&lt;/p&gt;

</description>
      <category>discuss</category>
    </item>
    <item>
      <title>How to make your code look cool using Firicico!</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Sat, 22 Jun 2019 16:31:52 +0000</pubDate>
      <link>https://dev.to/tammalee/how-to-make-your-code-look-cool-using-firicico-cje</link>
      <guid>https://dev.to/tammalee/how-to-make-your-code-look-cool-using-firicico-cje</guid>
      <description>&lt;p&gt;Man. All of the coolest coding tutorial videos seem to use &lt;a href="https://dank.sh/" rel="noopener noreferrer"&gt;Dank Mono&lt;/a&gt; in their IDE (&lt;em&gt;Integrated Development Environment&lt;/em&gt;) but who can afford to drop that much money on a font just to make your code look cool?&lt;/p&gt;

&lt;p&gt;Enter the poor developer's substitute font, &lt;a href="https://github.com/kosimst/Firicico" rel="noopener noreferrer"&gt;Firicico&lt;/a&gt;. Firicico is a combination of the Google Font Pacifico (which is used for swoopy font) and Fira Code for the default font. You'll have to turn on font ligatures in your IDE to get the full swoopy font effect.&lt;/p&gt;

&lt;p&gt;Upon seeing the changes Firicico made to my IDE a peer said, &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Omg. I hate it so much lol"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is a fair first impression but I have counterpoints!&lt;/p&gt;

&lt;h2&gt;
  
  
  Cool Ass Symbols
&lt;/h2&gt;

&lt;p&gt;Do you ever have to squint at your monitor and count how many equal signs you actually used? (Okay, me neither, but hypothetically this could be a situation.) Well! Count no more because Firicico uses ligatures and stuff to render your multiple equal signs as symbols!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdmnshj4t84xlznawf8p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhdmnshj4t84xlznawf8p.png" alt="Demo of all of the equal sign combos" width="558" height="384"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it will do the same with arrows!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzo7rkcyyra4meg1puxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdzo7rkcyyra4meg1puxt.png" alt="Demo of all of the arrow combos" width="276" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Whoah. That's pretty awesome. Who wouldn't want really cool symbols in their code?&lt;/p&gt;

&lt;h2&gt;
  
  
  Fancy Looking Code!
&lt;/h2&gt;

&lt;p&gt;Look at how fancy my code is. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpze4pd7wx0nruti77do.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkpze4pd7wx0nruti77do.png" alt="The fanciest looking Node script you'll ever see" width="800" height="158"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My IDE is VSCode and I'm using the using &lt;em&gt;Monokai Dark Soda&lt;/em&gt; theme. &lt;/p&gt;

&lt;p&gt;Confession time, I increased the default font-size to 20px because I'm old and the Pacifico part of Firicico is unreadable even at 18px. Which isn't a huge problem in the JS code above but if you're working on a JSON file...&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsq6nergn177kjxufoz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frsq6nergn177kjxufoz1.png" alt="JSON looks chaotic with this font" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;...yikes! That's some loopy chaos to try to decipher. I'll adjust it next time I get some free time but out of the box, it's hellish.&lt;/p&gt;

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

&lt;p&gt;Alright, so those aren't the best counterpoints but they're all I got! I want my code to look cool and I want to annoy my coworkers at my next lunch and learn presentation and Firicico is going to do the job for free!&lt;/p&gt;

&lt;p&gt;If that's not enough motivation to try &lt;a href="https://github.com/kosimst/Firicico" rel="noopener noreferrer"&gt;Firicico&lt;/a&gt; then I have nothing for you.&lt;/p&gt;




&lt;p&gt;Cover photo by &lt;a href="https://unsplash.com/@antonio_dicaterina?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Antonio DiCaterina&lt;/a&gt; on &lt;a href="https://unsplash.com/search/photos/calligraphy?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ide</category>
      <category>vscode</category>
      <category>howto</category>
      <category>code</category>
    </item>
    <item>
      <title>Mailing List Madness!</title>
      <dc:creator>Tammy Lee</dc:creator>
      <pubDate>Sun, 24 Mar 2019 16:58:43 +0000</pubDate>
      <link>https://dev.to/tammalee/mailing-list-madness-2b98</link>
      <guid>https://dev.to/tammalee/mailing-list-madness-2b98</guid>
      <description>&lt;p&gt;I am subscribed to a lot, and I do mean "a LOT" of mailing lists. If I find something even vaguely interesting, I will hit that subscribe button and giggle when I think of my future self trying to figure out why she's getting emails from a guy who specializes in fish taxidermy. &lt;em&gt;(Actual content of newsletter replaced with something far less embarrassing.)&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;As a result, I have an approximate knowledge of many links that are useful to share with other people!&lt;/p&gt;

&lt;p&gt;A developer friend of mine asked me recently for a list of newsletters I subscribe to so I thought I'd make this post a resource to share with everyone!&lt;/p&gt;

&lt;h2&gt;
  
  
  Design/UX/UI Newsletters
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://sidebar.io/" rel="noopener noreferrer"&gt;Sidebar&lt;/a&gt;&lt;br&gt;
&lt;a href="https://uianimationnewsletter.com/" rel="noopener noreferrer"&gt;The UI Animation Newsletter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.webdesignernews.com/" rel="noopener noreferrer"&gt;Webdesigner News&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.smashingmagazine.com/" rel="noopener noreferrer"&gt;Smashing Newsletter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://uxdesign.cc/" rel="noopener noreferrer"&gt;UX Collective&lt;/a&gt;&lt;br&gt;
&lt;a href="https://reallygoodemails.com/" rel="noopener noreferrer"&gt;Really good emails&lt;/a&gt; Email marketing &amp;amp; design&lt;br&gt;
&lt;a href="https://heydesigner.com/" rel="noopener noreferrer"&gt;Hey Designer&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Developer Newsletters
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.smashingmagazine.com/" rel="noopener noreferrer"&gt;Smashing Newsletter&lt;/a&gt;&lt;br&gt;
&lt;a href="https://css-tricks.com/" rel="noopener noreferrer"&gt;CSS Tricks&lt;/a&gt;&lt;br&gt;
&lt;a href="http://csslayout.news/" rel="noopener noreferrer"&gt;CSS Layout News&lt;/a&gt;&lt;br&gt;
&lt;a href="https://serverless.com/" rel="noopener noreferrer"&gt;Serverless&lt;/a&gt;&lt;br&gt;
&lt;a href="https://hackernewsletter.com/" rel="noopener noreferrer"&gt;Hacker Newsletter&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  JavaScript
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://javascriptweekly.com/" rel="noopener noreferrer"&gt;JavaScript Weekly&lt;/a&gt; Exactly what it sounds like&lt;br&gt;
&lt;a href="https://gomakethings.com/" rel="noopener noreferrer"&gt;Go Make Things&lt;/a&gt; Chris has a great newsletter about Vanilla JS&lt;br&gt;
&lt;a href="https://react.statuscode.com" rel="noopener noreferrer"&gt;React Status&lt;/a&gt; I'm new to this one!&lt;/p&gt;

&lt;h3&gt;
  
  
  WordPress
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://wpmayor.com/" rel="noopener noreferrer"&gt;WP Mayor&lt;/a&gt; General WP news&lt;br&gt;
&lt;a href="https://wpshout.com/" rel="noopener noreferrer"&gt;WP Shout&lt;/a&gt; General WP news&lt;br&gt;
&lt;a href="https://gutenberg.news/" rel="noopener noreferrer"&gt;Gutenberg News&lt;/a&gt; Excellent resource for Gutenberg&lt;/p&gt;

&lt;h2&gt;
  
  
  Other Industry Newsletters
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://weworkremotely.com/" rel="noopener noreferrer"&gt;We Work Remotely&lt;/a&gt; I get an email with remote jobs every day&lt;br&gt;
&lt;a href="https://m.signalvnoise.com/" rel="noopener noreferrer"&gt;Signal vs Noise&lt;/a&gt; Basecamp/DHH blogposts&lt;br&gt;
&lt;a href="http://softwareleadweekly.com/" rel="noopener noreferrer"&gt;Software Lead Weekly&lt;/a&gt; Exactly what it sounds like.&lt;br&gt;
&lt;a href="https://www.tldrnewsletter.com/" rel="noopener noreferrer"&gt;TLDR Newsletter&lt;/a&gt; &lt;br&gt;
Byte sized news for busy techies&lt;br&gt;
&lt;a href="https://hackernoon.com/" rel="noopener noreferrer"&gt;Hackernoon&lt;/a&gt; They'll be leaving Medium soon.&lt;/p&gt;

&lt;h2&gt;
  
  
  Just random interesting newsletters
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://www.wntta.co/" rel="noopener noreferrer"&gt;We need to talk about this&lt;/a&gt; Feminism and futurism combine to hit my inbox with interesting articles.&lt;br&gt;
&lt;a href="https://theskimm.com/" rel="noopener noreferrer"&gt;The Daily Skimm&lt;/a&gt; A quick summary of what is going on in the world today and why it matters.&lt;br&gt;
&lt;a href="https://cabinporn.com/" rel="noopener noreferrer"&gt;Cabin Porn&lt;/a&gt; Just dreaming of that hermit life!&lt;/p&gt;

&lt;p&gt;** What newsletters do you subscribe to? **&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/photos/YytFx3-BnA0?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Philippe Krief&lt;/a&gt; on &lt;a href="https://unsplash.com/search/photos/mail-box?utm_source=unsplash&amp;amp;utm_medium=referral&amp;amp;utm_content=creditCopyText" rel="noopener noreferrer"&gt;Unsplash&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>productivity</category>
      <category>resources</category>
    </item>
  </channel>
</rss>
