<?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: Markus Hatvan</title>
    <description>The latest articles on DEV Community by Markus Hatvan (@mhatvan).</description>
    <link>https://dev.to/mhatvan</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%2F461066%2Fcba8bbb3-9bac-4e90-939e-ca46cfd88a24.jpeg</url>
      <title>DEV Community: Markus Hatvan</title>
      <link>https://dev.to/mhatvan</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mhatvan"/>
    <language>en</language>
    <item>
      <title>How I Raised My Hourly Rate by 78% in My First Year as a Web Development Freelancer</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Sat, 20 Nov 2021 09:08:37 +0000</pubDate>
      <link>https://dev.to/mhatvan/how-i-raised-my-hourly-rate-by-78-in-my-first-year-as-a-web-development-freelancer-1fg6</link>
      <guid>https://dev.to/mhatvan/how-i-raised-my-hourly-rate-by-78-in-my-first-year-as-a-web-development-freelancer-1fg6</guid>
      <description>&lt;p&gt;Many freelancers struggle with the question of how to raise their hourly rate. One of the main reasons why self-employed workers are hesitant to increase their rates is because they are afraid that they will scare away potential clients. This fear often comes from a lack of confidence in themselves and being able to articulate what sets them apart from other skilled freelancers. As the freelance market is getting more competitive, it is becoming harder for freelancers to ask for higher rates without providing good reasons to do so.&lt;/p&gt;

&lt;p&gt;An important question to start with is “are you charging enough for your services?”.&lt;/p&gt;

&lt;p&gt;There are many great ways of how you can begin building your confidence and showing your clients why they should pay you a higher hourly wage. This can be done by making small improvements in your workflow. Since COVID-19 massively sped up the digitization process for companies, currently there is an abundance of businesses who are looking for web development professionals, no matter the experience level.&lt;/p&gt;

&lt;p&gt;If you are just starting out in your freelance career like I did at the beginning of 2021, the rest of this article will share some of my best advice on how I was able to raise my hourly rate by 78% in one year:&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate multiple sources for incoming project offers
&lt;/h2&gt;

&lt;p&gt;When you start out as a complete newbie in the freelance industry without any business connections, it is most important to find a variety of channels that can provide you with project leads. This is crucial because once you have multiple interesting project offers available to choose from, you will automatically learn how to bid for jobs more effectively and stay relaxed during the interview process.&lt;/p&gt;

&lt;p&gt;To find potential clients, I researched and found websites where companies in my target market (Switzerland, Northern Europe, USA) were looking for freelance workers. Nowadays, it is easy to find remote positions across the globe, so you are not restricted to the country you live in. Think globally!&lt;/p&gt;

&lt;p&gt;I talked about my process of winning new clients in detail in my previous article about &lt;a href="https://markushatvan.com/blog/how-to-win-your-first-clients-as-a-freelance-web-developer" rel="noopener noreferrer"&gt;How To Win Your First Clients as a Freelance Web Developer&lt;/a&gt;, and I can tell you, it was a lot of upfront effort that luckily paid off in the end.&lt;/p&gt;

&lt;h2&gt;
  
  
  Keep talking to recruiters even when you are fully booked
&lt;/h2&gt;

&lt;p&gt;Although it is better to sign a deal with a company directly, you will usually have to go through some intermediary like a recruitment agency or freelancing platform. Many of the bigger and more prestigious companies completely outsource the recruitment (and billing) for independent contractors, so you wouldn't have a chance to get in contact with them anyway except through these third party agencies. The recruiters usually cooperate with many companies in parallel, so it makes sense to stay in contact and respond when you are receiving calls or emails from them.&lt;/p&gt;

&lt;p&gt;Whenever I was contacted if I was available for a project, I would ask for basic information like the projected duration of the project, hourly rate, tech stack and more, even though I was already busy with a project and didn't plan on taking on a new one. By regularly staying in touch with the recruiters, you can get a better feel for the most in-demand skills in your area and which companies are offering to pay for it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update your online freelance profiles regularly
&lt;/h2&gt;

&lt;p&gt;This is probably one of the key aspects to keep in mind when trying to achieve a higher hourly rate. Whenever I had a bit of time available, I made sure to go over all the freelance platforms where I registered and update them regularly. It is tedious at first because you never know if someone will actually discover your profile, but it is definitely worth it in the long run.&lt;/p&gt;

&lt;p&gt;In my case, I was lucky enough to get contacted by the co-founder of a new invite-only freelance platform who found me through &lt;a href="https://remoteok.io/" rel="noopener noreferrer"&gt;Remote OK&lt;/a&gt;. I didn't even know that they existed, so that provided me with a great source for high value project offers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Showcase your passion through an active GitHub profile
&lt;/h2&gt;

&lt;p&gt;It is not a hard requirement to work on web development projects outside of your work, but it definitely helps to be able to showcase a GitHub profile with reasonable activity. Opening issues, fixing bugs and adding new features to open source libraries shows that you are passionate about web development and that your code contributions are of high quality to others. The social proof of having contributed to well-known companies will improve your intrinsic value as a freelancer immensely, and you will be able to ask for better rates.&lt;/p&gt;

&lt;p&gt;Lifelong learning and training is the way to go to be highly successful.&lt;/p&gt;

&lt;h2&gt;
  
  
  Move on to the next project regularly
&lt;/h2&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%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnauq4elkxf6tx3yp8jw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhnauq4elkxf6tx3yp8jw.png" alt="Line chart displaying hourly rate increase over time"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As you can see in the graph above, I have switched between projects quite a bit. This was an important factor for raising my hourly rate quickly, since it was unclear at the beginning how to estimate the value of my services without any prior clients. I recommend setting the initial hourly rate based on the median rate that is common in your area.&lt;/p&gt;

&lt;p&gt;It might sound a bit harsh at first, but as a full-time freelancer you are not a permanent employee and therefore a long-lasting cooperation with the company is also not expected from you in the first place. Don't make the mistake of relying on a single client and then sticking around with them for years. It can be quite comfortable to have a client that provides you with a steady income, but whenever you receive a better project offer than your current one, brainstorm if it would be worth the hassle of switching.&lt;/p&gt;

&lt;p&gt;You will definitely have an easier time increasing your hourly rate if you decide to choose a new project rather than asking for a raise at the current one. As a rule of thumb, I like to pick a new project every few months, but this is entirely up to you and your desired growth rate as well as relationship, satisfaction and success with a client.&lt;/p&gt;

&lt;p&gt;Note that since you are part of the external workforce of a business, you should also be aware of the fact that you could get kicked out of a project at any time as well, so this can go both ways.&lt;/p&gt;

&lt;h2&gt;
  
  
  Pick a project that can advance your skill set
&lt;/h2&gt;

&lt;p&gt;You might disagree with me on this one, but I believe that it is better to offer a broader skill set in the market of web development rather than to become highly specialized in one topic. Whenever I decide on a new project, I take a good look at the tech stack that is used and other facts, rather than the hourly rate alone.&lt;/p&gt;

&lt;p&gt;With this in mind, I have recently been able to add modern and in-demand technologies like Next.js, Playwright and Electron to my skill set, which improves my value to potential clients, and it is also always great fun to learn new skills.&lt;/p&gt;

&lt;p&gt;I started bidding on jobs that were at a higher level than what I was comfortable with and slowly increased the complexity of the projects that I took on. In the end, I was always able to keep up with the pace. In the worst case, I would need to learn a bit in my free time to be able to get up to speed with the project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try to move on from every client with a positive impression
&lt;/h2&gt;

&lt;p&gt;Once you've made a successful pitch, make sure you do everything you can to make your client happy. If they are satisfied, they will be more likely to hire you again for any future projects. You never know which business connections can come in handy at a later stage in your career.&lt;/p&gt;

&lt;p&gt;Oftentimes, it is not simply about having great skills in your freelance position as a software developer, but clients also want to cooperate with a freelancer who is reliable, feels connected with the project at hand and has a good eye for design and user experience. Specifically small businesses use word-of-mouth advertising and could provide you with an unexpected follow-up client.&lt;/p&gt;

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

&lt;p&gt;We should all negotiate for higher rates in our careers as freelance business owners whenever possible, or we will find ourselves working for lower rates than we deserve. With a decent annual income, we can improve our work-life balance as well as spend newly-found free time with friends and family or focus on other productive tasks.&lt;/p&gt;

&lt;p&gt;The market demand for freelance services is there, so build up the confidence, go ahead and make the most of it! I hope that you can take my advice to heart and apply it! Let me know if there are any open questions left or explanations to add.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How To Win Your First Clients as a Freelance Web Developer</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Tue, 19 Jan 2021 13:41:09 +0000</pubDate>
      <link>https://dev.to/mhatvan/how-to-win-your-first-clients-as-a-freelance-web-developer-4kdb</link>
      <guid>https://dev.to/mhatvan/how-to-win-your-first-clients-as-a-freelance-web-developer-4kdb</guid>
      <description>&lt;p&gt;After working as an employee for different companies during the last four years, I am finally doing it and becoming my own boss!&lt;/p&gt;

&lt;p&gt;It is certainly a challenging adventure to switch from the secure and predictable path as a member of a company working at a full-time job to running your own business with all of its complexities and requirements.&lt;/p&gt;

&lt;p&gt;As a newbie web development freelancer, you will often have to ask yourself this one most daunting question in the beginning:&lt;/p&gt;

&lt;h2&gt;
  
  
  How Do I Even Find a Promising Client if No One Knows About Me?
&lt;/h2&gt;

&lt;p&gt;Although I didn't start as a freelancer officially until January 2021, I was already able to establish myself on the market and win multiple international clients two months prior my start as a sole proprietor. As the cherry on top of this, all these projects were built on a modern tech stack and included fun and challenging tasks throughout.&lt;/p&gt;

&lt;p&gt;Instead of relying on a single source for fresh freelance project leads, I tried out various possible ways of finding new work opportunities, some of which work efficiently and others that don't. As a successful freelance web developer, it is especially important to spend most of the time doing actual paid work and to avoid unpaid side tasks like looking for a new client.&lt;/p&gt;

&lt;p&gt;In this article, I want to show you what I learned so far about promising ways to find potential clients for your freelance web development business.&lt;/p&gt;

&lt;h2&gt;
  
  
  Talk to Your Network of Peers, Friends and Family
&lt;/h2&gt;

&lt;p&gt;Before searching for project offers in any other way, try to leverage your network and reach out to your connections. Interesting leads and project offers that you receive through word-of-mouth have one big advantage: the prospective clients are introduced to you through social proof and are more likely to consider you than if you had contacted them through cold outreach.&lt;/p&gt;

&lt;p&gt;Always ask the client for follow-up projects or referrals to other potential clients to keep the flow of projects going whenever you finish a project. The social proof of getting recommended can work in your favor again. Additionally, don't forget to demand a testimonial from a happy client that you can put up on your website to improve your credibility and market value.&lt;/p&gt;

&lt;h2&gt;
  
  
  Receive Inbound Offers From Recruiters on LinkedIn
&lt;/h2&gt;

&lt;p&gt;You might think like me that social media is a waste of time, but there is one exception: LinkedIn works like a charm for potential offers and work-related connections. You can create a good profile for yourself, put the "open for work" label on it, then lean back and wait for the offers to come rolling in to your message inbox. There were certain days where I got five offers in 24 hours, and I am not even updating my profile or posting much content for improved visibility.&lt;/p&gt;

&lt;p&gt;Unfortunately, a lot of times recruiters will just spam their standard phrases and send you offers for permanent positions. It might be annoying to you and your first intuition is to not respond to them, but I highly recommend you to do so! I usually thank them for their nice offer and tell them that freelancers are only interested in project-based offers, but if they ever have something that could be relevant to me, they should get back at me. Because as a matter of fact, most recruiters and software agencies have both jobs and freelance projects to offer. It happened more than once that the recruiter sent me a different offer or invited me to sign up for a freelance developer talent pool at a company. You can also shortcut the process and go to the company website of the recruiter, check for project offers that are relevant, and bookmark them for later use.&lt;/p&gt;

&lt;h2&gt;
  
  
  Get Approved on Curated Freelancing Platforms
&lt;/h2&gt;

&lt;p&gt;There are a lot of them out there, and it's not easy to separate the good ones from the bad ones, but two of the freelance platforms that I use most are &lt;a href="https://www.expertlead.com/"&gt;ExpertLead&lt;/a&gt; and &lt;a href="https://gun.io/"&gt;Gun.io&lt;/a&gt;.&lt;br&gt;
Expertlead requires an initial get-to-know interview, a short project showcase, and a coding interview with a peer freelancer to become a member. On Gun.io, you will have to set up a nice profile, including a short video introduction, and pass a test of three different algorithm coding challenges. After you get accepted, both can deliver interesting and relevant projects on a regular basis for you.&lt;/p&gt;

&lt;p&gt;One of the most well-known freelance platform that I haven't applied to yet is &lt;a href="https://www.toptal.com/"&gt;Toptal&lt;/a&gt;. Their time-consuming multi-step process and the strict vetting of allowing "only 3% of top talent" in - according to their marketing - kept me from trying to get accepted so far. Still, Toptal has a very good reputation in the industry and will be able to provide you with a steady stream of high-value clients.&lt;/p&gt;

&lt;h2&gt;
  
  
  Browse Job Boards the Old School Way
&lt;/h2&gt;

&lt;p&gt;If you decide to search for freelancer offers on job platforms, you have the advantage that you can cut out the middleman in a lot of cases. This could be a recruiter cashing in on a successful hire or platform fees like &lt;a href="https://www.upwork.com/"&gt;Upwork&lt;/a&gt; or &lt;a href="https://www.fiverr.com/"&gt;Fiverr&lt;/a&gt; have, which might result in a lower hourly rate.&lt;/p&gt;

&lt;p&gt;The job boards that I found especially helpful in regard to finding freelance offers were &lt;a href="https://www.glassdoor.com/Job/developer-jobs-SRCH_KO0,9.htm?jobType=contract"&gt;Glassdoor&lt;/a&gt;, &lt;a href="https://weworkremotely.com/remote-contract-jobs#job-listings"&gt;We Work Remotely&lt;/a&gt;, &lt;a href="https://stackoverflow.com/jobs?r=true&amp;amp;j=Contract"&gt;Stack Overflow&lt;/a&gt;, &lt;a href="https://www.linkedin.com/jobs/search/?keywords=freelance"&gt;LinkedIn&lt;/a&gt; and &lt;a href="https://angel.co/jobs"&gt;AngelList&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One issue that I found with a lot of job platforms is that they are lacking useful filtering options to easily discover project-based work. Additionally, it is hard to tell from a lot of job descriptions if they are supposed to be for a person looking for a permanent position or a freelance contract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Use Lesser-Known Ways of Finding Qualified Leads
&lt;/h2&gt;

