<?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>Forem: Roman Sedykh</title>
    <description>The latest articles on Forem by Roman Sedykh (@rsedykh).</description>
    <link>https://forem.com/rsedykh</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%2F131549%2F428c7990-9286-4c50-9a2e-b82cd062c5f5.jpg</url>
      <title>Forem: Roman Sedykh</title>
      <link>https://forem.com/rsedykh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/rsedykh"/>
    <language>en</language>
    <item>
      <title>You ask business people questions but you do it without respect</title>
      <dc:creator>Roman Sedykh</dc:creator>
      <pubDate>Wed, 03 Jul 2019 09:25:57 +0000</pubDate>
      <link>https://forem.com/rsedykh/you-ask-business-people-questions-but-you-do-it-without-respect-4io7</link>
      <guid>https://forem.com/rsedykh/you-ask-business-people-questions-but-you-do-it-without-respect-4io7</guid>
      <description>&lt;p&gt;Ok, the more accurate title would be &lt;em&gt;"How to communicate with business people about their projects if you're a freelance developer"&lt;/em&gt;, but I couldn't resist. :-)&lt;/p&gt;

&lt;p&gt;When you start a freelance developer career, the first big project is a game changer. Big projects bring more money and, inevitably, &lt;strong&gt;more problems&lt;/strong&gt;. How not to frack up by having a miscommunication?&lt;/p&gt;

&lt;p&gt;It takes years to see things for what they are. Until then you'll have troubles with understanding clients' needs, underestimate tasks, and miss deadlines, trust, and money. It's part of the process, but you can accelerate learning by communicating your understanding of incoming projects better.&lt;/p&gt;

&lt;p&gt;I compiled a checklist backed with my experience of evaluating more than a hundred web and mobile projects (from a week-long to five years in development).&lt;/p&gt;




&lt;p&gt;Step 1, &lt;strong&gt;preparation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Should you even consider taking the project? Will the client agree on your terms? For that, you should answer these questions:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Can I do it?&lt;/li&gt;
&lt;li&gt;How much time do I need?&lt;/li&gt;
&lt;li&gt;How much &lt;strong&gt;must&lt;/strong&gt; I charge to be able to complete the project if something goes wrong (it always does)?&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;At this step, you probably can't spend much time gathering info, but you definitely can have a call with a potential client. What should you do?&lt;/p&gt;

&lt;p&gt;Before a call, prepare: read all docs (if they exist), learn about a few similar projects.&lt;/p&gt;

