Product Management 7 min read

Why A's Over‑Engineered Fruit Ordering System Lost to B's Simpler Approach

A's fruit‑ordering platform kept adding tags, preferences, and fallback strategies to please every user, but the growing complexity made it hard to configure and debug, ultimately driving customers back to B's straightforward manual ordering system.

macrozheng
macrozheng
macrozheng
Why A's Over‑Engineered Fruit Ordering System Lost to B's Simpler Approach

Two fruit‑selling companies, A and B, initially offered only apples and oranges and each built a simple online ordering system for customers.

To compete, A revamped its UI and added an "intelligent ordering" feature that analyzed a user’s purchase history. The original logic was naïve: it counted how many apples versus oranges a user bought and assumed the fruit with the higher quantity was the user’s favorite, then automatically ordered that fruit.

As the catalog expanded to include bananas and user needs diversified—some users wanted a balanced diet or to try less‑frequent fruits—the simple quantity‑based rule became insufficient, and many customers drifted to B’s clearer system.

A responded by introducing a tagging mechanism: users could mark a fruit as Like or Dislike . The system would prioritize fruits marked Like ; if none were marked, it fell back to the fruit with the highest past purchase count, and if that fruit was marked Dislike , it would choose the second‑most‑purchased fruit.

Bug reports revealed that users sometimes forgot they had previously liked another fruit, causing the system to order the wrong item. A fixed this by automatically removing the old Like tag when a new fruit was liked, then refined the logic further so the previous liked fruit became a "previously liked" tag that could be restored if the new like was removed.

Some users wanted multiple liked fruits to be ordered together. A added a configuration option letting users decide whether a new Like should delete the old one, keep it, or convert the old one to the "previously liked" state.

To accommodate even more preferences, A introduced a suite of configurable strategies—primary, secondary, and fallback policies—including random selection, round‑robin, or error prompting when no conditions were met.

Despite these enhancements, the system grew increasingly complex. New users faced a steep learning curve to configure the many options, and developers struggled to trace why a particular fruit was recommended. Consequently, many customers switched back to B’s manual ordering process, which required no configuration but worked reliably.

User Experiencerecommendation systemconfigurationProduct Managementfeature design
macrozheng
Written by

macrozheng

Dedicated to Java tech sharing and dissecting top open-source projects. Topics include Spring Boot, Spring Cloud, Docker, Kubernetes and more. Author’s GitHub project “mall” has 50K+ stars.

0 followers
Reader feedback

How this landed with the community

login Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.