&lt;p&gt;It can be a hit or miss, but holding a presentation at a meetup or conference can lead to unexpected offers and connections. Especially after the presentation of the talk, it can be the perfect opportunity to mingle with the crowd and to get into contact with prospective clients who saw you on stage.&lt;/p&gt;

&lt;p&gt;Another way to find potential clients is to simply search on a messaging services like Twitter for a term like "freelancer wanted", and you will get a long list of past posts by users.&lt;/p&gt;

&lt;p&gt;The same trick works for Facebook: there is a huge selection of worldwide Facebook groups for job seekers and freelancers. Try to keep away from the ones with large numbers of members though, because they tend to get spammed with low-quality content and they have too much international competition.&lt;/p&gt;

&lt;p&gt;If you don't want to lift a finger to find freelance jobs, simply lean back and enjoy the service of a website like &lt;a href="https://remoteleads.io/"&gt;RemoteLeads&lt;/a&gt;, which scrapes thousands of sources and delivers the best matching projects right into your mailbox. It works like a charm. If you know of any similar services, let me know.&lt;/p&gt;

&lt;p&gt;Another rather underground source for projects is the website &lt;a href="http://www.hnhiring.me/"&gt;HN Hiring&lt;/a&gt;, which aggregates all posts from the monthly Hacker News thread "Ask HN: Freelancer? Seeking freelancer?" into a useful listicle.&lt;/p&gt;

&lt;p&gt;If you like to work with startups and smaller businesses, you can take a look at job-related groups on &lt;a href="https://www.indiehackers.com/"&gt;Indie Hackers&lt;/a&gt; or join Slack groups for freelancers.&lt;/p&gt;

&lt;p&gt;In case you are passionate about a certain programming language or software tool, some of them have Discord channels which have a distinct #jobs channel for offers.&lt;/p&gt;

&lt;p&gt;You have to get a bit creative with your thinking but there are a myriad of ways to find business owners who desperately need your services.&lt;/p&gt;

&lt;h2&gt;
  
  
  So How Did I Find My First Clients?
&lt;/h2&gt;

&lt;p&gt;With my four-plus years of experience in web development, code contributions in well-known open source projects, and technical articles released on big web development publications, I would say that many recruiters and HR departments of companies would be interested to get me on board.&lt;/p&gt;

&lt;p&gt;Since I made sure to collect all project offers in bookmarks, I can provide you with an exact breakdown of the numbers and how the customer acquisition funnel worked in my case.&lt;/p&gt;

&lt;p&gt;Between October 2020 and January 2021, I spent endless hours searching for clients:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I bookmarked ~65 different websites as sources for finding freelance offers.&lt;/li&gt;
&lt;li&gt;I applied to ~45 projects found on websites like &lt;a href="http://www.hnhiring.me/"&gt;HN Hiring&lt;/a&gt;, &lt;a href="https://weworkremotely.com/remote-contract-jobs#job-listings"&gt;We Work Remotely&lt;/a&gt;, &lt;a href="https://www.computerfutures.com/de-de/job-search/?type=Freelance&amp;amp;country=Deutschland"&gt;Computer Futures&lt;/a&gt;, &lt;a href="https://www.freelancermap.com/"&gt;Freelancermap&lt;/a&gt;, &lt;a href="https://gun.io/"&gt;Gun.io&lt;/a&gt;, &lt;a href="https://jobs.github.com/positions?utf8=%E2%9C%93&amp;amp;description=JavaScript&amp;amp;location=remote"&gt;GitHub Jobs&lt;/a&gt;, &lt;a href="https://www.linkedin.com/jobs/search/?keywords=freelance"&gt;LinkedIn&lt;/a&gt;, and many more.&lt;/li&gt;
&lt;li&gt;I received a response from approximately 20 projects regarding a cooperation.&lt;/li&gt;
&lt;li&gt;I had a total of 11 project interviews through remote calls.&lt;/li&gt;
&lt;li&gt;I ended up with four international customers which will provide me with projects regularly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although I have such a large amount of different websites and sources for finding clients, in the end, it turned out that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I found two of my clients through the &lt;a href="https://discord.com/invite/yy75DKs"&gt;Svelte Discord&lt;/a&gt; #jobs channel&lt;/li&gt;
&lt;li&gt;One client found me through the Austrian job center database and approached me per mail&lt;/li&gt;
&lt;li&gt;Another one re-engaged me due to a &lt;a href="https://issuehunt.io/"&gt;Issuehunt&lt;/a&gt; bounty that I solved a while ago.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;No matter how good your skills, your portfolio or your references are, there will be a lot of unanswered emails, turned-down offers and disappointing client decisions until you will be able to secure your first customer. After all, it's a numbers game, and landing clients without prior connections can be hard. But it doesn't have to be.&lt;/p&gt;

&lt;p&gt;When you start looking for your first project, use the great variety of sources and tools out there, from word-of-mouth advertising to inbound project newsletters. Try to think out-of-the-box and you might discover new ideas about finding businesses in need. My experience was that there are a huge amount of freelance web development projects out there; they are just hard to find.&lt;/p&gt;

&lt;p&gt;Make sure to set useful bookmarks on websites, with the correct filters applied, to save you time. You can find a sub-selection of websites that I bookmarked with freelance filters enabled throughout the article.&lt;/p&gt;

&lt;p&gt;With the right steps, you will find a company to work for in no time. Always remember: one long-term client can be enough to bring in enough money for the whole year and make you a successful freelancer!&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>career</category>
      <category>productivity</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Reclaim Your Data Privacy From Big Tech With the Best Privacy-Focused Alternatives</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Thu, 14 Jan 2021 10:48:15 +0000</pubDate>
      <link>https://dev.to/mhatvan/reclaim-your-data-privacy-from-big-tech-with-the-best-privacy-focused-alternatives-39hl</link>
      <guid>https://dev.to/mhatvan/reclaim-your-data-privacy-from-big-tech-with-the-best-privacy-focused-alternatives-39hl</guid>
      <description>&lt;p&gt;The frequent data leak scandals caused by big corporate companies is a real reason to be concerned about misuse of personal information through illegal (and legal!) data collection practices. These scandals are leading users away from using mainstream products to finding safer alternatives.&lt;/p&gt;

&lt;p&gt;Have you ever worried about your data privacy? Are you wondering if there are any alternatives to the &lt;a href="https://en.wikipedia.org/wiki/Big_Tech"&gt;Big Tech&lt;/a&gt; services out there?&lt;/p&gt;

&lt;p&gt;Luckily there are great alternatives available that can allow you to take your data privacy back into your own hands. Although there are many, finding viable replacements to mitigate your privacy risk without much hassle is a time-consuming effort. I will explain how I switched different services myself so you don't have to start your research from scratch.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why should you care about online privacy?
&lt;/h2&gt;

&lt;p&gt;The most obvious reason is clearly to avoid being tracked and to keep your personal information safe.&lt;/p&gt;

&lt;p&gt;Additionally, you probably don't want to maintain and encourage the status quo that only a few tech companies have a monopoly over the entire software market. It is much more rewarding to support multiple, smaller companies with ethical practices in mind and to help them flourish.&lt;/p&gt;

&lt;p&gt;Supporting smaller and more underdog tools has another useful advantage: You will more likely be heard whe you request a new feature. Many of these are also open source, which means that the program has its source code available to be examined by the public. This is usually a good sign that the company is transparent and trustworthy.&lt;/p&gt;

&lt;p&gt;Privacy hardliners will always find something in recommendations like the ones below to critique, and many will even know how you can be even more secure on the web. But the choices below include stable, mature, and free-to-use services that I’ve found to offer an acceptable trade-off between user experience, privacy, and convenience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Search alternatives
&lt;/h2&gt;

&lt;p&gt;This is probably the hardest switch you will have to make - at least it was for me. The search results and meta information (store opening times, movie ratings, weather forecasts, and more) that you receive through Google Search are often unbeatable.&lt;/p&gt;

&lt;p&gt;I tried privacy-friendly search engines like &lt;a href="https://duckduckgo.com/"&gt;DuckDuckGo&lt;/a&gt;, &lt;a href="https://www.qwant.com/"&gt;Qwant&lt;/a&gt; and &lt;a href="https://www.ecosia.org/"&gt;Ecosia&lt;/a&gt; for a while, but they often didn't give me the results that I was looking for. Especially when querying for programming-related search terms, I often found myself receiving unrelated search results. When you are getting paid per hour as a freelancer, that is impractical as the additional time required to search more precisely can add up quickly.&lt;/p&gt;

&lt;p&gt;Fortunately, I found out about &lt;a href="https://www.startpage.com/"&gt;StartPage&lt;/a&gt; which I have been using for about six months now. According to the &lt;a href="https://www.startpage.com/en/privacy-policy/"&gt;privacy policy of StartPage&lt;/a&gt; this is how they operate: "When you search, your query is automatically stripped of unnecessary metadata including your IP address and other identifying information. We send the anonymized search query to Google and return the search results to you. We don’t log your searches."&lt;/p&gt;

&lt;p&gt;So when using StartPage, you basically use the capability of great search results from Google without getting tracked. I don't really like the fact that I am still using Google under the hood, but this is the best solution available for me for now as I am receiving good quality search results again. I sometimes do still miss the meta results that Google provides like store opening times, movie ratings and weather forecasts, but usually, it just requires an additional click on a search result in StartPage, which is manageable.&lt;/p&gt;

&lt;p&gt;My recommendation: If you need to dig deep into a certain topic, use StartPage to get the best results or fallback to Google Search - otherwise, you can get great results by using Qwant as your default search engine as well.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Chrome alternatives
&lt;/h2&gt;

&lt;p&gt;According to &lt;a href="https://gs.statcounter.com/browser-market-share"&gt;statcounter&lt;/a&gt;, Google Chrome is used by approximately 66% of the population worldwide as of October 2020! Although I don't disagree with the well-deserved popularity of the browser due to constant and innovative updates by Google, it's always scary when a corporate company has such a monopoly and lack of competition in a business sector as Google Chrome does.&lt;/p&gt;

&lt;p&gt;If you look for a privacy-focused browser alternative, I can recommend &lt;a href="https://brave.com"&gt;Brave Web Browser&lt;/a&gt;. Brave has a built-in ad blocker, automatic HTTPS upgrade, and it blocks autoplay, and you can support content creators through its own built-in &lt;a href="https://basicattentiontoken.org/"&gt;BAT cryptocurrency&lt;/a&gt;. When I decided I would like to switch to Brave, there were some issues with syncing extensions and bookmarks across devices which kept me from using it for a while. Since then, they have fixed these issues and now it's a flawless and enjoyable experience.&lt;/p&gt;

&lt;p&gt;Another great alternative would be &lt;a href="https://www.mozilla.org/en-US/firefox/"&gt;Mozilla Firefox&lt;/a&gt;, I personally don't use it because I prefer the look and feel of a Chromium-based browser.&lt;/p&gt;

&lt;p&gt;If you decide for a browser that comes without a built-in tracker and ad blocker, make sure to install a browser extension like &lt;a href="https://ublock.org"&gt;uBlock Origin&lt;/a&gt; to do the blocking for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Maps alternatives
&lt;/h2&gt;

&lt;p&gt;Your location data is very precious and you shouldn't have it exposed and possibly let it get into the wrong people's hands.&lt;/p&gt;

&lt;p&gt;Getting rid of Google Maps is really hard and it took a lot of research to find reasonable alternatives. Most of the time, similar navigation applications only support some forms of transportation, but not all of them. There are only a few privacy-focused options that support bicycle, public transportation and on-the-go navigation, which are relevant to me. Finally, I ended up using a combination of multiple services.&lt;/p&gt;

&lt;p&gt;For all means of transportation, &lt;a href="https://wego.here.com/"&gt;HERE WeGo&lt;/a&gt; is a solid choice for desktop and phone. It was originally developed by Nokia and is now owned by a handful of German automotive companies, which does worry me a bit, but I haven't found any bad press on it so far. Alternatively, I also liked &lt;a href="https://maps.sygic.com/"&gt;Sygic Maps&lt;/a&gt;. The interface looks very user-friendly and displays places of interest in your area.&lt;/p&gt;

&lt;p&gt;For commuting per bicycle - which is my main form of transportation - I am using &lt;a href="https://www.bikemap.net/en/routeplanner/"&gt;Bikemap&lt;/a&gt; on my desktop and phone. Since the application is specialized on bike navigation, it gives me the fastest routes.&lt;/p&gt;

&lt;p&gt;Other alternatives for desktop that I tried and might work for you include &lt;a href="https://www.qwant.com/maps"&gt;Qwant Maps&lt;/a&gt;, &lt;a href="https://www.openstreetmap.org/"&gt;OpenStreetMap&lt;/a&gt;, &lt;a href="https://maps.openrouteservice.org/"&gt;OpenRouteService&lt;/a&gt;, and &lt;a href="https://benmaps.fr/"&gt;BenMaps&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;On your phone, you could take a look at apps like &lt;a href="https://osmand.net/"&gt;OsmAnd&lt;/a&gt; and &lt;a href="https://transportr.app/"&gt;Transportr&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microsoft Office Suite alternatives
&lt;/h2&gt;

&lt;p&gt;Switching from Microsoft Office Suite to &lt;a href="https://www.libreoffice.org/"&gt;LibreOffice&lt;/a&gt; is quite easy in my opinion. As long as you don't need any fancy advanced functionality, you should be fine.&lt;/p&gt;

&lt;p&gt;LibreOffice works with the &lt;code&gt;.odt&lt;/code&gt; file extension by default - but don't worry, it also has compatibility with &lt;code&gt;.docx&lt;/code&gt; files in case you are opening a file created by a Microsoft Office user. I have been LibreOffice Writer and LibreOffice Calc on a daily basis for multiple years and don't feel limited in any way.&lt;/p&gt;

&lt;h2&gt;
  
  
  Google Gmail alternatives
&lt;/h2&gt;

&lt;p&gt;Using another service than Gmail shouldn't be that hard. I personally never liked the user interface of Gmail and I guess I am not the only one.&lt;/p&gt;

&lt;p&gt;As a solid alternative, &lt;a href="https://www.thunderbird.net/"&gt;Thunderbird&lt;/a&gt; is a reliable and mature email client that has worked flawlessly for me for a long time. Unfortunately, there is no app for Android or iOS, so I am using &lt;a href="https://sparkmailapp.com/"&gt;Spark&lt;/a&gt; for that on my phone.&lt;/p&gt;

&lt;p&gt;If both email clients don't seem like the optimal choice for you, you could also take a look into &lt;a href="https://protonmail.com/"&gt;ProtonMail&lt;/a&gt;, which is an end-to-end encrypted email service located in Switzerland and therefore adheres to strict privacy laws.&lt;/p&gt;