&lt;p&gt;Then, follow the algorithm:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Ask about the project's goal.&lt;/li&gt;
&lt;li&gt;Ask about edge cases, question why the client sees thing this way, what are the reasons.&lt;/li&gt;
&lt;li&gt;Ask any questions you have left from reading original docs.&lt;/li&gt;
&lt;li&gt;Tell the client your vision of a project, carefully listen to their response.&lt;/li&gt;
&lt;li&gt;Try to find underlying potential problems with tech/design/business.&lt;/li&gt;
&lt;li&gt;Update your project vision, agree on it with the client. That will be the project you will evaluate.&lt;/li&gt;
&lt;li&gt;Discuss which major parts of website/app/service you should thoroughly estimate first, leaving everything else behind for a while. (Always start with a key part of the project).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;After you finished a call, immediately write everything down. Then, if you can wait till the next day — just wait, let things settle down. You'll have a more unobstructed view, and a client might send you some additional info.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Still, want to land this deal?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Step 2, &lt;strong&gt;evaluation&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Write a response with your estimates following this template:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Write the project description.&lt;/li&gt;
&lt;li&gt;Write the project goals.&lt;/li&gt;
&lt;li&gt;Write about why you like it.&lt;/li&gt;
&lt;li&gt;Write about project features. Mention underlying potential problems.&lt;/li&gt;
&lt;li&gt;Create a mind map with the project's structure that an average person can understand.&lt;/li&gt;
&lt;li&gt;If you have enough time, work on basic user stories (see this &lt;a href="https://medium.com/@rsedykh/example-canned-user-stories-and-tasks-717c73bc4046"&gt;cheatsheet&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Write how you think you will build it, what are the major milestones, what’s your release strategy.&lt;/li&gt;
&lt;li&gt;Write about resources you will need to accomplish a task.&lt;/li&gt;
&lt;li&gt;Write time/budget estimate, based on tasks and/or resources. Don’t oversimplify things, but don't go pessimistic either.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;A density of this response depends on how much you like/need the project.&lt;/p&gt;

&lt;p&gt;If it's possible, always present your response on a video call or in person.&lt;/p&gt;




&lt;p&gt;A few iterations later, you landed yourself a big project that you and your client are confident in and which can become a big step for your professional skills and career.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>agile</category>
    </item>
    <item>
      <title>If you ever have to lead a remote dev team...</title>
      <dc:creator>Roman Sedykh</dc:creator>
      <pubDate>Mon, 17 Jun 2019 12:08:13 +0000</pubDate>
      <link>https://forem.com/rsedykh/if-you-ever-have-to-manage-a-remote-dev-team-2j1g</link>
      <guid>https://forem.com/rsedykh/if-you-ever-have-to-manage-a-remote-dev-team-2j1g</guid>
      <description>&lt;p&gt;For those developers who suddenly have to lead a remote team and answer to stakeholders, I compiled a checklist that you and your teammates can follow to have &lt;strong&gt;a simple, transparent, predictable and frictionless workflow&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;I spend my years managing remote development teams. Either you work on a client's project or a startup, any workflow stands on three pillars:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Communication&lt;/li&gt;
&lt;li&gt;Task management&lt;/li&gt;
&lt;li&gt;Time management&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;To master those, we need frameworks and tools as simple as possible to get the job done without distracting you from creating the product. While I describe some frameworks below, I suggest you stick with &lt;a href="https://slack.com" rel="noopener noreferrer"&gt;Slack&lt;/a&gt; and &lt;a href="https://trello.com" rel="noopener noreferrer"&gt;Trello&lt;/a&gt; for communications. &lt;a href="https://www.getharvest.com" rel="noopener noreferrer"&gt;Harvest&lt;/a&gt; (teams of 5+, paid) or &lt;a href="https://toggl.com" rel="noopener noreferrer"&gt;Toggl&lt;/a&gt; (5–, free) is the best if you're required to provide timesheets or you want to make a point.&lt;/p&gt;




&lt;h2&gt;
  
  
  Communication
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Use channels, &lt;strong&gt;avoid direct messages&lt;/strong&gt;. This makes your chats transparent. With more than two folks on a project, you don't want to get in the "gosh, we forgot to tell this to everybody else" situation.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A640%2F1%2A9ADyW5oiPI1Dtk8lnwJRog.gif"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Start a thread&lt;/strong&gt; to discuss a particular issue. Mention &lt;em&gt;only&lt;/em&gt; those who need to participate. Two points here: threads make channels much cleaner; you don't distract anyone who's not directly involved in the discussion, yet preserving their access to information. &lt;/li&gt;
&lt;li&gt;Wisely add integrations with other instruments like Github, Trello, and Sentry to have &lt;strong&gt;anchor points in discussions&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Slack resembles an open space working environment. And yes, you require quality time alone. It's ok to turn off the app, but make sure that everybody knows how to reach you via phone or your personal messenger (btw, never continue work conversations there, return to Slack). And, never leave Slack when there is an &lt;strong&gt;ASAP&lt;/strong&gt; situation.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Task management
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;em&gt;Team leader special&lt;/em&gt;: subscribe to the boards, so you don't miss important messages and the big picture of your project. By subscribing, you allow Trello to send you notifications via email. Don't check your email on every inbox message, look through notifications during your everyday &lt;strong&gt;zero inbox routine&lt;/strong&gt; and make sure (buy manually archiving each email) that you don't miss anything important.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A640%2F1%2Anzr9OlfIZSMlJgalRtVkNA.gif"&gt;
&lt;/li&gt;
&lt;li&gt;Here's my framework: make lists and describe tasks in cards. Make the priority cards top your lists. Then, take tasks from the top left and start moving them &lt;strong&gt;to the right&lt;/strong&gt;.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1280%2F1%2AGPZzJoJnrSNNaQmolxZVug.gif"&gt;
&lt;em&gt;TODO → IN PROGRESS → TEST → RETURNED FROM TEST → IN PROGRESS → TEST → READY TO PRODUCTION → DONE&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decompose tasks&lt;/strong&gt; into subtasks: create "Frontend," "Backend," "Markup," "Questions," "Etc" checklists. You might want to split large tasks into smaller ones. Completing each small task provides its separate value, like, you can deploy a subset of features to production.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A4800%2Fformat%3Awebp%2F1%2Ae_KeRjSCOX1Up2HazGF6PA.png"&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Deadlines&lt;/strong&gt;, if added as due dates, &lt;strong&gt;are real&lt;/strong&gt;. If you're not sure that you can make it, then move a deadline, so everybody can see it and act accordingly. Don't forget that it can take a couple of extra days to test, fix bugs, and deploy a feature to production.
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A4800%2Fformat%3Awebp%2F1%2AqlDLV2rf6HXC3vvF4VEo-g.png"&gt;
&lt;/li&gt;
&lt;li&gt;Learn a few hotkeys (hit &lt;em&gt;shift + ?&lt;/em&gt; in Trello).&lt;/li&gt;
&lt;li&gt;Use color labels to differentiate tasks. This helps you evaluate progress and balance the team load &lt;strong&gt;visually&lt;/strong&gt;. You can invent your own system or use mine: &lt;em&gt;Backend, Frontend, Bug, ASAP, Non-tech​, Tech debt, Design, Tech special, Discuss, Temp mark&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Time management
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;(optional, depends on circumstances)&lt;/em&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Install time tracker &lt;strong&gt;browser extensions&lt;/strong&gt; and desktop apps. Assign a hotkey for popping up a desktop app.&lt;/li&gt;
&lt;li&gt;Track &lt;strong&gt;everything related to work&lt;/strong&gt;: coding, fixing, refactoring, discussing, thinking, reading, etc.&lt;/li&gt;
&lt;li&gt;Track time from Trello cards (via the browser extension), so your &lt;strong&gt;records get attached&lt;/strong&gt; to the tasks (useful for analyzing and reporting).
&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fmiro.medium.com%2Fv2%2Fresize%3Afit%3A1280%2F1%2A69FT7UvDaN042XohQWgOBw.gif"&gt;
&lt;/li&gt;
&lt;li&gt;No card to track? Create a new card (for example: “Update dependencies”), so the task can be &lt;strong&gt;visible, testable and trackable&lt;/strong&gt;. In some cases (like general talk about the project) just track the project's overall time.&lt;/li&gt;
&lt;li&gt;Track honestly. Tea time, side chat? Pause. Forget to stop? Correct later. But &lt;strong&gt;never&lt;/strong&gt; track time post factum.&lt;/li&gt;
&lt;/ol&gt;




&lt;p&gt;That's how, after much back and forth, I manage remote teams. The goal here is not becoming a control nazi but ensuring the transparency of the processes and availability of information to achieve the comforting work-life balance.&lt;/p&gt;

&lt;p&gt;Hope this post will help you avoid mistakes. Share it with your teammates if you like it. :-)&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>beginners</category>
      <category>agile</category>
    </item>
    <item>
      <title>Image Optimization: Understanding the Exact Impact on Google’s Performance Score to Rank Higher</title>
      <dc:creator>Roman Sedykh</dc:creator>
      <pubDate>Mon, 06 May 2019 14:05:14 +0000</pubDate>
      <link>https://forem.com/rsedykh/image-optimization-understanding-the-exact-impact-on-google-s-performance-score-to-rank-higher-24aa</link>
      <guid>https://forem.com/rsedykh/image-optimization-understanding-the-exact-impact-on-google-s-performance-score-to-rank-higher-24aa</guid>
      <description>&lt;p&gt;Everybody talks about Web Performance these days. Site speed is a &lt;a href="https://developers.google.com/web/updates/2018/07/search-ads-speed" rel="noopener noreferrer"&gt;ranking factor&lt;/a&gt; and affects business metrics: &lt;a href="https://royal.pingdom.com/page-load-time-really-affect-bounce-rate/" rel="noopener noreferrer"&gt;bounced visitors&lt;/a&gt; and &lt;a href="https://www.section.io/blog/page-load-time-bounce-rate/" rel="noopener noreferrer"&gt;page views per session&lt;/a&gt;. However, it’s usually unclear how improving performance affects those metrics exactly. &lt;/p&gt;

