<?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: Flownato</title>
    <description>The latest articles on DEV Community by Flownato (flownato).</description>
    <link>https://dev.to/flownato</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.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F14545%2Fc9033e5e-16af-4b20-a3fd-2fae52412c9d.png</url>
      <title>DEV Community: Flownato</title>
      <link>https://dev.to/flownato</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/flownato"/>
    <language>en</language>
    <item>
      <title>Quantity stepper UX: the number needs context</title>
      <dc:creator>Arpit Sharma</dc:creator>
      <pubDate>Tue, 15 Sep 2026 19:25:44 +0000</pubDate>
      <link>https://dev.to/flownato/quantity-stepper-ux-zero-stock-limits-and-failed-updates-4emj</link>
      <guid>https://dev.to/flownato/quantity-stepper-ux-zero-stock-limits-and-failed-updates-4emj</guid>
      <description>&lt;p&gt;Tira’s shopping bag shows two products with a quantity of one. The free wipes get a small “Qty: 1” label. The face wash gets minus and plus buttons.&lt;/p&gt;

&lt;p&gt;Both numbers say the same thing. Only one is presented as something to edit.&lt;/p&gt;

&lt;p&gt;That detail is a useful starting point for quantity stepper UX. Before deciding how the buttons should look, decide what the number represents and what the customer can do with it. Three screens from Flownato’s reference library make that question concrete.&lt;/p&gt;

&lt;h2&gt;
  
  
  Tira: a quantity can be information
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy77h8vn950tnexy991sj.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fy77h8vn950tnexy991sj.webp" alt="Tira shopping bag showing a free wipes item with a plain Qty: 1 label and face wash with a minus, one, plus control." width="633" height="1440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The free item and the face wash use different quantity treatments in the same bag.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The wipes sit in a compact grey row, labelled “FREE,” with “Qty: 1” aligned to the right. There are no adjustment buttons in that row. Below it, the face wash has a much larger product area and an explicit minus–one–plus control beside its price.&lt;/p&gt;

&lt;p&gt;The distinction keeps the free item visible without presenting it as another thing to configure. The paid item gets the editing controls.&lt;/p&gt;

&lt;p&gt;I’d keep that distinction in a component library. A quantity field needs a display-only treatment as well as an editable one. Otherwise, a team can end up adding disabled buttons around a value simply because the component always renders them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Bigbasket: “1” and “1 kg” do different jobs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhmkz68r30o88vohm3590.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhmkz68r30o88vohm3590.webp" alt="Bigbasket basket showing a one-kilogram banana pack with a green minus, one, plus control, and recommendations with single plus buttons below." width="633" height="1440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The basket item has a count; the recommendations below it have an add action.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The banana row contains two measurements: “1 kg” beneath the product name and “1” inside the green stepper. The first describes the pack. The second sits between the controls for changing how many are in the basket.&lt;/p&gt;

&lt;p&gt;That separation matters. Put the weight inside the stepper and you can suggest that the customer is choosing a custom weight. Here, the pack size stays with the product details, while the count sits in its own control.&lt;/p&gt;

&lt;p&gt;There is another useful contrast lower down. The recommended coriander and carrots have single outlined plus buttons. They don’t show a zero between two controls. The basket item above has the full minus–count–plus treatment.&lt;/p&gt;

&lt;p&gt;The outlined plus offers an item to add. The filled green stepper marks the item already in the basket. Both use green, so the shape and the presence of a count do much of the work.&lt;/p&gt;

&lt;p&gt;For a grocery interface, I’d write the unit into the design spec alongside the component: packs, bottles or individual items. A bare integer is easy to misunderstand when the product also has a weight or volume.&lt;/p&gt;

&lt;h2&gt;
  
  
  Domino’s: the count sits beside the chosen variant
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd1flsocrv6iljvzgv1j5.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fd1flsocrv6iljvzgv1j5.webp" alt="Domino’s product card showing a quantity of one beside Medium and New Hand Tossed, with a separate View Cart action below." width="648" height="1440"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The quantity control belongs to the product card; “View Cart” is a separate action below.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The pizza card places its quantity control at the bottom right. To the left are the price and “Medium | New Hand Tossed,” followed by a chevron. Below the card, a separate navigation bar contains a bright “View Cart” button.&lt;/p&gt;

&lt;p&gt;The count has a clear local context: this pizza, in the configuration named beside it. The cart action has a different visual treatment and sits outside that card.&lt;/p&gt;

&lt;p&gt;The tradeoff is space. The product description above is truncated, while the price, variant and quantity occupy a compact strip. I’d protect the variant label when adapting this layout to a narrower screen. If that label disappears, the customer can still increase the number without seeing as clearly what they are increasing.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’d put in the handoff
&lt;/h2&gt;

&lt;p&gt;Alongside the component, I’d spell out its unit, whether the quantity is editable, and which product variant it changes. Those details are easy to lose when a control is copied out of a full screen and into a design system.&lt;/p&gt;

&lt;p&gt;Then I’d ask what happens at one when the customer presses minus. None of these captures demonstrates removal, an error or a stock limit. Those still need their own states in the design.&lt;/p&gt;

&lt;p&gt;These are captured app screens, so the observations describe the versions and states shown. We collect references like these in &lt;a href="https://www.flownato.com/patterns/elements/quantity-stepper-control-quantity-stepper" rel="noopener noreferrer"&gt;Flownato’s quantity-stepper collection&lt;/a&gt;. It has public previews, with the wider collection available through Premium.&lt;/p&gt;

</description>
      <category>ux</category>
      <category>webdev</category>
      <category>frontend</category>
      <category>design</category>
    </item>
  </channel>
</rss>