&lt;h2&gt;
  
  
  Services that I still want to switch
&lt;/h2&gt;

&lt;p&gt;Since the needs of the modern world require so many different software tools, I am also still using some services from big corporations that don't have data protection high up on their priority list.&lt;/p&gt;

&lt;p&gt;Google Calendar is deeply embedded in my everyday life. With a total of 8 different calendars and ongoing collaboration with multiple other people on calendar entries, it is very hard to find a worthy replacement for this application.&lt;/p&gt;

&lt;p&gt;I also wasn't able to find any useful YouTube alternatives that worked well. Other video platforms like &lt;a href="https://vimeo.com/"&gt;Vimeo&lt;/a&gt; or &lt;a href="https://www.bitchute.com/"&gt;BitChute&lt;/a&gt; just can't compete with the amount of content that you can find and enjoy on YouTube. If you know a real competitor let me know; I would love to try it.&lt;/p&gt;

&lt;p&gt;My personal website currently uses Google Analytics simply because it was fast to set up. Shame on me. There are plenty of viable privacy-focused alternatives like &lt;a href="https://matomo.org/"&gt;Matomo&lt;/a&gt;, &lt;a href="https://plausible.io/"&gt;Plausible&lt;/a&gt; or &lt;a href="https://umami.is/"&gt;Umami&lt;/a&gt; out there that I plan on investigating at some point.&lt;/p&gt;

&lt;p&gt;Facebook had its fair share of bad press in the past like the &lt;a href="https://techcrunch.com/2020/01/06/facebook-data-misuse-and-voter-manipulation-back-in-the-frame-with-latest-cambridge-analytica-leaks/"&gt;Cambridge Analytica data scandal&lt;/a&gt;, for example. Notorious for its invasion of privacy and data misuse, I still can't let it go due to its amazing groups and events features.&lt;/p&gt;

&lt;p&gt;I would love to switch from WhatsApp to a more secure chat application like &lt;a href="https://signal.org/"&gt;Signal&lt;/a&gt; or &lt;a href="https://telegram.org/"&gt;Telegram&lt;/a&gt; entirely, but that would require every one of my friends and family to use these platforms too, which is not the case. Improving your data privacy is usually inconvenient, so I don't expect that to happen anytime soon.&lt;/p&gt;

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

&lt;p&gt;Moving away from popular and well-established services by the likes of Google and Microsoft is very difficult. The ease of use and the quality of their applications are simply superior to most other choices out there. Since they always come with a free tier, we are paying with our user data at the expense of our individual privacy.&lt;/p&gt;

&lt;p&gt;With plenty of privacy-focused tools and alternatives like LibreOffice, Thunderbird, or StartPage on the market, you can take a step in the right direction of combating tech monoculture and increasing your user privacy.&lt;/p&gt;

&lt;p&gt;If you liked the small selection of tools that I mentioned above, you can find a more comprehensive list of carefully picked services on my dedicated &lt;a href="https://dev.to/recommendations"&gt;recommendations&lt;/a&gt; page. For a huge list of alternatives, you can also check &lt;a href="https://www.privacytools.io/"&gt;PrivacyTools&lt;/a&gt; or &lt;a href="https://degoogle.jmoore.dev/"&gt;degoogle&lt;/a&gt;, which continuously update their lists when company acquisitions occur or privacy policies change. I am sure you can find great services that you weren't aware of before to expand your current choice of software tools.&lt;/p&gt;

&lt;p&gt;Thank you for reading! I hope this article has been helpful to you, let me know if there are any open questions left or explanations to add.&lt;/p&gt;

&lt;h2&gt;
  
  
  Helpful resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://securitycheckli.st/"&gt;Security Checklist&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://prism-break.org/en/"&gt;Prism Break&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://switching.software/"&gt;Switching.Software&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://opensource.builders/"&gt;Opensource Builders&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.privacytools.io/"&gt;PrivacyTools&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/tycrek/degoogle"&gt;Degoogle&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>productivity</category>
      <category>opensource</category>
      <category>security</category>
      <category>tooling</category>
    </item>
    <item>
      <title>8 Common Web Development Mistakes And How To Avoid Them</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Thu, 19 Nov 2020 15:40:46 +0000</pubDate>
      <link>https://dev.to/mhatvan/8-common-web-development-mistakes-and-how-to-avoid-them-m9c</link>
      <guid>https://dev.to/mhatvan/8-common-web-development-mistakes-and-how-to-avoid-them-m9c</guid>
      <description>&lt;p&gt;I recently joined a small startup where I helped create and deliver a web application for an important clinical study which focuses on COVID-19. The only problem was: &lt;strong&gt;the deadline for the project was in two weeks time!&lt;/strong&gt; That alone already sounded scary and stressful, but I decided to accept the challenge!&lt;/p&gt;

&lt;p&gt;On top of the looming deadline, the junior developer who was mainly responsible for leading the project, was understandably overwhelmed with the enormous workload. As a result, &lt;strong&gt;the code output was rushed and was a complete mess&lt;/strong&gt;. The scope of the project was simply unrealistic for a team of two developers to manage in such a short time span.&lt;/p&gt;

&lt;p&gt;In the end, the minimal viable product was deployed and working with minor hiccups, but it now requires a major overhaul and refactoring effort due to the messy way the code was written. It’s a daunting task that will require a lot of time but won’t lead to any additional revenue for the company.&lt;/p&gt;

&lt;p&gt;This could have easily been avoided from the beginning &lt;strong&gt;if the project had been set up correctly and used some best practices&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;After working on many diverse projects, I have created my own list of “must-haves” to ensure a successful project and great developer experience.&lt;/p&gt;

&lt;p&gt;To save you valuable time on your web development projects in the future, make sure to avoid these eight common web development mistakes:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Not enabling code quality tools right away
&lt;/h2&gt;

&lt;p&gt;This should always be one of the first tasks on your to-do list when you begin working on a new project. Make sure code quality tools are in place based on the project’s needs, you will be grateful for it later.&lt;/p&gt;

&lt;p&gt;When I joined the aforementioned project, nothing was set up and the code was inconsistent with mixed up usage of quotes, missing &lt;code&gt;.catch()&lt;/code&gt; blocks and various formatting issues.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/eslint/eslint"&gt;ESLint&lt;/a&gt; will save you from producing errors like these, which could have been prevented in the first place. After running a lint script on the project for the first time with an opinionated configuration, &lt;strong&gt;there were 200+ warnings and errors waiting to be fixed&lt;/strong&gt;. Fun.&lt;/p&gt;

&lt;p&gt;I know, I know, it can be hard to make the configuration work exactly as you need it to. Additionally, the project owner wants to see actual results and doesn’t care about you spending precious time configuring development tools. But &lt;strong&gt;it is such a worthy time investment in the long run&lt;/strong&gt; and shouldn’t be delayed. In the end it will make you even more productive when you have a project that is clean and error free, which is beneficial for everyone.&lt;/p&gt;

&lt;p&gt;I recommend using all or some of these packages for your configuration depending on your needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;eslint&lt;/code&gt; or &lt;code&gt;@typescript-eslint&lt;/code&gt; for a base rule setup&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eslint-plugin-import&lt;/code&gt; for clean and ordered imports&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eslint-plugin-jest&lt;/code&gt; for writing better and stricter unit tests&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eslint-plugin-node&lt;/code&gt; for backend development and supported node version feature checks&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eslint-plugin-promise&lt;/code&gt; for avoiding missing &lt;code&gt;.catch()&lt;/code&gt; blocks and other bad practices when working with asynchronous code&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eslint-plugin-jsx-a11y&lt;/code&gt; for writing accessible code in case you use React&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;eslint-plugin-unicorn&lt;/code&gt; for miscellaneous helpful rules&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On top of the recommended configs that give you a base rule setup, I add additional rules like: &lt;code&gt;eqeqeq&lt;/code&gt;, &lt;code&gt;prefer-template&lt;/code&gt;, &lt;code&gt;prefer-const&lt;/code&gt; and &lt;code&gt;no-var&lt;/code&gt;, which are not included in the recommended config out of the box.&lt;/p&gt;

&lt;p&gt;Apart from avoiding nasty bugs and writing bad code, &lt;strong&gt;you can also gain an incredible amount of knowledge by simply following lint suggestions&lt;/strong&gt; and looking through the &lt;a href="https://eslint.org/docs/rules/"&gt;ESLint documentation&lt;/a&gt; on why a specific rule exists and why it is necessary.&lt;/p&gt;

&lt;p&gt;On the other hand, &lt;strong&gt;Prettier will make sure that the whole team conforms to the same stylistic code formatting guidelines&lt;/strong&gt; and the achieved readability will save you time as well. The default configuration settings provided by Prettier out of the box are great, so I usually only have to do minor tweaks. This is a minimal &lt;code&gt;.prettierrc.json&lt;/code&gt; configuration file that I tend to start with:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"printWidth"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;100&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"singleQuote"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"trailingComma"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"all"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;//&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;default&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;is&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"es5"&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After setting up ESLint and Prettier, you have a solid baseline of code quality tools in place which will greatly improve your developer experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Using outdated dependencies
&lt;/h2&gt;

&lt;p&gt;Various packages of your project are multiple major versions behind. The &lt;code&gt;package.json&lt;/code&gt; dependencies haven't been upgraded for more than a year. You could delay upgrading and hope you never have to. But believe me, you will as soon as support for that old Node.js version drops or when there are new code vulnerabilities discovered in the old dependencies that you are using. Additionally, &lt;strong&gt;you would love to use the latest features of a library, but you can't because you are stuck with an old dependency version&lt;/strong&gt;. Sound familiar?&lt;/p&gt;

&lt;p&gt;Whenever I create a new project or join an existing one, one of the first things I do is check the &lt;code&gt;package.json&lt;/code&gt; for outdated dependencies. Make sure that the dependencies are at least somewhat up to date to have potential bugs and security vulnerabilities in your 3rd party libraries fixed. For existing projects, ask the main responsible developer if there is a good reason why the dependencies are not up to date.&lt;/p&gt;

&lt;p&gt;I personally create a dedicated &lt;code&gt;package.md&lt;/code&gt; file in projects that I work on that looks like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight markdown"&gt;&lt;code&gt;&lt;span class="gh"&gt;# Dependency upgrade issues&lt;/span&gt;

&lt;span class="gu"&gt;## "postcss-cli": "^7.1.2"&lt;/span&gt;

Major version 8 requires postcss as peer dependency, leads to breakage when running development

&lt;span class="gu"&gt;## "sapper": "0.28.0"&lt;/span&gt;

Keep locked until missing CSS issues are fixed in v0.28.1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This way every collaborator of the project will be informed about known dependency upgrade issues.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Always keep this file up to date&lt;/strong&gt; when you run into dependency issues or resolve some. Ideally the file stays empty and everything can be upgraded as expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Writing variable names and comments in a language other than English
&lt;/h2&gt;

&lt;p&gt;Easy rule of thumb: if you or others reading your code need to spin up "Google Translate" to understand what is happening in the code, it is a waste of precious development time. Translating code should not be a part of being a web developer.&lt;/p&gt;

&lt;p&gt;In the MVP project, the entities that were coming from MongoDB through a Node.js backend had some fields named in German and others in English while the frontend was mostly using English. This required a lot of unnecessary mapping from one naming convention to the other. It was not possible to use object shorthand and it was easy to forget which field is which. Additionally, any developer that might join the team that is not a German native speaker would have problems understanding the usage of each field.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stick to keeping the whole code base in English.&lt;/strong&gt; Apart from variable names looking weird in other languages like German, you exclude international developers from understanding what is going on in the code. Whenever you need to have words displayed in another language than English in your user interface, you can use libraries like &lt;a href="https://formatjs.io/"&gt;Format.js&lt;/a&gt; to handle internationalization needs.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Different naming conventions throughout the whole project
&lt;/h2&gt;

&lt;p&gt;Try to avoid mixing up different naming conventions for HTML, CSS and JavaScript code. Don't use kebab-case, snake_case and camelCase all over the code base or you will get confused quickly and lose productivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Learn about the different naming conventions and why they exist.&lt;/strong&gt; I recommend you stick to the coding conventions of the language that you are using. Native JavaScript methods like &lt;code&gt;.toLowerCase()&lt;/code&gt; are written in camelCase, so why would you write your variables with any different casing? While JavaScript uses camelCase, remember to use kebab-case for your HTML markup and CSS styles.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Using meaningless variable names
&lt;/h2&gt;

&lt;p&gt;I am sure you have seen code similar to this before:&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;x&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gabriel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;stuff&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;x&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;y&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;What values are stored here? Is Gabriel the first name or last name of a person? What is &lt;code&gt;x&lt;/code&gt; that gets mapped over? Is it even an array? What does the variable &lt;code&gt;stuff&lt;/code&gt; hold?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You should not have to waste valuable cognitive energy on deciphering what you and others wrote&lt;/strong&gt;, but focus on bug fixes and new feature implementations instead.&lt;/p&gt;

&lt;p&gt;You might think that it is cool to write short and cryptic variable names and expressions, but it's not. Coding is not about writing the least amount of characters but about producing business logic that is easy to understand, valuable and doesn't need a refactoring right after writing it.&lt;/p&gt;

&lt;p&gt;Let's take a look at a good example:&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;// The variable name `firstName` clearly shows the intent of the stored value&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;firstName&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Gabriel&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="cm"&gt;/**
 * The variable `students` is in plural, so it is probably an array.
 * The value `student` is most likely an object that we are
 * mapping over.
 * We seem to collect `greetings` of `students` here as a result.
 */&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;greetings&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;students&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;map&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;student&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;`Hello, &lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;student&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;firstName&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;!`&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here we can assume a lot more based on good variable naming and clarity which means lesser cognitive overhead for the developer.&lt;/p&gt;

&lt;p&gt;Your future self and your co-workers will be thankful when they still understand what each line of code is doing - even a year later.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Leaving console.logs and to-dos scattered all over the code
&lt;/h2&gt;

&lt;p&gt;This is bad for the developer and user experience at the same time.&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Hello from indexing function&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Result&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;result&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;data&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// TODO: Why does this even work?&lt;/span&gt;

&lt;span class="c1"&gt;// TODO: Add error handling&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It can be embarrassing and unprofessional to leave &lt;code&gt;console.log()&lt;/code&gt; messages in the dev tools for every user to read. On the developer side, it can be distracting and discouraging to find to-dos of what needs to be changed without detailed information and &lt;code&gt;console.log()&lt;/code&gt; which might be needed or not.&lt;/p&gt;