&lt;p&gt;Many articles on Web Performance mention “image optimization” as a primary step in accelerating websites. Now, what’s the &lt;strong&gt;exact&lt;/strong&gt; impact? This post elaborates on &lt;strong&gt;how exactly image optimization affects Google’s Performance Score&lt;/strong&gt;.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Performance Score is determined by Lighthouse simulating a page load and analyzing the derived lab data. 100 is the best possible score which represents the 98th percentile, a top-performing site. A score of 50 represents the 75th percentile.&lt;/p&gt;

&lt;p&gt;A score of 90–100 is considered fast, and 50 to 90 is considered average. Below 50 is considered to be slow.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;We took the world’s &lt;a href="https://www.alexa.com/topsites" rel="noopener noreferrer"&gt;top 500 websites&lt;/a&gt; (like USA Today, IKEA, and Behance) and ran performance analyses with &lt;a href="https://developers.google.com/web/tools/lighthouse/" rel="noopener noreferrer"&gt;Lighthouse&lt;/a&gt; &lt;em&gt;(performance analyzer made by Google)&lt;/em&gt; and &lt;a href="https://pagedetox.com/?utm_source=devto&amp;amp;utm_content=performancescore" rel="noopener noreferrer"&gt;PageDetox&lt;/a&gt; &lt;em&gt;(a diagnostic framework made by &lt;a href="https://uploadcare.com/?utm_source=devto&amp;amp;utm_content=performancescore" rel="noopener noreferrer"&gt;us&lt;/a&gt;)&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;We want to share the numbers so you could better understand where you stand.&lt;/p&gt;

&lt;h3&gt;
  
  
  Is the hype about optimizing web performance worth it?
&lt;/h3&gt;

&lt;p&gt;Why should you care? The answer is simple — competition.&lt;/p&gt;

&lt;p&gt;You can optimize your website in many ways. Take search engine optimization; when optimized with the right keywords, content lengths, and backed with authoritative domains, your website gets ranked higher in search results.&lt;/p&gt;

&lt;p&gt;However, while the average Lighthouse SEO score is &lt;strong&gt;93&lt;/strong&gt; for the analyzed pack, the performance score is only &lt;strong&gt;48&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;What does this mean for you? &lt;strong&gt;You can choose where you compete for optimization.&lt;/strong&gt; Simply put, getting above average in SEO means achieving &lt;strong&gt;93+&lt;/strong&gt; points while there’s roughly twice as much opportunity in optimizing for performance. Also, it takes time to prove your SEO strategies while you can quickly achieve the target performance metrics.&lt;/p&gt;

&lt;p&gt;If your niche is competitive, and a search engine is ranking two websites with similar content and SEO score, it will prioritize the one with a higher Performance Score.&lt;/p&gt;

&lt;p&gt;That’s also logical from the user experience perspective. The faster your site is, the smoother the user experience; thus, your analytics platform registers fewer bounces, more page views, and higher conversions.&lt;/p&gt;

&lt;p&gt;In our research, we focused on the total image weight of analyzed pages. On average, images take up to &lt;strong&gt;53%&lt;/strong&gt; of your entire page weight (according to &lt;a href="https://royal.pingdom.com/page-load-time-really-affect-bounce-rate/" rel="noopener noreferrer"&gt;Pingdom&lt;/a&gt;). This means they have a big impact on page-loading times and subsequently overall performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  A bit of theory
&lt;/h3&gt;

&lt;p&gt;This section unveils how exactly image performance affects Performance Score. It’s a bit technical, so if you want the actual figures for the top 500&lt;br&gt;
websites upfront, skip down to the next section.&lt;/p&gt;

&lt;p&gt;Lighthouse uses the following metrics to calculate Performance Score based on their weights:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First Contentful Paint &lt;em&gt;(FCP, users perceive a page as responding)&lt;/em&gt;, weight 3&lt;/li&gt;
&lt;li&gt;First Meaningful Paint &lt;em&gt;(FMP, page’s primary content appears on the screen)&lt;/em&gt;, weight 1&lt;/li&gt;
&lt;li&gt;Speed Index &lt;em&gt;(SI, visible page content gets displayed)&lt;/em&gt;, weight 4&lt;/li&gt;
&lt;li&gt;First CPU Idle &lt;em&gt;(page becomes minimally interactive)&lt;/em&gt;, weight 2&lt;/li&gt;
&lt;li&gt;Time to Interactive &lt;em&gt;(TTI, page becomes fully interactive)&lt;/em&gt;, weight 5&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While none of the above reads as “image content weight and loading time,” you can find performance improvement opportunities specific to images in a Lighthouse report. They are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defer offscreen images, implement lazy-loading.&lt;/li&gt;
&lt;li&gt;Properly size images, implement Responsive Images.&lt;/li&gt;
&lt;li&gt;Efficiently encode images, balance out quality levels.&lt;/li&gt;
&lt;li&gt;Serve images in next-gen formats, use webp where possible.&lt;/li&gt;
&lt;li&gt;Use video formats for animated content, convert GIFs to video formats.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Note, these can be seen in your complete Lighthouse report JSON under the “load-opportunities” key, with zero weights. This means these image issues do not directly affect your performance score calculations. However, they do leverage all five components of the Performance Score.&lt;/p&gt;

&lt;p&gt;So, the idea is that by optimizing images and their delivery, we can improve all five Performance Score components. Now, let’s proceed to our findings.&lt;/p&gt;
&lt;h3&gt;
  
  
  Here’s what we found out
