Do not be aggressive with the difference between size changes, spend time testing the minimum size needed when unsure.
Performance
Keep in mind when changing the default sizes of image outputs there will be a decrease in website performance, and an increase in customers bandwidth usage by serving larger images. Remember 1 image very rarely exists in isolation so this is compounded by EVERY product shown on a page using such a change.
For templates that display ALOT of product images extra effort should be spent prioritizing which products are allow to server bigger images.
Responsive image sizes
Per @SpotterJ 's fix ,
To avoid edge cases of pixelation with responsize images make sure to to check that the featured_media.width is of a minimum size or the exact size value used with img_url.
The shopify cdn will not increase an images file size but this may not stop oddities with a theme frontend code, browsers quirks behavior, or the CDN’s cropping behavior.
So cut it off from the start to avoid inverting the situation where instead of blurry image a store now has an edge case of pixelated images because the master image is too small and interpreted wrong. Or your just plain not getting the image size you expect while developing. This will be more apparent the larger the delta between the size change i.e. forcing 1000px width on a 600px image, or 1440px when the image is only 1000px, and a theme tries to display it at an inappropriate larger width.
Examples
Taking the original 165,
{%- if product_card_product.featured_media.width >= 165 -%}{{ product_card_product.featured_media | img_url: '165x' }} 165w,{%- endif -%}
If you want a 360px wide image for screensizes of 165w and lower.
Check that the images actual width is suitable, this can become a bigger and bigger problem as you escalate through images sizes with bigger relative sizes.
{%- if product_card_product.featured_media.width >= 360-%}{{ product_card_product.featured_media | img_url: ‘360x’ }} 165w,{%- endif -%}
Yes it can be kinda rare for products to have such a small original image size but you want to stop 1 set of edge cases from being able to create more edge cases.
Avoid vastly different values where the images actual size could be hundreds of px smaller than the images original size.
So asking for a 1440px when an images max original size is 1200px:
{%- if product_card_product.featured_media.width >= 1066 -%}{{ product_card_product.featured_media | img_url: ‘1440x’ }} 1066w,{%- endif -%}
Will output an image that is only 1200px wide potentially leading to an edge case image pixelation issues in a theme.
Fix the minimum to either exact size needed or be within a reasonable distance so 1440 ~ 1400 ,etc
{%- if product_card_product.featured_media.width >= 1440 -%}{{ product_card_product.featured_media | img_url: ‘1440x’ }} 1066w,{%- endif -%}
Technical notes - the initial code in Dawn for the width condition size , img_url size and viewport width size all use the same value making developer maintenance easier , because creating values for something like srcset is currently clunky for liquid to handle logically and not easy to do it in a way that’s also highly configurable.
There’s also the option of using Resolution switching, i.e. retina devices https://developer.mozilla.org/en-US/docs/Learn/HTML/Multimedia_and_embedding/Responsive_images#resolution_switching_same_size_different_resolutions where using vastly different image size is expected.