&lt;p&gt;I recommend using the &lt;a href="https://eslint.org/docs/rules/no-console"&gt;no-console ESLint rule&lt;/a&gt; and to configure it as needed. I tend to mark &lt;code&gt;console.log()&lt;/code&gt; as an error and use it in conjunction with &lt;a href="https://github.com/okonet/lint-staged"&gt;lint-staged&lt;/a&gt; pre-commit hooks to disallow commits which fail on lint mistakes. When you want to keep logging information you could either use &lt;code&gt;console.info()&lt;/code&gt; to show the specific intent of requiring outputting information at that point.&lt;/p&gt;

&lt;p&gt;If you cannot give up your console logs in the code, you could opt-in for a plugin like &lt;a href="https://www.npmjs.com/package/babel-plugin-transform-remove-console"&gt;babel-plugin-transform-remove-console&lt;/a&gt; or &lt;a href="https://webpack.js.org/plugins/terser-webpack-plugin/"&gt;terser-webpack-plugin&lt;/a&gt; to strip out console messages for you based on the environment.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To-dos are preferably put into separate issues&lt;/strong&gt; on your repository management tool. Make sure to provide enough information for another developer to start working on it without having to sync up with you first. Additionally, when putting to-dos into issues, every developer will be aware of them rather than stumbling over random to-do comments in the code base.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Mixing up async/await, promises and callback syntax
&lt;/h2&gt;

&lt;p&gt;Producing mistakes in asynchronous code can lead to bugs which are very hard to detect, so make sure to stick to one paradigm at a time.&lt;/p&gt;

&lt;p&gt;Let's take a look at a real-world example from the MVP project:&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;export&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;saveLogAuthToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&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="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;jwtToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;jwt&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;verify&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;JWT_SECRET&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

  &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;&lt;span class="nx"&gt;jwtToken&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;false&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;logoutToken&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nx"&gt;logAuthToken&lt;/span&gt;&lt;span class="p"&gt;({&lt;/span&gt; &lt;span class="nx"&gt;token&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;expires&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;jwtToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;exp&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;logoutToken&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;save&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;catch&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;err&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="nx"&gt;console&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;log&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;err&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="p"&gt;});&lt;/span&gt;

  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Even for me with more than 4 years of professional experience, I have a hard time figuring out how the code would flow here based on different outcomes.&lt;/p&gt;

&lt;p&gt;The code example above shows missing knowledge about how async/await works.&lt;br&gt;
The code starts with usages of async/await which is great for writing readable and concise code, but then it becomes unclear:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When does the function return &lt;code&gt;true&lt;/code&gt;?&lt;/li&gt;
&lt;li&gt;What does it return when we run into the &lt;code&gt;.catch()&lt;/code&gt; block of the &lt;code&gt;logoutToken.save()&lt;/code&gt; method?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With a few simple changes, we can drastically improve the code flow:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The code should be wrapped in a &lt;code&gt;try/catch&lt;/code&gt; block to avoid the well-known &lt;code&gt;UnhandledPromiseRejectionWarning&lt;/code&gt; message in Node.js&lt;/li&gt;
&lt;li&gt;Remove the &lt;code&gt;.catch()&lt;/code&gt; block on &lt;code&gt;logoutToken.save()&lt;/code&gt; since errors are caught in the &lt;code&gt;catch&lt;/code&gt; statement of &lt;code&gt;try/catch&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Stick to either using &lt;code&gt;async/await&lt;/code&gt; or the Promises syntax. It could also be a good idea to consider not only returning &lt;code&gt;false&lt;/code&gt; when &lt;code&gt;jwt.verify()&lt;/code&gt; fails, but to explicitly throw an error instead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These code design mistakes can be deadly - especially when there are no tests written for this piece of code.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. No unit or end-to-end tests for complex business logic
&lt;/h2&gt;

&lt;p&gt;This is so common that it is a running joke amongst the web development community. I still remember working at my first job and there were &lt;em&gt;zero&lt;/em&gt; unit tests written for the project. When I asked about it, everyone said: "It would be great to have test coverage, but there is not enough time."&lt;/p&gt;

&lt;p&gt;Since unit or end-to-end tests don't bring added value for the customer, they are often skipped and neglected. A common phrase is: "We will do it in the future when we have time," and then guess what? It never happens.&lt;/p&gt;

&lt;p&gt;At the second company that I worked for, there were also almost no unit tests written for the front-end part of the project. By then, I was more experienced as a developer and motivated to do my team and myself a favor, so I started to implement unit tests here and there whenever a task was finished earlier than expected.&lt;/p&gt;

&lt;p&gt;For one task that I had to work on, there were so many potential edge cases, so I started using "Test-driven development" (TDD) and wrote the tests before the actual code. Although I had to write the unit tests in addition to the business logic, &lt;strong&gt;I ended up finishing the issue around 30% faster due to having the "safety belt" of the unit tests&lt;/strong&gt; catching all potential errors and edge cases. The test coverage will prevent you from looking for a bug in the wrong place as well.&lt;/p&gt;

&lt;p&gt;Bottom line: write unit tests when possible, especially for complex snippets of code and use end-to-end tests at least for the critical parts of an application.&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping Up
&lt;/h2&gt;

&lt;p&gt;Although I understand that time pressure alone can be the reason for some developers to throw code quality standards overboard, &lt;strong&gt;I highly advise pushing through while still doing your best at delivering clean code&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The minimal amount of time that you save just by duplicating code snippets and hacking away until it works will then start to pile up as technical debt, and it will take you even longer to fix afterward.&lt;/p&gt;

&lt;p&gt;It will not always be possible to write the cleanest code, but don't let that discourage you. &lt;strong&gt;After all, we are just human beings and make mistakes&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Have you made any of these or similar mistakes before? Leave a comment below!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Why You Should Start Contributing to Open Source Software Right Now</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Sat, 14 Nov 2020 12:07:59 +0000</pubDate>
      <link>https://dev.to/mhatvan/why-you-should-start-contributing-to-open-source-software-right-now-3mp0</link>
      <guid>https://dev.to/mhatvan/why-you-should-start-contributing-to-open-source-software-right-now-3mp0</guid>
      <description>&lt;p&gt;You might not be aware of it, but you use some form of open source software every single day.&lt;/p&gt;

&lt;p&gt;Every time you start an app on your phone or launch a program on your computer, you profit from the code that someone has written for free.&lt;/p&gt;

&lt;p&gt;WordPress, the largest and most well-known content management system, is used by &lt;a href="https://w3techs.com/technologies/details/cm-wordpress"&gt;38% of all websites&lt;/a&gt; worldwide. It is open source and free to use.&lt;/p&gt;

&lt;p&gt;Linux is powering &lt;a href="https://w3techs.com/technologies/details/os-linux"&gt;30% of all websites&lt;/a&gt; globally. It is open source and free to use.&lt;/p&gt;

&lt;p&gt;These are just two examples out of a myriad of projects which were created to solve a problem or serve a use case.&lt;/p&gt;

&lt;p&gt;These projects became highly popular as communities formed around them. They tried to deliver the best product possible in terms of user experience, stability, security, and more.&lt;/p&gt;

&lt;p&gt;But not only the usage of open source projects is rising. The participation in the open source movement as a whole is growing as well.&lt;/p&gt;

&lt;p&gt;According to the &lt;a href="https://octoverse.github.com/"&gt;State of the Octoverse report&lt;/a&gt; by GitHub, out of more than 40 million developers on GitHub, 10 million new users joined in 2019 alone!&lt;/p&gt;

&lt;p&gt;The open source movement is growing quickly and you should become a part of it too.&lt;/p&gt;

&lt;p&gt;Whenever I see a new update for my operating system or new software releases of tools that I actively use every day, it makes me smile. I enjoy the thought of products continuously getting better and more sophisticated.&lt;/p&gt;

&lt;p&gt;Do you feel the same way?&lt;/p&gt;

&lt;p&gt;Here is why I am convinced that you should start contributing to open source software right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  You can learn a lot from the source code
&lt;/h2&gt;

&lt;p&gt;Since the source code in open source projects is available for anyone to read, that means that a large number of developers can battle-test and improve a project.&lt;/p&gt;

&lt;p&gt;Developers point out privacy or security issues, update the documentation, and improve source code to the newest web development standards all the time.&lt;/p&gt;

&lt;p&gt;Especially when you go through the code of projects with hundreds or even thousands of contributors, you can gain immense knowledge about best practices and code quality.&lt;/p&gt;

&lt;p&gt;Not only is reviewing the code itself a learning experience, but also the structure and folder hierarchy in larger projects is well thought-out and works well in the long run.&lt;/p&gt;

&lt;h2&gt;
  
  
  You will work with the smartest people
&lt;/h2&gt;

&lt;p&gt;Compared to a company that has a limited number of employees to work on feature requests and bug fixes, you have the brightest minds working in open source development.&lt;/p&gt;

&lt;p&gt;In my imagination, I see it as swarm intelligence, which can solve every problem that arises.&lt;/p&gt;

&lt;p&gt;The more people that join a community, the better a project can scale. It can be like a buzzing beehive, where you could have pull requests to a codebase from users all around the world 24/7, non-stop.&lt;/p&gt;

&lt;p&gt;A good example is the well-known code editor &lt;a href="https://github.com/microsoft/vscode"&gt;Visual Studio Code&lt;/a&gt; which got very popular with a total of 1,200+ contributors on GitHub.&lt;/p&gt;

&lt;p&gt;You won’t see a single day without any pull requests on GitHub and the monthly release cycles always bring out new amazing features.&lt;/p&gt;

&lt;p&gt;When you participate in a project and submit a pull request, you will receive extremely helpful feedback from highly experienced maintainers. You can then implement that feedback to grow as a developer.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your own code could be used globally
&lt;/h2&gt;

&lt;p&gt;Since some software development projects are used by millions of users daily, it can be very rewarding to see your own code helping so many people.&lt;/p&gt;

&lt;p&gt;I wrote lint rules for the JavaScript projects called &lt;a href="https://github.com/sindresorhus/eslint-plugin-unicorn"&gt;eslint-plugin-unicorn&lt;/a&gt; and &lt;a href="https://github.com/sveltejs/svelte"&gt;svelte&lt;/a&gt;. It’s a great feeling knowing that my pull request will improve the code quality of many developers all around the world.&lt;/p&gt;

&lt;p&gt;From my personal experience, it is also motivating to get positive feedback in the form of a thankful comment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Open source projects are inclusive
&lt;/h2&gt;

&lt;p&gt;A great advantage of free open source software is that no one is excluded from using the product because they can’t afford it.&lt;/p&gt;

&lt;p&gt;While some open source projects cost money to use, most do not.&lt;/p&gt;

&lt;p&gt;Also, when you’re contributing to a project on GitHub, many of the bigger repositories have a code of conduct. These make sure that every contributor feels welcome and accepted in a project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Projects are starting to become sustainable
&lt;/h2&gt;

&lt;p&gt;The main goal of a company is to become profitable - which often leads to questionable decisions. But open source software focuses on solving the needs of its users as the highest priority.&lt;/p&gt;

&lt;p&gt;Most projects are entirely volunteer-supported, and project maintainers will unfortunately never see any financial reward. But there are great ways nowadays that you can help make these projects sustainable.&lt;/p&gt;

&lt;p&gt;With websites like &lt;a href="https://opencollective.com/"&gt;OpenCollective&lt;/a&gt; or &lt;a href="https://github.com/sponsors"&gt;GitHub Sponsors&lt;/a&gt;, you can donate to speed up the development of projects that you like.&lt;/p&gt;

&lt;p&gt;Personally, I think that it would be great if every company donated at least a small sum to open source software projects because they profit from these tools daily. Such support would reduce the stress for a lot of maintainers and some could even take up the work full-time.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to contribute to open source
&lt;/h2&gt;

&lt;p&gt;Contributing to open source development sounds more scary than it really is. There are plenty of projects out there on GitHub which encourage first time contributors and newbies to take action by labeling issues as “Good first issue”, “Beginner friendly” or “Help wanted”.&lt;/p&gt;

&lt;p&gt;Don’t know where to start?&lt;/p&gt;

&lt;p&gt;Ask yourself: what is an application that you enjoy using every day and where you would want to give back?&lt;/p&gt;

&lt;p&gt;It can be as simple as searching for that application on GitHub and looking through the open issues.&lt;/p&gt;

&lt;p&gt;It doesn’t have to be a code contribution, either - you can also help out by creating a pull request to update the documentation, fix typos that you find, or by doing a thorough code review.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;README.md&lt;/code&gt; file of a project usually includes a passage of how to contribute.&lt;/p&gt;

&lt;p&gt;If you decide to contribute to a project, I recommend reading my article about &lt;a href="https://markushatvan.com/blog/contributing-to-open-source-projects-the-right-way"&gt;Contributing To Open Source Projects The Right Way&lt;/a&gt;. It’s a detailed step-by-step guide about the contribution workflow.&lt;/p&gt;

&lt;p&gt;I wrote it to be very beginner friendly, so don’t worry about becoming overwhelmed. You will be able to find your first project and submit a contribution in no time!&lt;/p&gt;

&lt;h2&gt;
  
  
  Wrapping up
&lt;/h2&gt;

&lt;p&gt;It always impressed me that everyone in the world can join an open source software project and work on it.&lt;/p&gt;

&lt;p&gt;And open source software only works as a collaborative effort. The goal is to produce the best product or service without compromising on important factors like stability, security, or user privacy.&lt;/p&gt;

&lt;p&gt;I hope you understand the importance of open source software and that you value its benefits. No matter what your reasons are for giving back to the open source community, just know that you are highly appreciated!&lt;/p&gt;

&lt;p&gt;Many projects can only thrive with support and contributions from developers like you.&lt;/p&gt;

&lt;h2&gt;
  
  
  Helpful resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://octoverse.github.com/"&gt;The State of the Octoverse&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;&lt;a href="https://opensource.com/resources/what-open-source"&gt;What is open source?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://clearcode.cc/blog/why-developers-contribute-open-source-software/"&gt;What Motivates a Developer to Contribute to Open-Source Software?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
    <item>
      <title>10 Reasons Why I Recommend Svelte To Every New Web Developer</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Wed, 11 Nov 2020 08:27:09 +0000</pubDate>
      <link>https://dev.to/mhatvan/10-reasons-why-i-recommend-svelte-to-every-new-web-developer-nh3</link>
      <guid>https://dev.to/mhatvan/10-reasons-why-i-recommend-svelte-to-every-new-web-developer-nh3</guid>
      <description>&lt;p&gt;Although the initial release of &lt;a href="https://svelte.dev/"&gt;Svelte&lt;/a&gt; was back in November 2016, it's still more of an underdog amongst the JavaScript front end frameworks and just recently started to get its well deserved attention by the community.&lt;/p&gt;