&lt;/h3&gt;

&lt;p&gt;After analyzing the main pages for over 500 of the leading websites out there, we ended up with the following averages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Image count: &lt;strong&gt;43&lt;/strong&gt; on desktop and &lt;strong&gt;23&lt;/strong&gt; on mobile.&lt;/li&gt;
&lt;li&gt;Page weight: &lt;strong&gt;3.64&lt;/strong&gt; MB for desktop and &lt;strong&gt;2.69&lt;/strong&gt; MB for mobile.&lt;/li&gt;
&lt;li&gt;Image content weight: &lt;strong&gt;1.40&lt;/strong&gt; / &lt;strong&gt;0.74&lt;/strong&gt; MB, which results in &lt;strong&gt;33&lt;/strong&gt; / &lt;strong&gt;32&lt;/strong&gt; KB per image.&lt;/li&gt;
&lt;li&gt;Page load time: &lt;strong&gt;7.6&lt;/strong&gt; seconds on broadband (10Mb/s) and &lt;strong&gt;13.92&lt;/strong&gt; seconds on slow 4G (1.5 Mb/s).&lt;/li&gt;
&lt;li&gt;Lighthouse Performance Score (normalized on a scale from zero to one): &lt;strong&gt;64&lt;/strong&gt; on desktop and &lt;strong&gt;48&lt;/strong&gt; on mobile.&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%2Fucarecdn.com%2Fc0a57cff-82f0-428e-b6ac-905c2033fe75%2Faverage_numbers.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%2Fucarecdn.com%2Fc0a57cff-82f0-428e-b6ac-905c2033fe75%2Faverage_numbers.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s interesting to note that among the most performant sites on our list were the obvious candidates like &lt;a href="http://google.cn/" rel="noopener noreferrer"&gt;google.cn&lt;/a&gt; and &lt;a href="http://wikipedia.org/" rel="noopener noreferrer"&gt;wikipedia.org&lt;/a&gt; along with less obvious ones like &lt;a href="http://wordreference.com" rel="noopener noreferrer"&gt;wordreference.com&lt;/a&gt; and &lt;a href="http://ikea.com/" rel="noopener noreferrer"&gt;ikea.com&lt;/a&gt;. On the “sluggish” end were &lt;a href="http://usatoday.com/" rel="noopener noreferrer"&gt;usatoday.com&lt;/a&gt;, &lt;a href="http://kaskus.co.id/" rel="noopener noreferrer"&gt;kaskus.co.id&lt;/a&gt;, and &lt;a href="http://deviantart.com" rel="noopener noreferrer"&gt;deviantart.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://docs.google.com/spreadsheets/d/1K1qUIPCm2ZOxwCW52Zu5oLo5p9r8xydEh5h97HF3eyU/edit?usp=sharing" rel="noopener noreferrer"&gt;&lt;em&gt;Here&lt;/em&gt;&lt;/a&gt; &lt;em&gt;is the raw data we collected and used to analyze the performance of the world’s top500 sites. We highlighted the rows of the websites we couldn’t collect data for: one of the two analyzers failed, etc.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;So, where’s the room for improvement?&lt;/p&gt;

&lt;p&gt;Let’s take a look at the insights derived from Lighthouse reports for &lt;strong&gt;desktop&lt;/strong&gt; / &lt;strong&gt;mobile&lt;/strong&gt; websites:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt; &lt;strong&gt;59&lt;/strong&gt; % &lt;strong&gt;/ 62&lt;/strong&gt; % require image format improvements.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;57&lt;/strong&gt; % &lt;strong&gt;/ 36&lt;/strong&gt; % have problems with responsive images.&lt;/li&gt;
&lt;li&gt; &lt;strong&gt;34&lt;/strong&gt; % &lt;strong&gt;/ 32&lt;/strong&gt; % have image weight issues.&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%2Fucarecdn.com%2Fe30dfda5-9bd7-4032-802b-6ad281c2c140%2Frequire_improvements.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%2Fucarecdn.com%2Fe30dfda5-9bd7-4032-802b-6ad281c2c140%2Frequire_improvements.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What can be achieved
&lt;/h3&gt;

&lt;p&gt;If we fix all the three types of issues, on average, we’ll:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Reduce image content weight by &lt;strong&gt;62&lt;/strong&gt; % on desktop and by &lt;strong&gt;66&lt;/strong&gt; % on mobile.&lt;/li&gt;
&lt;li&gt;Reduce page loading time by &lt;strong&gt;8&lt;/strong&gt; % / &lt;strong&gt;20&lt;/strong&gt; % respectively.&lt;/li&gt;
&lt;li&gt;Decrease the amount of bounced visitors by &lt;strong&gt;19&lt;/strong&gt; % / &lt;strong&gt;9&lt;/strong&gt; %.&lt;/li&gt;
&lt;li&gt;Increase the number of website pages viewed by a user during a single session by &lt;strong&gt;13&lt;/strong&gt; % / &lt;strong&gt;14&lt;/strong&gt; %.&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%2Fucarecdn.com%2Faaca02ba-1d95-4d65-b1f3-c795cffdf3ef%2Faverage_savings.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%2Fucarecdn.com%2Faaca02ba-1d95-4d65-b1f3-c795cffdf3ef%2Faverage_savings.png"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  What about the actual Performance Score?
&lt;/h3&gt;

&lt;p&gt;We can predict the impact.&lt;/p&gt;

&lt;p&gt;Since Google provides its &lt;a href="https://docs.google.com/spreadsheets/d/1Cxzhy5ecqJCucdf1M0iOzM8mIxNc7mmx107o5nj38Eo/edit#gid=283330180" rel="noopener noreferrer"&gt;performance score calculator&lt;/a&gt;, the only thing left is understanding what the new FCP, FMP, SI, CPU, and TTI will be.&lt;/p&gt;

&lt;p&gt;Thanks to Lighthouse, we know the parameter values for the analyzed set of sites. All five components of the performance score are expressed in seconds.&lt;/p&gt;