&lt;p&gt;After working with various JavaScript frameworks over the years including Angular, React and Vue.js, I think I have a good overall impression about how writing code can be enjoyable and how it can be frustrating.&lt;/p&gt;

&lt;p&gt;A couple of years ago, writing code with &lt;a href="https://jquery.com/"&gt;jQuery&lt;/a&gt; felt like a revelation when coming from pure JavaScript. Then at my first job, I started working with Angular 2, and all of a sudden jQuery felt like a drag. Now, React is the cool kid on the block and Angular feels so complicated in comparison. You can probably see where this is going!&lt;/p&gt;

&lt;p&gt;For me, Svelte is the next evolutionary step in the rapidly changing ecosystem of JavaScript frameworks.It feels so easy to write the Svelte way and you can tell that its creator &lt;a href="https://twitter.com/Rich_Harris"&gt;Rich Harris&lt;/a&gt; was tired of all the annoying abstractions and the necessary boilerplate code that the existing frameworks require you to learn.&lt;/p&gt;

&lt;p&gt;Now you might be asking yourself the question:&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes Svelte different?
&lt;/h2&gt;

&lt;p&gt;You might have heard about Svelte appearing here and there in articles like &lt;a href="https://medium.com/dailyjs/a-realworld-comparison-of-front-end-frameworks-2020-4e50655fe4c1"&gt;A RealWorld Comparison of Front-End Frameworks&lt;/a&gt; and developer surveys like the &lt;a href="https://2019.stateofjs.com/front-end-frameworks/"&gt;State of JS Survey&lt;/a&gt; as one of the best ranking frameworks when it comes to bundle size, performance, lines of code and most important developer satisfaction.&lt;/p&gt;

&lt;p&gt;Compared to the popular &lt;a href="https://reactjs.org/"&gt;React&lt;/a&gt; and &lt;a href="https://vuejs.org/"&gt;Vue.js&lt;/a&gt; libraries, which do the bulk work during runtime and are using a technique called "virtual DOM diffing" for detecting changes, Svelte is compiled into framework-less vanilla JavaScript as a build step and can therefore benefit from a lot of code optimizations.&lt;/p&gt;

&lt;p&gt;Naturally hesitant, I dismissed Svelte at first as "just another JavaScript framework" and didn't bother looking into it. After hearing about it a second time, I wondered: is Svelte just hyped or could it really be that good? I decided to battle-test it and use it on a personal project of mine.&lt;/p&gt;

&lt;p&gt;Now after a few months, I can give you a definitive answer:&lt;/p&gt;

&lt;h2&gt;
  
  
  Svelte is simple, powerful and elegant and you will love it!
&lt;/h2&gt;

&lt;p&gt;Without further ado, these are the top 10 reasons why I recommend Svelte to every new web developer who is starting to learn programming:&lt;/p&gt;

&lt;h2&gt;
  
  
  1. Svelte components are easy to understand
&lt;/h2&gt;

&lt;p&gt;If you have never seen the Svelte syntax before, this is how a simple example would look like:&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Compared to other frontend frameworks which introduce a lot of abstract concepts that take a while to learn and understand, it's really refreshing to see that Svelte just uses plain old HTML, CSS and JavaScript side by side. You can see and easily recognize what is happening here with its beginner-friendly syntax.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Simply write concise code
&lt;/h2&gt;

&lt;p&gt;As you can see in the code example above, the business logic that you write is simple and easily readable at the same time. After all, the less code you write, the fewer bugs it can have, right?&lt;/p&gt;

&lt;p&gt;Rich Harris, the genius creator of Svelte provided some good comparisons with React and Vue.js in his article called &lt;a href="https://svelte.dev/blog/write-less-code"&gt;Write less code&lt;/a&gt;. According to his check up on characters needed to write the logic for a simple addition of two numbers, a React component is typically around 40% larger than its Svelte equivalent!&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Reactivity with labeled statements
&lt;/h2&gt;

&lt;p&gt;Whenever you want your variable values to update and recompute based on other variables, you can use reactive declarations. Just put a dollar sign in front of the variable that you want to be reactive and you're good to go!&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Any time the button is clicked, &lt;code&gt;count&lt;/code&gt; will increase by 1 and &lt;code&gt;doubled&lt;/code&gt; will know that the value of &lt;code&gt;count&lt;/code&gt; changed and update accordingly. It's really fascinating to think in terms of reactivity and it feels good to write.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Easy global state management out of the box
&lt;/h2&gt;

&lt;p&gt;No need for any complicated third-party state management tools like &lt;a href="https://redux.js.org/"&gt;Redux&lt;/a&gt; or &lt;a href="https://vuex.vuejs.org/"&gt;Vuex&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;You just define a variable as a writable/readable store and use it in any &lt;code&gt;.svelte&lt;/code&gt; file prefixed with a &lt;code&gt;$&lt;/code&gt; sign.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In this example, we check the current environment, which exists as a value in our store and use it to decide if the cookie notice should be displayed or not. Simple, isn't it?&lt;/p&gt;

&lt;p&gt;With Svelte stores, you also never have to worry about memory leaks, because store variables prefixed with a &lt;code&gt;$&lt;/code&gt; sign act as auto-subscriptions and unsubscribe automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Built-in accessibility and unused CSS checks
&lt;/h2&gt;

&lt;p&gt;Svelte wants to make the internet a better place and helps you out with useful hints in the code.&lt;/p&gt;

&lt;p&gt;Whenever you forget to put the &lt;code&gt;alt&lt;/code&gt; attribute on an &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; tag, Svelte will display a &lt;code&gt;A11y: &amp;lt;img&amp;gt; element should have an alt attribute&lt;/code&gt; reminder for you. There is a long list of accessibility checks that are implemented in Svelte, and they hint at you without ever becoming a nuisance.&lt;/p&gt;

&lt;p&gt;To keep the code as concise as possible and to avoid snippets of left over code, Svelte also flags unused CSS selectors for you whenever there is no respective markup to be found in a component.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Components are exported automatically
&lt;/h2&gt;

&lt;p&gt;Whenever you would want to use component A in component B, you would usually need to write code to export component A first, so it can get imported by component B. With Svelte, you don't ever need to worry about forgetting to export, a &lt;code&gt;.svelte&lt;/code&gt; component is always default exported for you automatically and ready to be imported by any other component.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Styling is scoped by default
&lt;/h2&gt;

&lt;p&gt;Similar to &lt;a href="https://webdesign.tutsplus.com/articles/an-introduction-to-css-in-js-examples-pros-and-cons--cms-33574"&gt;CSS-in-JS&lt;/a&gt; libraries, Svelte styles are scoped by default which means that a &lt;code&gt;svelte-&amp;lt;unique-hash&amp;gt;&lt;/code&gt; class name will be attached to your styles, so they don't leak and influence any other components styling. Of course, you have the option for styles to be applied globally by simply prefixing them with the &lt;code&gt;:global()&lt;/code&gt; modifier or just using a &lt;code&gt;.css&lt;/code&gt; file if you want to.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. #await blocks
&lt;/h2&gt;

&lt;p&gt;With most web applications, you will need to handle asynchronous data to display useful stats to your users.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;The advantage of &lt;code&gt;{#await}&lt;/code&gt; blocks is that you don't have to define an extra state for you resolved/rejected promises, you can just define variables inline in your template.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Shorthand attributes for passing props
&lt;/h2&gt;

&lt;p&gt;In case there's a prop name that is the same as a variable name, we can pass it to the component as a shorthand attribute like &lt;code&gt;{message}&lt;/code&gt; below. There is no advantage over using &lt;code&gt;message="{message}"&lt;/code&gt;, but it's more concise.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Above you can see the &lt;code&gt;class:round&lt;/code&gt; attribute getting applied to the button based on if &lt;code&gt;round&lt;/code&gt; is true or false. This could easily become a reusable component where you pass the value of &lt;code&gt;round&lt;/code&gt; from the outside to decide the styling of the component conditionally.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. Built-in effects and animations
&lt;/h2&gt;

&lt;p&gt;Svelte comes prepacked with powerful effect modules:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;svelte/motion&lt;/code&gt; effects like tweened and spring&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;svelte/transition&lt;/code&gt; effects like fade, blur, fly, slide, scale, draw&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;svelte/animate&lt;/code&gt; effects like flip&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;svelte/easing&lt;/code&gt; effects like bounce, cubic, elastic, and many more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;There are a few examples in the official Svelte tutorial, but I like &lt;a href="https://svelte.dev/tutorial/tweened"&gt;this progress bar example&lt;/a&gt; the most because of its simplicity.&lt;/p&gt;

&lt;p&gt;Animations is an area of web development where you usually look for an external dependency to handle it for you, so it's great that you can use these right out of the box.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fair reasons not to adopt Svelte
&lt;/h2&gt;

&lt;p&gt;To avoid making this article sound like one long fanboy post, these are the cons that I experienced with Svelte so far:&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;code&gt;.svelte&lt;/code&gt; files cannot export multiple components
&lt;/h3&gt;

&lt;p&gt;On one hand, we profit from &lt;code&gt;.svelte&lt;/code&gt; files being default exported automatically, but this also means that we cannot export multiple components from a single file. I don't think that this is such a big deal since it forces you to follow best practices writing your application with many small isolated components, which keeps them easy to understand and unit test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Template syntax in general
&lt;/h3&gt;

&lt;p&gt;For displaying conditional logic, Svelte uses a syntax that resembles the well-known &lt;a href="https://handlebarsjs.com/guide/builtin-helpers.html#if"&gt;Handlebars&lt;/a&gt; templating syntax.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;I didn't encounter any issues with this way of writing logic, but I would prefer a more concise syntax.&lt;/p&gt;

&lt;h3&gt;
  
  
  Receiving props in a child component with &lt;code&gt;export let&lt;/code&gt;
&lt;/h3&gt;

&lt;p&gt;When you want to pass values from the parent to the child component, you need to pass a value as an attribute and receive it by using &lt;code&gt;export let&lt;/code&gt; with a matching variable name.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In modern JavaScript, &lt;code&gt;export&lt;/code&gt; is usually used as a keyword for exporting a module and &lt;code&gt;let&lt;/code&gt; to declare a block-scoped variable, so I feel that the syntax is misusing existing keywords, but I got used to it and it works well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Development speed
&lt;/h3&gt;

&lt;p&gt;This is not directly related to the development experience with Svelte, but you should definitely be aware that Svelte can't compete (yet) with bigger and sponsored open source projects like React, Angular, Vue.js and others in terms of financial support, number of contributors and popularity as of now.&lt;/p&gt;

&lt;p&gt;Nevertheless, the community is growing quickly and there is an ever-increasing list of third-party projects built for Svelte by the community which is available on &lt;a href="https://madewithsvelte.com/"&gt;Made with Svelte&lt;/a&gt;. The developers working on Svelte-related tools are geniuses and you can always ask for help on the &lt;a href="https://discord.com/invite/qa4pnmw"&gt;Discord&lt;/a&gt; channel, &lt;a href="https://twitter.com/sveltejs"&gt;Twitter&lt;/a&gt; or &lt;a href="https://reddit.com/r/sveltejs"&gt;Reddit&lt;/a&gt;. Svelte also recently added TypeScript support and it works great!&lt;/p&gt;

&lt;p&gt;I like Svelte's ease of use, small bundle size and developer experience amongst other factors so that I can accept a slower development speed as a trade off. If you always need the newest features to be merged as fast as possible, then you might want to look into other available JavaScript frameworks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Lack of available jobs
&lt;/h3&gt;

&lt;p&gt;Most companies are still looking for developers who are experienced with the major three front end frameworks but there are various, well-known early adopters of Svelte like IBM, Apple, Philips, GoDaddy, 1Password or The New York Times, just to name a few. You can find an extensive list of companies who are using Svelte at the bottom of the &lt;a href="https://svelte.dev/"&gt;Svelte website&lt;/a&gt;. Usually, the adoption of a new framework takes a while to show up in job offers of companies. Nevertheless, Svelte is fun to learn and many developers enjoy using Svelte especially for their own personal projects or small scale applications.&lt;/p&gt;

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

&lt;p&gt;If a beginner-friendly syntax, a small bundle size output and an insane performance with Svelte sounds like a great choice to you, I would recommend you to start hacking away with the &lt;a href="https://svelte.dev/tutorial/basics"&gt;Svelte tutorial&lt;/a&gt;. The tutorial is really detailed and you can quickly get an understanding of how powerful the framework is.&lt;/p&gt;

&lt;p&gt;Things can definitely change fast in the world of JavaScript frameworks and I hope you are as convinced as I am that Svelte has all the upsides and potential that can make it become the new #1 JavaScript front end framework around!&lt;/p&gt;

&lt;p&gt;Did you work with Svelte before? What is your experience?&lt;/p&gt;

&lt;p&gt;Tell me about it in the comments, I am curious to know.&lt;/p&gt;

&lt;p&gt;Thanks for reading, I hope you enjoyed it!&lt;/p&gt;

&lt;h2&gt;
  
  
  Helpful resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://svelte.dev/tutorial/basics"&gt;Svelte tutorial&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://svelte.dev/repl"&gt;Svelte REPL&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.youtube.com/watch?v=AdNJ3fydeao"&gt;Rich Harris - Rethinking Reactivity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/feltcoop/why-svelte"&gt;Why Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://dev.to/bholmesdev/why-sveltejs-may-be-the-best-framework-for-new-web-devs-205i"&gt;Why SvelteJS may be the best framework for new web devs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/better-programming/why-we-moved-from-react-to-svelte-f20afb1dc5d5"&gt;Why We Moved From React to Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://css-tricks.com/what-i-like-about-writing-styles-with-svelte/"&gt;What I Like About Writing Styles with Svelte&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/javascript-in-plain-english/i-created-the-exact-same-app-in-react-and-svelte-here-are-the-differences-c0bd2cc9b3f8"&gt;I created the exact same app in React and Svelte. Here are the differences.&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Looking for a Svelte powered server side rendered solution?
&lt;/h2&gt;

&lt;p&gt;After getting into touch with the framework through using &lt;a href="https://sapper.svelte.dev/"&gt;Sapper&lt;/a&gt;, I am a big fanboy and try to promote the way of Svelte whenever I get the chance.&lt;/p&gt;

&lt;p&gt;In case you are about to set up a website and are looking for the right tool, I published an article about my experience so far with Sapper for you to read about here: &lt;a href="https://markushatvan.com/blog/why-i-chose-sapperjs-for-my-website-and-what-ive-learned-about-the-framework-so-far"&gt;"Why I Chose SapperJS For My Website, And What I've Learned About The Framework So Far"&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Contributing To Open Source Projects The Right Way</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Mon, 09 Nov 2020 20:13:00 +0000</pubDate>
      <link>https://dev.to/mhatvan/contributing-to-open-source-projects-the-right-way-241g</link>
      <guid>https://dev.to/mhatvan/contributing-to-open-source-projects-the-right-way-241g</guid>
      <description>&lt;p&gt;When I started with open source contributions in April 2019, I remember being scared about doing everything wrong.I didn't want to mess up on a pull request and be branded as a noob, never able to taste the sweet success of getting an open source pull request reviewed and merged.&lt;/p&gt;

&lt;p&gt;There were so many questions that I had to find answers to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What skills do I need to be able to contribute successfully?&lt;/li&gt;
&lt;li&gt;How do I write commit messages correctly?&lt;/li&gt;
&lt;li&gt;What is forking? What is upstream?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Although there were articles and tips and tricks available on the web, it was tedious to gather all the necessary information bit by bit.&lt;/p&gt;

&lt;p&gt;After contributing to open source projects regularly for a while now and feeling comfortable with the workflow, I decided to share my knowledge with you so you don't have to start from zero like I did.&lt;/p&gt;

&lt;p&gt;Additionally, my motivation is to bring people who are hesitant to start with open source contributions to take the first step. More developers contributing to open source projects means better quality of code, more documentation written and faster development speed which is a benefit for all of us.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why you should contribute to open source projects
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Improve your coding skills.&lt;/strong&gt; Working with different code bases is a great way of getting better at coding fast. Contrary to a work environment where you might work on one project for a longer period, with open source projects you can switch to another project whenever you want and get to know various tooling and setups.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Give back to the community.&lt;/strong&gt; You are probably using a lot of different repositories daily for free and this is your chance to contribute as a way of thanking the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Improve your prestige.&lt;/strong&gt; You will be easier to hire with merged pull requests for well-known projects or you might even turn into a thought leader for a certain topic.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work with different teams.&lt;/strong&gt; Each repository has different contributors and coding conventions that you will need to adapt to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Solve interesting problems.&lt;/strong&gt; Finding solutions to complex problems can be fulfilling and a lot of fun. You are also able to choose which issues you want to work on.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you think that you don't have enough experience to contribute to projects with code, don't worry. You can always help out by improving documentation, answering issues, or with the internationalization of a project until you feel ready.&lt;/p&gt;

&lt;h2&gt;
  
  
  Some of my contributions
&lt;/h2&gt;

&lt;p&gt;To give you a bit of an overview of projects that you could be working on, here are some of the open source contributions that I worked on:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/sveltejs/svelte" rel="noopener noreferrer"&gt;sveltejs/svelte&lt;/a&gt;: add accessibility rule&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/sindresorhus/eslint-plugin-unicorn/" rel="noopener noreferrer"&gt;sindresorhus/eslint-plugin-unicorn&lt;/a&gt;: add lint rule&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/microsoft/webtemplatestudio/" rel="noopener noreferrer"&gt;microsoft/webtemplatestudio&lt;/a&gt;: improve generated angular and react code, fix e2e tests&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/react-boilerplate/react-boilerplate/" rel="noopener noreferrer"&gt;react-boilerplate/react-boilerplate&lt;/a&gt;: dependency changes and upgrades&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/ethereum/ethereum-org-website/" rel="noopener noreferrer"&gt;ethereum/ethereum-org-website&lt;/a&gt;: fix &lt;code&gt;setTimeout&lt;/code&gt; leak, fix accessibility issue&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://github.com/foundry376/mailspring/" rel="noopener noreferrer"&gt;foundry376/mailspring&lt;/a&gt;: add preferences options, allow cancel upgrade prompt&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As you can see, my favorite areas in web development include working on code quality improvements like linting and accessibility as well as dependency upgrades.&lt;/p&gt;

&lt;p&gt;One of the great things about open source contributions is that you get to choose whichever issue you feel like working on right now!&lt;/p&gt;

&lt;h2&gt;
  
  
  Contribution flow
&lt;/h2&gt;

&lt;p&gt;Before starting to work on open source contributions, it is essential to know how the usual workflow will look like.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1jo1uw7ple46oqijm2no.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F1jo1uw7ple46oqijm2no.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
A high-level overview of the step by step flow that open source contributions follow.



&lt;p&gt;Although most pull requests can be created, reviewed, and merged within the same day, it is not uncommon for PRs to take even multiple months from start to finish! I have pull requests which are open for more than a year and they are not merged yet because the project is maintained irregularly or project focus moved away from that issue.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to find a project to contribute to
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;GitHub:&lt;/strong&gt; there is an &lt;a href="https://github.com/explore" rel="noopener noreferrer"&gt;Explore&lt;/a&gt; page where GitHub recommends repositories based on your interests and previous contributions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Work:&lt;/strong&gt; you are actively using a repository for a project at work. You want to fix a bug or add a feature that is necessary for your progress at work or you simply want to contribute as a way of giving back to the project.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contacts:&lt;/strong&gt; you hear from co-workers or friends about cool repositories and want to be part of them too.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stock Market:&lt;/strong&gt; not the most obvious way, but you could be invested in a company and want it to flourish.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Naturally, starting an open-source project yourself if you have a great idea is an option as well.&lt;/p&gt;

&lt;h3&gt;
  
  
  Bug bounty programs
&lt;/h3&gt;

&lt;p&gt;Unfortunately, participation in most open source projects is voluntarily and therefore unpaid, but there are websites where you can find issues with monetary rewards on them:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://issuehunt.io/issues" rel="noopener noreferrer"&gt;Issuehunt&lt;/a&gt;: I collected various bounties of up to $100 for issues here and the site gets updated regularly, so I highly recommend you to check it out.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://gitcoin.co/explorer" rel="noopener noreferrer"&gt;Gitcoin&lt;/a&gt;: Most issues here are specific to blockchain development and the payout is in cryptocurrency.&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bugcrowd.com/bug-bounty-list/" rel="noopener noreferrer"&gt;Bugcrowd&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://hackerone.com/bug-bounty-programs" rel="noopener noreferrer"&gt;HackerOne&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.bountysource.com/" rel="noopener noreferrer"&gt;Bountysource&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What to do first
&lt;/h2&gt;

&lt;p&gt;Let's assume that you found a project of your liking, here are some ways that you can find out if it is a smart idea to start working on that repository:&lt;/p&gt;

&lt;h3&gt;
  
  
  Proficient with the used programming language
&lt;/h3&gt;

&lt;p&gt;No matter how great the project sounds, if you have no prior experience with the used programming language or tech stack, you will have a hard time fixing an issue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check the popularity of the project
&lt;/h3&gt;

&lt;p&gt;I recommend going for a project that is not too popular yet - all the good issues would be gone too quickly - but also not so small that the chance is high that the project might become unmaintained at some point. Aiming for a star count on GitHub between 1000 and 50k is usually a good bet, but there are some exceptions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check the latest commit in the master branch
&lt;/h3&gt;

&lt;p&gt;Don't contribute to a repository if you see that there was no commit added to master for more than a couple of months, it can be a sign of a deserted project. When having doubts about the ongoing development of the project, ask some of the contributors or open up a new issue.&lt;/p&gt;

&lt;h3&gt;
  
  
  Take a look at the number of open pull requests
&lt;/h3&gt;

&lt;p&gt;Are there a lot of open pull requests? If it is not a highly popular project, this can be a clear indicator that the repository cannot keep up and doesn't have enough members for handling the reviews. Alternatively, it could also be that there are organizational issues that lead to slow decisions or the direction of the project is lacking.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check for interesting issues to work on
&lt;/h3&gt;

&lt;p&gt;Well-organized repositories usually have issue labels like "good first issue", "help wanted" or "documentation". These can be an optimal start to get to know the repository. When you find a suitable issue, make sure it is not taken by someone else yet. If it is an older issue, write a comment to find out if there is still demand for a solution to avoid working on an issue that is not wanted anymore or superseded by other changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Find contribution guidelines for the project
&lt;/h3&gt;

&lt;p&gt;While you can always find out how to get a project up and running locally yourself, a good project usually has information for contributors in the &lt;code&gt;README.md&lt;/code&gt; file or more specifically in a dedicated &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; file.&lt;/p&gt;

&lt;h2&gt;
  
  
  Preparations before working on a project
&lt;/h2&gt;

&lt;p&gt;By now, you selected a project that fulfills all the criteria of being a good pick: it is continuously maintained, you found interesting open issues and you feel skilled enough to start the work!&lt;/p&gt;

&lt;h3&gt;
  
  
  (Optional) Make sure to add an SSH key to your GitHub account
&lt;/h3&gt;

&lt;p&gt;With GitHub, you can clone a repository either with HTTPS or SSH. Various online discussions are going on between which way is better, I prefer and recommend SSH over HTTPS because you don't have to re-enter your GitHub password every time you use operations like &lt;code&gt;git push&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;If you are unsure about how to generate an SSH key and put it into your GitHub account, here is a good article: &lt;a href="https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh" rel="noopener noreferrer"&gt;Connecting to GitHub with SSH&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  (Optional) Add a GPG key for verified commits
&lt;/h3&gt;

&lt;p&gt;Although you can commit to a repository just fine without your commits being verified, I recommend setting up a GPG key for these three reasons:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;your commit will receive a green "Verified" label which gives it improved authenticity&lt;/li&gt;
&lt;li&gt;you show other people involved in the project that the commit comes from a trusted source&lt;/li&gt;
&lt;li&gt;others can be sure that no one impersonated your account&lt;/li&gt;
&lt;/ul&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F93m3vaokp0dt9n9ls5u8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2F93m3vaokp0dt9n9ls5u8.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
Most of the commits in the &lt;a href="https://github.com/facebook/react/commits/master" rel="noopener noreferrer"&gt;React repository&lt;/a&gt; are verified by GPG key.
  



&lt;p&gt;You can read more about generating a GPG key and verifying your commits here: &lt;a href="https://docs.github.com/en/github/authenticating-to-github/managing-commit-signature-verification" rel="noopener noreferrer"&gt;Managing commit signature verification&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;When you have your GPG key generated and set up in GitHub, it can be helpful to run these commands to tell git to auto-sign every commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git config --global user.signingkey &amp;lt;publickey&amp;gt;
git config --global commit.gpgsign true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Ready to clone
&lt;/h3&gt;

&lt;p&gt;Let's say you want to contribute to &lt;a href="https://github.com/facebook/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;, then the command for copying the project to your local disk would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# ssh
git clone git@github.com:facebook/react.git
# https
git clone https://github.com/facebook/react.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the project is successfully cloned to your local disk, you can find the repository available under the file path that you were located in when cloning it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Find the used branch for development
&lt;/h3&gt;

&lt;p&gt;Before you start to work on the project and begin modifying files, it is a good idea to check the branches on the GitHub repo. Although most of the time you branch away from the &lt;code&gt;master&lt;/code&gt; branch for your contributions, there are repositories that use a separate &lt;code&gt;dev&lt;/code&gt; or &lt;code&gt;development&lt;/code&gt; branch. These intermediate branches are used for PRs and get merged back into &lt;code&gt;master&lt;/code&gt; regularly when deciding on pushing out a new release.&lt;/p&gt;

&lt;h3&gt;
  
  
  Familiarize yourself with the project
&lt;/h3&gt;

&lt;p&gt;Depending on the size of the project, it can be quite the challenge to figure out which files require a change for providing a bugfix/feature. Try to scan over the file structure once at least before using the search in your IDE for pinpointing the location for your code changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Don't get discouraged!
&lt;/h3&gt;

&lt;p&gt;Starting with a large project can be overwhelming at first. I often wanted to give up on issues already only to find the ideal solution a moment later. It can pay off to be perseverant.&lt;/p&gt;

&lt;p&gt;Nevertheless, you will encounter projects - especially older ones - which can suffer from bad developer experience. When you realize that it will take you a lot of time to even get the project setup or the tests and linting to pass, focusing your work on another repository might be a better idea.&lt;/p&gt;

&lt;h2&gt;
  
  
  Getting things done
&lt;/h2&gt;

&lt;p&gt;At this point, you have familiarized yourself with the project and you are sure that you can make some meaningful code changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reserve the issue of your choice
&lt;/h3&gt;

&lt;p&gt;You can signal the contributors of the repository that you want to take an issue by simply writing "I want to work on this" as a comment.Ideally, you will get assigned to an issue and avoid that your issue will be taken by someone else.&lt;/p&gt;

&lt;p&gt;Be aware that you are expected to deliver a PR or a status update once you volunteered for an issue. Some contributors also might ask about the progress if is a high priority bug fix.&lt;/p&gt;

&lt;h3&gt;
  
  
  Save work into a branch
&lt;/h3&gt;

&lt;p&gt;Since we are still in the default branch that we cloned the project from, it's about time to check out into a separate branch to be able to commit.&lt;/p&gt;

&lt;p&gt;I recommend naming a branch according to the &lt;code&gt;&amp;lt;issue-number&amp;gt;-&amp;lt;issue-name&amp;gt;&lt;/code&gt; naming convention.&lt;/p&gt;

&lt;p&gt;An example of checking out into an issue-specific branch would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git checkout -b 345-expose-options-for-gtag
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you want to read up more on the topic, there is plenty of information available about &lt;a href="https://deepsource.io/blog/git-branch-naming-conventions/" rel="noopener noreferrer"&gt;Git branch naming conventions&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to commit
&lt;/h2&gt;

&lt;p&gt;We already learned that there are naming conventions for creating branches in Git, so we also want to follow the best practices for the structure of a commit message. &lt;a href="https://www.conventionalcommits.org/" rel="noopener noreferrer"&gt;Conventional Commits&lt;/a&gt; is a good resource of "a specification for adding human and machine-readable meaning to commit messages".&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up git commit default message
&lt;/h3&gt;

&lt;p&gt;As programmers, we prefer to avoid unnecessary work and stick to the DRY principle. That's why I advise using a &lt;a href="https://gist.github.com/mhatvan/ca7bdd12453eafadf8f838c69a4ca621" rel="noopener noreferrer"&gt;git commit default message&lt;/a&gt;. I linked the template for you that I use myself. Whenever I start a commit message, I can check which type of change I am working on and adapt the message and its body accordingly.&lt;/p&gt;

&lt;p&gt;A useful hint: whenever you put the issue number into your commit message like &lt;code&gt;(#&amp;lt;issue-number&amp;gt;)&lt;/code&gt;, the respective issue on the remote repository will receive a timeline notification that looks like this:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjrbbt0foynhs4g4k6tms.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fjrbbt0foynhs4g4k6tms.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
Everyone interested in the issue will see that you started working on it.
  



&lt;p&gt;This can be helpful especially for pull requests that span across a longer time frame to further signal to other subscribers of an issue that you are indeed working on it right now and that the pull request is not abandoned.&lt;/p&gt;

&lt;h3&gt;
  
  
  Check how commits are done in the repository of your choice
&lt;/h3&gt;

&lt;p&gt;Although you are good to go most of the time with sticking to the conventional commit structure for commits, I advise running &lt;code&gt;git log&lt;/code&gt; in a project where you contribute for the first time to see how strict commit messages are handled.&lt;/p&gt;

&lt;h3&gt;
  
  
  Make sure you comply with the outlined contribution guidelines
&lt;/h3&gt;

&lt;p&gt;Before committing, double-check that you fulfill all the requirements of a potential &lt;code&gt;CONTRIBUTING.md&lt;/code&gt; file. Whenever you add a new feature, it can be a requirement to add a corresponding unit test to the project to verify that your changes are reliably working or that you update the documentation to explain the feature.&lt;/p&gt;

&lt;h3&gt;
  
  
  Focus on the issue at hand exclusively
&lt;/h3&gt;

&lt;p&gt;Don’t touch any code not related to the bug you are fixing or the feature you are implementing and stick to the code style of the project.&lt;/p&gt;

&lt;p&gt;Sometimes, the pull request reviewers will also explicitly tell you to revert formatting or refactoring changes that you did out of goodwill. The main reason is to keep the pull request easy to read and review and to avoid time-consuming discussions about irrelevant changes in the code diff.&lt;/p&gt;

&lt;h3&gt;
  
  
  Squash commits
&lt;/h3&gt;

&lt;p&gt;Do as many commits as you need while the pull request is in a work in progress state, but rewrite and squash your commits to result in one nice and clean commit in the end. This way you avoid polluting the master branch with excess information in &lt;code&gt;git log&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;In case you are unfamiliar with squashing commits, this &lt;a href="https://medium.com/@slamflipstrom/a-beginners-guide-to-squashing-commits-with-git-rebase-8185cf6e62ec" rel="noopener noreferrer"&gt;beginner's guide to squashing commits with git rebase&lt;/a&gt; can help you out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready for pushing
&lt;/h2&gt;

&lt;p&gt;If you've gotten this far, great! You're almost ready to open your first PR! There are only a few steps left.&lt;/p&gt;

&lt;h3&gt;
  
  
  Fork repository
&lt;/h3&gt;

&lt;p&gt;Forking is just a fancy word for taking a repository on GitHub and copying it under your own GitHub username.It can be done by clicking the Fork button on the right upper corner on any repository as can be seen here:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feuc7tzeofpwbvmbgy0ax.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Feuc7tzeofpwbvmbgy0ax.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
The fork button is in the upper right corner in the GitHub UI.



&lt;p&gt;The reason why we need to fork a repository is to be able to submit a pull request against it.By default, you don't have push permissions to a repository that doesn't belong to you.Therefore we fork a repository under our username where we are allowed to push to and then we can submit a PR against the original GitHub repository.&lt;/p&gt;

&lt;p&gt;So if you would decide to fork &lt;a href="https://github.com/facebook/react" rel="noopener noreferrer"&gt;React&lt;/a&gt;, it would take a few seconds, and then you would have an exact copy of the repository available under &lt;code&gt;https://github.com/&amp;lt;username&amp;gt;/react&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Although the step of forking can be done earlier in the workflow, at this point we already made a &lt;code&gt;git commit&lt;/code&gt; previously so we know for sure that we have a meaningful contribution to push. If you fork a repository before checking out the project locally and finding out if you can do valuable changes, it can be that you decide against working on it and then you forked it in vain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Set up a git remote
&lt;/h3&gt;

&lt;p&gt;When you clone a repository from GitHub to your local disk, it has the &lt;code&gt;origin&lt;/code&gt; set up for you.&lt;/p&gt;

&lt;p&gt;If you run &lt;code&gt;git remote -v&lt;/code&gt; inside the location where you cloned the repository to, it should look similar to this: &lt;code&gt;origin git@github.com:facebook/react.git&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;When you run &lt;code&gt;git push&lt;/code&gt; it will try to push against &lt;code&gt;origin&lt;/code&gt; which would not work in this case since we are not a member of the &lt;a href="https://github.com/facebook" rel="noopener noreferrer"&gt;Facebook&lt;/a&gt; group.&lt;/p&gt;

&lt;p&gt;We need to change the &lt;code&gt;origin&lt;/code&gt; to be our fork and the &lt;code&gt;upstream&lt;/code&gt; repository to be &lt;a href="https://github.com/facebook/react" rel="noopener noreferrer"&gt;facebook/react&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;To do that, we can run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# add facebook/react as upstream
git remote add upstream git@github.com:facebook/react.git
# change origin url to be &amp;lt;username&amp;gt;/react
git remote set-url origin git@github.com:&amp;lt;username&amp;gt;/react.git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If you did everything correctly, the output of &lt;code&gt;git remote -v&lt;/code&gt; should display &lt;code&gt;origin&lt;/code&gt; and &lt;code&gt;upstream&lt;/code&gt; set up:&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fagm79a91kaxnfnysdjbe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fagm79a91kaxnfnysdjbe.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
Output of &lt;code&gt;git remote -v&lt;/code&gt;



&lt;p&gt;Does it look similar like in the screenshot above? Good job!&lt;/p&gt;

&lt;h3&gt;
  
  
  Push to origin
&lt;/h3&gt;

&lt;p&gt;The remaining steps should be fairly easy. We push our branch with the squashed commits that we made to the &lt;code&gt;origin&lt;/code&gt;, which is our fork.&lt;/p&gt;

&lt;p&gt;The command to do that is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git push origin &amp;lt;branch-name&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Super, we are almost through!&lt;/p&gt;

&lt;h2&gt;
  
  
  Ready to open a PR
&lt;/h2&gt;

&lt;p&gt;If you did everything correctly, you will be presented with an alert box at the location of your forked repository, notifying you of your recent push.&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbjm6ygitwov34m4b1pyg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Fbjm6ygitwov34m4b1pyg.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
A real-life example of a pull request that I made for &lt;a href="https://github.com/brainhubeu/react-carousel" rel="noopener noreferrer"&gt;React Carousel&lt;/a&gt;.



&lt;p&gt;After you are 100% done with your work, click the "Compare &amp;amp; pull request" button.&lt;/p&gt;

&lt;h3&gt;
  
  
  Write a useful pull request description
&lt;/h3&gt;

&lt;p&gt;To make the review for the maintainers of the repository as easy as possible, we should follow the best practices for a good pull request description.&lt;/p&gt;

&lt;p&gt;This is the minimum that I would put there:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Closes #&amp;lt;issue-number&amp;gt;.

&amp;lt;explanation&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;GitHub will parse the "Closes" keyword and automatically close the issue when the PR gets merged.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;&amp;lt;explanation&amp;gt;&lt;/code&gt; part can be very different depending on your contribution. It might be that you want to explain the bug that you fixed, notify about potential problems that could show up in the future, or discuss breaking changes that your PR might lead to.&lt;/p&gt;

&lt;p&gt;Additionally, some repositories might have dedicated pull request templates set up. Then you would need to check checkboxes making sure that e.g. linting goes through without errors, you added unit test cases for your new feature, no formatting changes were committed, depending on the repository.&lt;/p&gt;

&lt;p&gt;When you are content with your pull request description,the only thing left to do is to click that rewarding, green "Create pull request" button and voilà!&lt;/p&gt;

&lt;h3&gt;
  
  
  Wait for approval
&lt;/h3&gt;

&lt;p&gt;Depending on the project, this can happen quickly or take a while. Sometimes you will have to do multiple iterations of improvements for a pull request, other times your work will be merged right away.&lt;/p&gt;

&lt;h2&gt;
  
  
  That's all folks!
&lt;/h2&gt;

&lt;p&gt;You successfully created your first pull request!&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%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffalos2ex6u3l9jvswpi8.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fi%2Ffalos2ex6u3l9jvswpi8.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
Wow, you did it! I hope you are as enthusiastic as these kids ;)



&lt;p&gt;Thank you for wanting to give back to the open source community, a lot of projects can only thrive with support from people like you!&lt;/p&gt;

&lt;p&gt;I know this was a lot to digest, but you should have all the necessary steps laid out to go from zero to hero.&lt;/p&gt;

&lt;p&gt;I hope this article has been helpful to you, let me know if there are any open questions left or passages to add.&lt;/p&gt;

&lt;p&gt;Thank you for reading!&lt;/p&gt;

&lt;h2&gt;
  
  
  Helpful resources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://opensource.guide/how-to-contribute/" rel="noopener noreferrer"&gt;Open-source guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://rubygarage.org/blog/how-contribute-to-open-source-projects" rel="noopener noreferrer"&gt;How to contribute to open source projects&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.freecodecamp.org/news/how-to-make-your-first-open-source-contribution-in-just-5-minutes-aaad1fc59c9a/" rel="noopener noreferrer"&gt;How to make your first open source contribution in just 5 minutes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/@jenweber/your-first-open-source-contribution-a-step-by-step-technical-guide-d3aca55cc5a6" rel="noopener noreferrer"&gt;Your first open source contribution: a step-by-step technical guide&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://medium.com/digitalfrontiers/5-reasons-why-you-should-contribute-to-open-source-projects-2f65443b4077" rel="noopener noreferrer"&gt;5 reasons why you should contribute to open source projects&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>Wix, WordPress, JAMStack - Oh My!</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Wed, 02 Sep 2020 14:29:06 +0000</pubDate>
      <link>https://dev.to/mhatvan/wix-wordpress-jamstack-oh-my-5f94</link>
      <guid>https://dev.to/mhatvan/wix-wordpress-jamstack-oh-my-5f94</guid>
      <description>&lt;p&gt;There are many options to choose from when building your website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://wordpress.org/"&gt;WordPress&lt;/a&gt; is the go-to option for many people who are not coders&lt;/li&gt;
&lt;li&gt;different WYSIWYG ("What you see is what you get") tools like &lt;a href="https://wixstats.com/?a=39870&amp;amp;c=124&amp;amp;s1="&gt;Wix&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://jamstack.wtf/"&gt;JAMStack&lt;/a&gt; solutions like &lt;a href="https://www.gatsbyjs.org/"&gt;Gatsby&lt;/a&gt; or &lt;a href="https://nextjs.org/"&gt;Next.js&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I didn't choose a CMS like WordPress
&lt;/h2&gt;

&lt;p&gt;Due to its big ecosystem of plugins and popularity, you can &lt;strong&gt;bootstrap a website in no time with WordPress and release your MVP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Nevertheless, having experienced various WordPress sites either through building them for clients, browsing the web myself or helping out my girlfriend with hiccups of her company's website, I can clearly say that &lt;strong&gt;WordPress sites feel slow, sluggish and laggy to me&lt;/strong&gt; and don't provide the performance that I would expect from a simple website.&lt;/p&gt;

&lt;p&gt;As a coder, I am interested in the code quality and want to have control over as many aspects of the website as possible.&lt;/p&gt;

&lt;p&gt;When you start with a theme or template, there is &lt;strong&gt;way too much magic happening&lt;/strong&gt; under the hood, and only some customization options are surfaced for the user to benefit from.&lt;/p&gt;

&lt;p&gt;If you lack the coding skills or time for working on your website, I can understand why it’s a good choice to take the shortcut and fire up a WordPress site, install a handful of plugins, and focus solely on content creation.&lt;/p&gt;

&lt;p&gt;In a single day, you can probably finish the MVP of your website depending on the complexity, while with a classic HTML/CSS/JavaScript framework you would be still working on the first page or even stuck with configurations.&lt;/p&gt;

&lt;h3&gt;
  
  
  This is of course very subjective, but here are my pro &amp;amp; cons regarding WordPress:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;no coding skills necessary&lt;/li&gt;
&lt;li&gt;open-source and free&lt;/li&gt;
&lt;li&gt;huge community&lt;/li&gt;
&lt;li&gt;extend functionality with endless plugins&lt;/li&gt;
&lt;li&gt;ready fast with UI themes&lt;/li&gt;
&lt;li&gt;strong focus on blogging and SEO&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fresh installation lacks in security&lt;/li&gt;
&lt;li&gt;updating plugins can break site easily&lt;/li&gt;
&lt;li&gt;attractive for potential hackers due to popularity&lt;/li&gt;
&lt;li&gt;bad page performance out of the box&lt;/li&gt;
&lt;li&gt;further customization not provided through plugins and themes is difficult&lt;/li&gt;
&lt;li&gt;spaghetti code&lt;/li&gt;
&lt;li&gt;no version history e.g. Git&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why I didn't choose a WYSIWYG editor like Wix
&lt;/h2&gt;

&lt;p&gt;The big upside of WYSIWYG tools is the &lt;strong&gt;possibility to drag and drop content&lt;/strong&gt; and building the website in a way that a user can relate to since changes are immediately visualized and impactful.&lt;/p&gt;

&lt;p&gt;It resembles a Microsoft Word editor with a lot of shortcut buttons e.g. bolding the text or attaching an image.&lt;/p&gt;

&lt;h3&gt;
  
  
  Compared to WordPress, my subjective pros &amp;amp; cons for a WYSIWYG editor look like this:
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast workflow with drag and drop&lt;/li&gt;
&lt;li&gt;strong focus on the visual aspect of a page&lt;/li&gt;
&lt;li&gt;no coding skills necessary&lt;/li&gt;
&lt;li&gt;ready fast with UI themes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;spaghetti code&lt;/li&gt;
&lt;li&gt;bad page performance out of the box&lt;/li&gt;
&lt;li&gt;weak SEO optimization&lt;/li&gt;
&lt;li&gt;further customization without provided plugins or themes is difficult&lt;/li&gt;
&lt;li&gt;the site can look like a clone of another one fast&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Hello JAMStack!
&lt;/h2&gt;

&lt;p&gt;Building my website with a &lt;a href="https://jamstack.wtf/"&gt;JAMStack&lt;/a&gt; solution came naturally.&lt;/p&gt;

&lt;p&gt;When you receive various programming newsletters, there are always clickbait articles like "Why you have to try XYZ" or "Check out the fastest framework called XYZ".&lt;/p&gt;

&lt;p&gt;There is the ever-present need for staying relevant and up to date on the job market and also having some fear of missing out when not using the latest and greatest bleeding-edge technology.&lt;/p&gt;

&lt;p&gt;So it happened that I worked on a project with Gatsby to satisfy my developer curiosity for trying out new technologies and got in touch with JAMStack.&lt;/p&gt;

&lt;p&gt;It can best be described as a &lt;strong&gt;nostalgic reliving of the good old static website days&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  A classic JAMStack project looks like this:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;provide website content through Markdown files or write static HTML, no database is needed&lt;/li&gt;
&lt;li&gt;since the content is generally static, minimal or no backend setup needed&lt;/li&gt;
&lt;li&gt;the production bundle goes through steps like tree shaking, minification and is stripped of development tooling to become a small and performant end product&lt;/li&gt;
&lt;li&gt;you deploy your site with a hosting provider e.g. Netlify&lt;/li&gt;
&lt;li&gt;serve assets through a CDN&lt;/li&gt;
&lt;li&gt;the website loads fast for the user due to server-side rendering optimizations and cached content&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can find a detailed explanation of JAMStack on &lt;a href="https://jamstack.wtf/"&gt;jamstack.wtf&lt;/a&gt;. Choosing JAMStack or not depends a lot on the scope of your website. Most of the content needs to be requested on runtime e.g a corporate website with a lot of dynamic forms and user input? Don't use it. Is the content mostly images and text which rarely gets updated e.g. a blog post or a one-page product website? Yes, do it!&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;great performance out of the box&lt;/li&gt;
&lt;li&gt;excellent developer experience&lt;/li&gt;
&lt;li&gt;very cheap due delivering cached static files&lt;/li&gt;
&lt;li&gt;fast deployment&lt;/li&gt;
&lt;li&gt;just a static HTML page&lt;/li&gt;
&lt;li&gt;free and open-source frameworks&lt;/li&gt;
&lt;li&gt;extend functionality with plugins&lt;/li&gt;
&lt;li&gt;all your changes are version-controlled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;coding skills required&lt;/li&gt;
&lt;li&gt;dependent on 3rd party services&lt;/li&gt;
&lt;li&gt;cannot request dynamic data on runtime&lt;/li&gt;
&lt;li&gt;the time required for learning the stack&lt;/li&gt;
&lt;li&gt;no GUI&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Wrapping it up
&lt;/h2&gt;

&lt;p&gt;Using a JAMStack setup for your next project can be a great choice, depending on the scope of the project, possible company requirements, and many more factors. You will benefit immensely from a blazing fast page performance and an enjoyable developer experience.&lt;/p&gt;

&lt;p&gt;In case you are not a programmer or need to get a project bootstrapped really quickly, it is advisable to stick with either WordPress or Wix where you can manage your project through a graphical user interface.&lt;/p&gt;

&lt;p&gt;If you are interested in building a JAMStack website, you can read in my article &lt;a href="https://markushatvan.com/blog/why-i-chose-sapperjs-for-my-website-and-what-ive-learned-about-the-framework-so-far"&gt;"Why I Chose SapperJS For My Website, and What I've Learned About the Framework So Far"&lt;/a&gt; about how I was able to work and choose the perfect solution for me.&lt;/p&gt;

&lt;p&gt;Thank you for reading! I hope you found the information useful in this article. If you have any questions, feel free to leave a response below.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
    <item>
      <title>Why I Chose SapperJS For My Website, And What I've Learned About The Framework So Far</title>
      <dc:creator>Markus Hatvan</dc:creator>
      <pubDate>Tue, 01 Sep 2020 07:43:48 +0000</pubDate>
      <link>https://dev.to/mhatvan/why-i-chose-sapperjs-for-my-website-and-what-i-ve-learned-about-the-framework-so-far-3moe</link>
      <guid>https://dev.to/mhatvan/why-i-chose-sapperjs-for-my-website-and-what-i-ve-learned-about-the-framework-so-far-3moe</guid>
      <description>&lt;p&gt;Wow, what a framework!&lt;/p&gt;

&lt;p&gt;In this post, I will explain my thought process of how I was able to single out a tech-stack that would fulfill all the criteria I need to build a well-structured website:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;snappy, lightning-fast performance&lt;/li&gt;
&lt;li&gt;optimized SEO for being visible on the web&lt;/li&gt;
&lt;li&gt;developer friendliness for hacking away efficiently&lt;/li&gt;
&lt;li&gt;innovation in the field of website tools&lt;/li&gt;
&lt;li&gt;natural curiousness as a developer to try out new technologies&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Since I wanted to go for a website built on a modern &lt;a href="https://jamstack.wtf/"&gt;JAMStack&lt;/a&gt; setup, I had these options based on framework popularity and matureness:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Next.js&lt;/li&gt;
&lt;li&gt;Gatsby&lt;/li&gt;
&lt;li&gt;Hugo&lt;/li&gt;
&lt;li&gt;Nuxt.js&lt;/li&gt;
&lt;li&gt;and maaaany more&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can see a full list of available static site generators provided by Netlify on &lt;a href="https://www.staticgen.com/"&gt;StaticGen&lt;/a&gt;, there are a lot of competitors!&lt;/p&gt;

&lt;h2&gt;
  
  
  Next.js
&lt;/h2&gt;

&lt;p&gt;Since I have about 2 years of professional experience working with React, it would have made a lot of sense to choose Next.js as my preferred framework, but that would have been too easy, right?&lt;/p&gt;

&lt;p&gt;To be more versatile with different JavaScript frameworks out there, I decided against a React-based framework like Next.js.&lt;/p&gt;

&lt;h2&gt;
  
  
  Gatsby
&lt;/h2&gt;

&lt;p&gt;I didn't want to pick Gatsby again because I am already using it for another project of mine that I recently started working on called &lt;a href="https://dawcomparison.com"&gt;DAW Comparison&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Apart from wanting to try different tools, I didn't fully enjoy the developer experience using Gatsby as I ran into issues with performance, having a difficult time figuring out how to get &lt;a href="https://www.gatsbyjs.org/packages/gatsby-image/"&gt;gatsby-image&lt;/a&gt; working the way I want and getting frustrated by unmaintained/duplicated plugins.&lt;/p&gt;

&lt;p&gt;Nevertheless, I am certain that &lt;strong&gt;Gatsby is here to stay and will grow into an excellent framework&lt;/strong&gt; , especially since it is already very popular and received &lt;a href="https://www.businesswire.com/news/home/20200527005268/en/Gatsby-Raises-28M-Series-Funding-Web-Built"&gt;$28M in Series B Funding&lt;/a&gt; in May 2020.&lt;/p&gt;

&lt;h2&gt;
  
  
  Hugo
&lt;/h2&gt;

&lt;p&gt;Although I am interested in trying out the Go language for writing a backend project at some point, I was not interested in &lt;a href="https://gohugo.io/"&gt;Hugo&lt;/a&gt; due to it not being on my radar, but also because of its &lt;strong&gt;confusing-looking templating syntax&lt;/strong&gt; , for example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;{{ define "main" }}
&lt;span class="nt"&gt;&amp;lt;main&lt;/span&gt; &lt;span class="na"&gt;aria-role=&lt;/span&gt;&lt;span class="s"&gt;"main"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;header&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"homepage-header"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;h1&amp;gt;&lt;/span&gt;{{.Title}}&lt;span class="nt"&gt;&amp;lt;/h1&amp;gt;&lt;/span&gt;
    {{ with .Params.subtitle }}
    &lt;span class="nt"&gt;&amp;lt;span&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;{{.}}&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    {{ end }}
  &lt;span class="nt"&gt;&amp;lt;/header&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"homepage-content"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;{{.Content}}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&amp;gt;&lt;/span&gt;{{ range first 10 .Site.RegularPages }} {{ .Render "summary"}} {{ end }}&lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/main&amp;gt;&lt;/span&gt;
{{ end }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It might be a really powerful site generator, but I aim for simplicity for my website project.&lt;/p&gt;

&lt;h2&gt;
  
  
  Nuxt.js
&lt;/h2&gt;

&lt;p&gt;Building the website with &lt;a href="https://nuxtjs.org/"&gt;Nuxt.js&lt;/a&gt; would have made a lot of sense as I would have gained some hands-on experience with all three major JavaScript frameworks (React, Angular and Vue.js).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Vue.js is gaining a lot of popularity on GitHub&lt;/strong&gt; and across the JS scene because it pretty much combines the best features of React and Angular, but as you will read further below, I eventually decided to go with the underdog.&lt;/p&gt;

&lt;h2&gt;
  
  
  Small detour
&lt;/h2&gt;

&lt;p&gt;A while ago, I found out about &lt;a href="https://svelte.dev/"&gt;Svelte&lt;/a&gt; and felt intrigued and fascinated by its promise to be &lt;strong&gt;a radical new approach to building user interfaces&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;As seen on their website, "Svelte shifts the bulk of work that is usually done in the browser into a compile step that happens when you build your app". Hey, that sounds like a great way to solve performance issues for me!&lt;/p&gt;

&lt;p&gt;After working through the whole &lt;a href="https://svelte.dev/tutorial/basics"&gt;Svelte tutorial&lt;/a&gt;, I had a few WTF moments (in the most positive sense) where I was impressed by its absolute simplicity and smooth developer experience.&lt;/p&gt;

&lt;p&gt;Nevertheless, after acknowledging that it's too underground and might die a horrible "Just another JavaScript framework" death sooner or later and lacking a real-world project to try it out on, I dismissed it and forgot about Svelte again.&lt;/p&gt;

&lt;h2&gt;
  
  
  SapperJS
&lt;/h2&gt;

&lt;p&gt;Fast-forward to the initial research of the potential JAMStack setup of this website.&lt;/p&gt;

&lt;p&gt;I coincidentally ran across &lt;a href="https://sapper.svelte.dev/"&gt;SapperJS&lt;/a&gt; and realized that it is "powered by Svelte" and developed by the same core team.&lt;/p&gt;

&lt;p&gt;After a short moment of triumphing, I saw this notice on their documentation:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--mCKqQuSd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e3wz3t7mqhxrr4cf0ggv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--mCKqQuSd--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/e3wz3t7mqhxrr4cf0ggv.png" alt="Sapper early development notice"&gt;&lt;/a&gt;&lt;/p&gt;

    This will be a risky choice. - Early development notice on
    &lt;a href="https://sapper.svelte.dev/docs" rel="noopener noreferrer"&gt;
      Sapper documentation
    &lt;/a&gt;




&lt;p&gt;Oh, snap! That sounds like a lot of potential headaches, I still remember the upgrades from Angular 2 to 4 and Webpack 3 to 4 much too well.&lt;/p&gt;

&lt;p&gt;So my choices came down to&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;go with stable and mature Nuxt.js, be relevant to the job market and profit from a large community in case I get stuck and have to rely on Stack Overflow&lt;/li&gt;
&lt;li&gt;choose early development SapperJS, which did not hit a major version yet and potentially run into a few breaking changes along the way&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  In doubt, get a second opinion
&lt;/h2&gt;

&lt;p&gt;Not an easy choice, am I right? I decided to ask a former work colleague that I can always rely on for good information and advice.&lt;/p&gt;

&lt;p&gt;He is smart as hell and has about 20 years of experience in the JavaScript ecosystem, so that helps in situations like this.&lt;/p&gt;

&lt;p&gt;I asked: "Hey Pete, I would love to use SapperJS for my website, but it is still in early development, it's a stupid idea, right?"&lt;/p&gt;

&lt;p&gt;He responded: "It's not stupid at all, just be aware that you might need to refactor or redo a lot of code. But especially with personal projects, it's great to try out new tools and grow from the experience."&lt;/p&gt;

&lt;p&gt;Kind of surprised that he wouldn't turn down the idea right away and that he even encouraged me to try it out, I felt motivated and jumped right into it!&lt;/p&gt;

&lt;p&gt;Starting with an underdog framework also meant that there would be a lacking ecosystem of plugins and solutions, but I was aware of that and accepted it as part of building the website from scratch and seeing it as a great learning experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Progressing fast with Sapper
&lt;/h2&gt;

&lt;p&gt;I started with the &lt;a href="https://github.com/sveltejs/sapper-template-rollup"&gt;sapper-template-rollup&lt;/a&gt; and quickly set up the first few pages.&lt;/p&gt;

&lt;p&gt;Now after working on the website on and off for about a month, I am proud to have reached these goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;fast, performant and fully-responsive site&lt;/li&gt;
&lt;li&gt;a blog site with filtering options and sub-pages for categories/tags&lt;/li&gt;
&lt;li&gt;GDPR-compliance with own cookie notice and opt-in to Google Analytics&lt;/li&gt;
&lt;li&gt;a commenting system with &lt;a href="https://getreplybox.com/"&gt;ReplyBox&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;fast styling of layouts with &lt;a href="https://tailwindcss.com/"&gt;Tailwind CSS&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;shipping less than 300kb of resources and ~20 requests across each page&lt;/li&gt;
&lt;li&gt;lazy loading and image optimization with &lt;a href="https://github.com/matyunya/svelte-image"&gt;svelte-image&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;easy deployment to &lt;a href="https://www.netlify.com/"&gt;Netlify&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;close to 100% on Lighthouse audit&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I was able to focus almost exclusively on these goals without worrying about site performance because Sapper comes with advanced features and optimizations like route prefetching, server-side rendering, automatic code-splitting, and offline support out of the box!&lt;/p&gt;

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

&lt;p&gt;In case you feel inspired to start with SapperJS as well, these are my thoughts and experiences so far about what works well and what doesn't:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pros&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;great starter template with plenty of optimization options provided&lt;/li&gt;
&lt;li&gt;it works smoothly without any hiccups or weird errors even though it is in its early development stages&lt;/li&gt;
&lt;li&gt;you automatically profit from awesome Svelte features like concise syntax, built-in linting, a11y, marking of unused CSS, and more&lt;/li&gt;
&lt;li&gt;development server starts fast and does hot module reloading&lt;/li&gt;
&lt;li&gt;no framework-specific &lt;code&gt;&amp;lt;Link&amp;gt;&lt;/code&gt; components, just &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; tags which support prefetching&lt;/li&gt;
&lt;li&gt;guaranteed smooth integration with &lt;a href="https://github.com/rollup/rollup"&gt;Rollup&lt;/a&gt;, which was also created by Rich Harris, the founder of Svelte&lt;/li&gt;
&lt;li&gt;Discord channel with a nice community for all your potential questions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Cons&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sapper documentation is good but doesn't cover various edge cases which happen in development&lt;/li&gt;
&lt;li&gt;a lot of necessary SEO attributes are not set by default, e.g. meta description&lt;/li&gt;
&lt;li&gt;lacking ecosystem and component libraries either not existent or early development e.g. Svelma (Bulma components for Svelte)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All in all, I didn't encounter any severe cons at the time of writing, and I am optimistic that with all the hype around SvelteJS we will see the ecosystem steadily grow into a mature and well-respected web application framework.&lt;/p&gt;

&lt;p&gt;If building a website with JAMStack doesn't sound interesting to you, you can check out my other post about &lt;a href="https://markushatvan.com/blog/wix-wordpress-jamstack-oh-my"&gt;Wix, WordPress, JAMStack- Oh My!&lt;/a&gt; for some great alternatives.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>webdev</category>
      <category>beginners</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