&lt;p&gt;Current state:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First Contentful Paint — &lt;strong&gt;1.68&lt;/strong&gt; / &lt;strong&gt;4.05&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;First Meaningful Paint — &lt;strong&gt;1.78&lt;/strong&gt; / &lt;strong&gt;4.38&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Speed Index — &lt;strong&gt;2.90&lt;/strong&gt; / &lt;strong&gt;7.54&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;First CPU Idle — &lt;strong&gt;2.62&lt;/strong&gt; / &lt;strong&gt;7.67&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Time to Interactive — &lt;strong&gt;2.92&lt;/strong&gt; / &lt;strong&gt;10.10&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We also know:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The number of bytes saved by optimizing images&lt;/li&gt;
&lt;li&gt;The initial load time for every desktop and mobile main page version&lt;/li&gt;
&lt;li&gt;The number of seconds we can shed from the load time&lt;/li&gt;
&lt;li&gt;The percentage of load time improvement&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We assumed that if we proportionally decrease these metrics, we might come up with a reliable approximation.&lt;/p&gt;

&lt;p&gt;Forecasted results:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;First Contentful Paint — &lt;strong&gt;1.51&lt;/strong&gt; / &lt;strong&gt;3.52&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;First Meaningful Paint — &lt;strong&gt;1.60&lt;/strong&gt; / &lt;strong&gt;3.82&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Speed Index — &lt;strong&gt;2.64&lt;/strong&gt; / &lt;strong&gt;6.68&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;First CPU Idle — &lt;strong&gt;2.39&lt;/strong&gt; / &lt;strong&gt;6.93&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Time to Interactive — &lt;strong&gt;2.67&lt;/strong&gt; / &lt;strong&gt;9.11&lt;/strong&gt;
&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%2Fucarecdn.com%2F8cf075f3-7bcc-42a9-bc6d-aa406e1e751c%2Fperformancemetrics.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%2Fucarecdn.com%2F8cf075f3-7bcc-42a9-bc6d-aa406e1e751c%2Fperformancemetrics.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Given that, the average optimized Performance Score for the world’s top 500 websites will improve by 4 points for desktop and 7 for mobile, and up to 25 / 33 for the worst performing 10%.&lt;/strong&gt;&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%2Fucarecdn.com%2F38c4b09e-e742-4bbc-8412-053a4694281e%2Fperformancescoreforecast.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%2Fucarecdn.com%2F38c4b09e-e742-4bbc-8412-053a4694281e%2Fperformancescoreforecast.png"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We can’t tell how exactly the improved Performance Score will affect SERP positions for the analyzed websites (nobody can, Google included). The fact is that maximizing the score provides increased chances to get higher rankings.&lt;/p&gt;

&lt;p&gt;When accelerating the site, we also improve the user experience along the way. We can then expect that decreasing the number of bounced visitors and increasing page views directly affects conversion rates for the top of the analyzed sites’ funnels.&lt;/p&gt;

&lt;p&gt;Image optimization is one of the easiest and quickest proven ways to get there. And, where even the world’s top 500 websites have room for improvement, get in the lead.&lt;/p&gt;

&lt;p&gt;This is the low-hanging fruit. It may seems complicated, but you can quickly implement the optimizations with the right tools.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analyze your website with&lt;/strong&gt;&lt;a href="https://pagedetox.com/?utm_source=devto&amp;amp;utm_content=performancescore" rel="noopener noreferrer"&gt; &lt;strong&gt;PageDetox&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;to get started.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then get rid of every issue and improve scores by using webp images, compressed images, and responsive images:&lt;/p&gt;


&lt;div class="ltag__link"&gt;
  &lt;a href="/rsedykh" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__pic"&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%2Fuser%2Fprofile_image%2F131549%2F428c7990-9286-4c50-9a2e-b82cd062c5f5.jpg" alt="rsedykh"&gt;
    &lt;/div&gt;
  &lt;/a&gt;
  &lt;a href="/rsedykh/key-image-optimizations-to-maximize-your-google-pagespeed-score-a-guide-by-pagedetox-2hfp" class="ltag__link__link"&gt;
    &lt;div class="ltag__link__content"&gt;
      &lt;h2&gt;Optimizing images on autopilot with Uploadcare (to improve page load speed)&lt;/h2&gt;
      &lt;h3&gt;Roman Sedykh ・ Feb 15 '19&lt;/h3&gt;
      &lt;div class="ltag__link__taglist"&gt;
        &lt;span class="ltag__link__tag"&gt;#imageoptimization&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#pagespeed&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#beginners&lt;/span&gt;
        &lt;span class="ltag__link__tag"&gt;#webperf&lt;/span&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/a&gt;
&lt;/div&gt;


</description>
      <category>imageoptimization</category>
      <category>research</category>
      <category>pagespeed</category>
      <category>webperf</category>
    </item>
    <item>
      <title>Optimizing images on autopilot with Uploadcare (to improve page load speed)</title>
      <dc:creator>Roman Sedykh</dc:creator>
      <pubDate>Fri, 15 Feb 2019 14:01:18 +0000</pubDate>
      <link>https://forem.com/rsedykh/key-image-optimizations-to-maximize-your-google-pagespeed-score-a-guide-by-pagedetox-2hfp</link>
      <guid>https://forem.com/rsedykh/key-image-optimizations-to-maximize-your-google-pagespeed-score-a-guide-by-pagedetox-2hfp</guid>
      <description>&lt;p&gt;&lt;strong&gt;Summary: a step-by-step guide on optimizing images with CDN’s URL directives to get rid of Google PageSpeed image related issues.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;When you analyze a website with &lt;a href="https://developers.google.com/speed/pagespeed/insights/"&gt;Google PageSpeed Insights&lt;/a&gt;, it often&lt;br&gt;
points out several image issues to fix:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Next-generation formats&lt;/li&gt;
&lt;li&gt;Image size&lt;/li&gt;
&lt;li&gt;Responsiveness&lt;/li&gt;
&lt;li&gt;Lazy loading&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We analyzed 10k of our users’ websites and found out that:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Only a tiny percentage of users implements next-generation image formats, which alone can lead to a file size drop of 25–34% (source: &lt;a href="https://developers.google.com/speed/webp/docs/webp_study"&gt;Google&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Almost every compressed image can be further downsized without any significant loss in visual quality.&lt;/li&gt;
&lt;li&gt;The problem is often about a few huge images; fixing those dramatically improves loading time.&lt;/li&gt;
&lt;li&gt;Often there is no lazy loading (when images are only loaded when they’ll be scrolled to soon).&lt;/li&gt;
&lt;li&gt;Many analyzed websites provide either no or poor Responsive Images experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Eliminating the issues will increase page loading speed, decrease bounce rate, and improve the user experience.&lt;/p&gt;

&lt;p&gt;Resolving those is frustrating if you don’t know exactly what to do. Here is an ultimate guide on optimizing images in &lt;strong&gt;three steps&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; &lt;em&gt;Optimize Size &amp;amp; Format&lt;/em&gt; — get rid of excess image weight at no significant loss in visual quality.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;Use Responsive Images&lt;/em&gt; — serve appropriate images to every device and screen.&lt;/li&gt;
&lt;li&gt; &lt;em&gt;Add Lazy Loading&lt;/em&gt; — load only those images users are looking at.&lt;/li&gt;
&lt;/ol&gt;


&lt;h2&gt;
  
  
  Short version of the guide
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;code&gt;srcset&lt;/code&gt; instead of &lt;code&gt;src&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Create versions of images with CDN's URL directives.&lt;/li&gt;
&lt;/ul&gt;


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


&lt;p&gt;Aaand add lazy loading. Profit, you've won Google PageSpeed images score. :-)&lt;/p&gt;




&lt;h2&gt;
  
  
  Full version
&lt;/h2&gt;

&lt;p&gt;You’ll need a tool allowing you to manipulate images in real time, Image CDNs do this job well. In our examples, we’ll use &lt;a href="https://uploadcare.com/docs/image_transformations/?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;Uploadcare Image Transformations&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This step is technology agnostic: you can use &lt;a href="https://docs.google.com/spreadsheets/d/1e4qdGEoq7tqDCnY7iSSnl3OFoWkzhRfVAly-73A3uCc/edit"&gt;other tools&lt;/a&gt; to manipulate images.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Once you upload files (for test purposes you can do it manually, no need to code), they get cached by a CDN, which alone improves image load speed. The files will now have their permalinks starting with &lt;code&gt;https://ucarecdn.com/&lt;/code&gt; followed by their UUIDs.&lt;/p&gt;

&lt;p&gt;From there, you manipulate images by changing their URLs: include Image Transformations as URL directives:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ucarecdn.com/{FILE-UUID}/-/{DIRECTIVES}/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;Let’s move on to optimizing images.&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 1. Size &amp;amp; Format
&lt;/h3&gt;
&lt;h4&gt;
  
  
  1.1. Next-gen formats — saves ≈25-34%
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;-/format/:format/&lt;/code&gt;&lt;br&gt;
&lt;code&gt;:format&lt;/code&gt;: &lt;code&gt;jepg&lt;/code&gt;, &lt;code&gt;png&lt;/code&gt;, &lt;code&gt;webp&lt;/code&gt;, &lt;code&gt;auto&lt;/code&gt;&lt;br&gt;
&lt;a href="https://uploadcare.com/docs/image_transformations/compression_performance/#operation-format?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;docs / image format&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;WebP is a new image format for the web with superior compression, developed by Google. Use the &lt;code&gt;auto&lt;/code&gt; value to deliver WebP images to user &lt;a href="https://caniuse.com/#feat=webp"&gt;browsers that support the format&lt;/a&gt;. Since WebP is not everywhere, it is a good practice to specify the &lt;code&gt;jpeg&lt;/code&gt; or &lt;code&gt;png&lt;/code&gt; format as a fallback.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--SmAncGJI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/0347f607-eff1-4ac7-adac-8ed703094e2d/11.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--SmAncGJI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/0347f607-eff1-4ac7-adac-8ed703094e2d/11.png" alt="" width="800" height="249"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  1.2. Quality — saves up to ≈50%
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;-/quality/:value/&lt;/code&gt; &lt;br&gt;
&lt;code&gt;:value&lt;/code&gt;: &lt;code&gt;lightest&lt;/code&gt;, &lt;code&gt;lighter&lt;/code&gt;, &lt;code&gt;normal&lt;/code&gt;, &lt;code&gt;better&lt;/code&gt;, &lt;code&gt;best&lt;/code&gt;&lt;br&gt;
&lt;a href="https://uploadcare.com/docs/image_transformations/compression_performance/#operation-quality?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;docs / image quality&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;With Uploadcare, you use quality presets. Use &lt;code&gt;lightest&lt;/code&gt; (≈50% file size) for retina resolutions, when you don’t have to worry about the quality of individual pixels and &lt;code&gt;lighter&lt;/code&gt; (≈80% file size) for every other occasion.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--5oOdjVRf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/eb632d22-abd6-4604-97c2-66b31209f1ee/12.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--5oOdjVRf--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/eb632d22-abd6-4604-97c2-66b31209f1ee/12.png" alt="" width="800" height="351"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  1.3. ICC profile size threshold (image meta) — can save up to ≈1 MB for some images
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;-/max_icc_size/:number/&lt;/code&gt;&lt;br&gt;
&lt;code&gt;:number&lt;/code&gt;: the maximum allowed ICC profile size in kilobytes&lt;br&gt;
&lt;a href="https://uploadcare.com/docs/image_transformations/compression_performance/#operation-max_icc_size?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;docs / ICC profile size&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;ICC profiles define how image colors should be displayed on your screen. The profiles can add up weight to your images, so you can reduce their size by getting rid of excessive ICC profiles. We recommend setting the limit to 10 KB (10240 bytes). Most of the common profiles (sRGB, Display P3, ProPhoto, Adobe RGB, Apple RGB) sit under the threshold.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--wG2hAYTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/c0fae55b-25fd-4183-9105-f408846eaad3/13.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--wG2hAYTj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/c0fae55b-25fd-4183-9105-f408846eaad3/13.png" alt="" width="800" height="580"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  Let’s check out the combined impact of those optimizations
&lt;/h4&gt;

&lt;p&gt;A. &lt;a href="https://ucarecdn.com/c4bd2b28-e3de-4731-a2e3-2bdbf044be47/"&gt;Original&lt;/a&gt;, &lt;strong&gt;539&lt;/strong&gt; kb:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ucarecdn.com/c4bd2b28-e3de-4731-a2e3-2bdbf044be47/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;B. &lt;code&gt;lighter&lt;/code&gt; &lt;a href="https://ucarecdn.com/c4bd2b28-e3de-4731-a2e3-2bdbf044be47/-/format/auto/-/quality/lighter/-/progressive/yes/-/max_icc_size/10/"&gt;version&lt;/a&gt;, &lt;strong&gt;291&lt;/strong&gt; kb, no significant visual difference — &lt;strong&gt;saved&lt;br&gt;
46&lt;/strong&gt; %:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ucarecdn.com/c4bd2b28-e3de-4731-a2e3-2bdbf044be47/-/format/auto/-/quality/lighter/-/progressive/yes/-/max_icc_size/10/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;C. &lt;code&gt;lightest&lt;/code&gt; &lt;a href="https://ucarecdn.com/c4bd2b28-e3de-4731-a2e3-2bdbf044be47/-/format/auto/-/quality/lightest/-/progressive/yes/-/max_icc_size/10/"&gt;version&lt;/a&gt;, &lt;strong&gt;149&lt;/strong&gt; kb, visible difference in quality — &lt;strong&gt;saved&lt;br&gt;
72&lt;/strong&gt; %:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://ucarecdn.com/c4bd2b28-e3de-4731-a2e3-2bdbf044be47/-/format/auto/-/quality/lightest/-/progressive/yes/-/max_icc_size/10/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--igL0mSge--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/7e616a22-ec4e-438c-b694-8ccbb12e127e/1example.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--igL0mSge--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/7e616a22-ec4e-438c-b694-8ccbb12e127e/1example.png" alt="" width="800" height="264"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Step 2. Resizing, Cropping &amp;amp; Responsive Images
&lt;/h3&gt;
&lt;h4&gt;
  
  
  2.1. Resize, a key to Responsive Images
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;-/preview/:two_dimensions/&lt;/code&gt;&lt;br&gt;
&lt;code&gt;:two_dimensions&lt;/code&gt;: e.g. &lt;code&gt;300x300&lt;/code&gt;, &lt;code&gt;300x&lt;/code&gt;, &lt;code&gt;x300&lt;/code&gt;&lt;br&gt;
&lt;a href="https://uploadcare.com/docs/image_transformations/resize_crop/#operation-preview?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;docs / resize image proportionally&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Reduces an image proportionally to fit into the given dimensions in pixels while preserving the original aspect ratio. Resizing images is a go-to for saving bandwidth.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--EDrFy0PC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/28b53ad6-b7d4-4176-be57-e94f074a2603/21.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--EDrFy0PC--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/28b53ad6-b7d4-4176-be57-e94f074a2603/21.png" alt="" width="800" height="298"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2.2. Scale crop
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;-/scale_crop/:two_dimensions/&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-/scale_crop/:two_dimensions/center/&lt;/code&gt;&lt;br&gt;
&lt;a href="https://uploadcare.com/docs/image_transformations/resize_crop/#operation-&amp;lt;br&amp;gt;%0Ascale-crop?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;docs / scale crop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The next important aspect of Responsive Images is cropping originals to provide a better mobile screen fit. It is a good fit for mobile experiences. It scales down an image until one of its dimensions gets equal to some of the specified ones; the rest is cropped. This proves useful when you want to fit as much of your image as possible into a box, “center” it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--lp5bWbbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/e321de1c-bddd-4838-8fd7-00d9f4fbef92/22.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--lp5bWbbR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/e321de1c-bddd-4838-8fd7-00d9f4fbef92/22.png" alt="" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  2.3. Crop
&lt;/h4&gt;

&lt;p&gt;&lt;code&gt;-/crop/:two_dimensions/:two_coords/&lt;/code&gt;&lt;br&gt;
&lt;code&gt;-/crop/:two_dimensions/center/&lt;/code&gt;&lt;br&gt;
&lt;a href="https://uploadcare.com/docs/image_transformations/resize_crop/#operation-crop?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;docs / crop&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Crops an image using specified dimensions and offsets. Great for art direction.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--m-SKNfzr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/1d722887-178b-4f5d-bab5-1c58cb9fa493/23.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--m-SKNfzr--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://ucarecdn.com/1d722887-178b-4f5d-bab5-1c58cb9fa493/23.png" alt="" width="800" height="207"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h4&gt;
  
  
  &lt;strong&gt;Let’s make a responsive image&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;In the template below, we tell a user’s browser about what images and sizes are available to display on a user device.&lt;/p&gt;


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



&lt;p&gt;We also added breakpoints (min/max-width) to switch between appropriate sizes. The browser then does all the work figuring out which image suits the device best.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;To become a pro in responsiveness, check out &lt;a href="https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images"&gt;MDN web docs&lt;/a&gt; and our course &lt;a href="http://academy.pagedetox.com/?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;Introduction to Responsive Images&lt;/a&gt; and learn more about why it matters: performance, art direction, WebP, and breakpoints.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  Lazy loading
&lt;/h3&gt;

&lt;p&gt;Lazy loading is not an image property. It has to deal with adding some JavaScript code; you can find implementations of lazy loading for different JavaScript frameworks on GitHub:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/search?o=desc&amp;amp;q=lazy+load&amp;amp;s=stars&amp;amp;type=Repositories"&gt;Vanilla JS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/search?o=desc&amp;amp;q=lazy+load+react&amp;amp;s=stars&amp;amp;type=Repositories"&gt;React&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/search?o=desc&amp;amp;q=lazy+load+vue&amp;amp;s=stars&amp;amp;type=Repositories"&gt;Vue&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://github.com/search?o=desc&amp;amp;q=lazy+load+angular&amp;amp;s=stars&amp;amp;type=Repositories"&gt;Angular&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Still, there are a few tricks to improve the lazy loading experience on your page:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use &lt;a href="https://uploadcare.com/docs/image_transformations/compression_performance/#operation-progressive?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;progressive jpegs&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Load very light &lt;a href="https://uploadcare.com/docs/image_transformations/filters/#operation-blur?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;blurred&lt;/a&gt; instance of an image before the original.&lt;/li&gt;
&lt;li&gt;Or &lt;a href="https://uploadcare.com/docs/image_transformations/color_recognition/?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;extract the major color&lt;/a&gt; and show it until a picture gets loaded.&lt;/li&gt;
&lt;li&gt;Use this color with &lt;a href="https://uploadcare.com/docs/image_transformations/resize_crop/#operation-setfill?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;setfill&lt;/a&gt; and &lt;a href="https://uploadcare.com/docs/image_transformations/resize_crop/#operation-stretch?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;stretch&lt;/a&gt; transformations.&lt;/li&gt;
&lt;li&gt;Play with &lt;a href="https://uploadcare.com/docs/image_transformations/face_recognition/?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;face recognition&lt;/a&gt; and &lt;a href="https://uploadcare.com/docs/image_transformations/object_recognition/?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;object recognition&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Conclusion
&lt;/h3&gt;

&lt;p&gt;At the end of the day, here’s what you need to do to win at Google PageSpeed image score:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Run a &lt;a href="https://pagedetox.com?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;PageDetox&lt;/a&gt; report to see how images affect your website load times.&lt;/li&gt;
&lt;li&gt;Pick an image CDN that manipulates images on the fly, like &lt;a href="https://uploadcare.com?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;Uploadcare&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Get your image assets there.&lt;/li&gt;
&lt;li&gt;In your &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; elements, replace &lt;code&gt;src&lt;/code&gt; with &lt;code&gt;srcset&lt;/code&gt; holding image versions generated by your image CDN.&lt;/li&gt;
&lt;li&gt;Implement lazy loading.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We believe that the only thing you should be doing is uploading a single hi-res image. The image handling service then handles the rest: picks breakpoints, optimizes images for the best results, and sticks proper snippets into your code. We're working on it!&lt;/p&gt;

&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;h4&gt;
  
  
  What if I don’t want to upload files to Uploadcare / another CDN?
&lt;/h4&gt;

&lt;p&gt;It’s common that your images are already sitting somewhere, and you don’t want to re-upload them to an image CDN.&lt;/p&gt;

&lt;p&gt;In this case, check out Image Proxy options like &lt;a href="https://uploadcare.com/docs/image_transformations/proxy/?utm_source=devto&amp;amp;utm_content=imageoptimizationguide"&gt;Upload-Free Image Processing&lt;/a&gt;. It fetches your content, optimizes and delivers it to your users via Image CDN.&lt;/p&gt;

&lt;h4&gt;
  
  
  What about Client Hints?
&lt;/h4&gt;

&lt;p&gt;They don’t work for everybody right now, even in Google Chrome. Changes in the desktop version of Chrome 67 have removed support for cross-origin client hints.&lt;/p&gt;

</description>
      <category>imageoptimization</category>
      <category>pagespeed</category>
      <category>beginners</category>
      <category>webperf</category>
    </item>
    <item>
      <title>Building an image optimization tool to win the PageSpeed game on autopilot</title>
      <dc:creator>Roman Sedykh</dc:creator>
      <pubDate>Mon, 28 Jan 2019 17:43:10 +0000</pubDate>
      <link>https://forem.com/rsedykh/building-an-image-optimization-tool-to-win-the-pagespeed-game-on-autopilot-1cfj</link>
      <guid>https://forem.com/rsedykh/building-an-image-optimization-tool-to-win-the-pagespeed-game-on-autopilot-1cfj</guid>
      <description>&lt;p&gt;Hi dev.to!&lt;/p&gt;

&lt;p&gt;We’re building an image optimization tool called &lt;a href="https://pagedetox.com?utm_source=dev.to"&gt;PageDetox&lt;/a&gt;. Its purpose is helping to win the Google PageSpeed game.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I want to ask you for URLs to analyze and provide you with optimization instructions to raise your image score up to a 💯.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How does the tool work?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;You analyze a page on autopilot, request a report&lt;/li&gt;
&lt;li&gt;We provide the report together with a personalized workflow for optimizing images&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The analyzer is there and ready, while the step-by-step optimization part is work in progress.&lt;/p&gt;

&lt;p&gt;Here’s the instruction design we want to start with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Upload files to an Image CDN &lt;em&gt;(since we're with &lt;a href="https://uploadcare.com?utm_source=dev.to"&gt;Uploadcare&lt;/a&gt;, we stick with using that service; if you're a fan of other solutions, pick your favorite. Uploadcare provides a CDN URL that allows applying Image Transformations on the fly, we make use of it)&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;Get those CDN URLs&lt;/li&gt;
&lt;li&gt;Replace the &lt;code&gt;src&lt;/code&gt; attribute in &lt;code&gt;&amp;lt;img&amp;gt;&lt;/code&gt; with &lt;code&gt;srcset&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Make each version of a source image with on-the-fly transformations taking analyses results into consideration&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check an example below ⬇️&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;So, shoot me your page URL in the comments. I’ll be supervising each set of instructions and ask what was unclear/going wrong, a custdev kind of thing.&lt;/p&gt;

&lt;p&gt;If you’ll have any feedback regarding the app’s flow, I’d appreciate you sharing it.&lt;/p&gt;

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

</description>
      <category>showdev</category>
      <category>custdev</category>
      <category>pagespeed</category>
      <category>imageoptimization</category>
    </item>
  </channel>
</rss>
