Iterative Shipping vs Desired State

Why solving buyer frustrations through iterative shipping often beats waiting for perfect solutions.

Profile photo

by Mark MurrayDecember 18, 20244 min read

Balancing Desired State and Iterative Shipping

In software engineering, we constantly face the tension between shipping a product that represents the desired state and releasing iterative updates. Both approaches have their merits, but focusing on solving buyer frustrations, I believe an iterative approach is often the most effective route to long-term success. Let’s explore why, while also considering the counterpoints that may make a desired-state approach appealing.

Solving Buyer Frustrations First

At its core, our mission as software engineers is to deliver value to our users. Buyers often face immediate frustrations: an unintuitive interface, slow response times, or confusing user experiences which occur in fringe but common scenarios. Addressing these pain points incrementally ensures users are never blocked, reinforcing their confidence in the product and our responsiveness.

An iterative approach also allows for continuous feedback. By shipping smaller updates that tackle specific frustrations, we create a feedback loop that helps us validate our solutions in real-world conditions. This process minimizes the risk of investing months—or even years—in developing “perfect” solutions which fail to meet actual user needs when finally materialised.

The Pitfalls of Shipping Desired State

While the allure of delivering a fully formed, desired-state product is strong, the risks are significant. First, defining what constitutes a "desired state" is inherently speculative. Even the most carefully conducted research and design workshops cannot fully account for how users will react once a product is live.

Aiming to deliver a polished, feature-complete solution often leads to longer development cycles, during which buyer frustrations persist unaddressed. In fast-moving markets, this can result in losing users to competitors who are quicker to resolve these pain points. Worse still, a prolonged development timeline can amplify the gap between evolving user needs and the state of the shipped product.

Advantages of Iterative Development

Iterative shipping enables us to adapt to changing circumstances. Buyer frustrations evolve as markets shift, competitors innovate, and customer priorities change. Regular updates allow us to keep pace, aligning the product closer to user needs over time.

From an engineering perspective, breaking work into smaller, incremental pieces reduces complexity. Smaller changes are easier to test, review, and deploy, minimizing the risk of introducing critical bugs. Furthermore, a modular, iterative approach enables the team to pivot more effectively if initial assumptions prove incorrect.

Challenges and Considerations of Iterative Shipping

Critics of iterative shipping often cite concerns about user experience fragmentation. Incremental updates may lead to inconsistencies or half-baked features that confuse users. While this is a valid concern, it can be mitigated through strong design principles, clear communication of updates, and prioritization of features that deliver immediate value without undermining the product’s coherence.

Another argument against iterative shipping is that it can create technical debt. Rapid updates might prioritize speed over maintainability, leading to long-term challenges. However, this risk can be managed with disciplined engineering practices—including robust code reviews, automated testing, and continuous refactoring—that ensure quality is not sacrificed for velocity.

Frequent updates can also overwhelm users. A barrage of small, incremental changes may require users to repeatedly adapt, leading to frustration rather than satisfaction. This can be addressed by bundling related updates into cohesive releases, providing users with a more seamless experience while maintaining the benefits of iteration.

When Desired State Shipping is Necessary

Some scenarios demand a more comprehensive desired-state approach. Safety-critical software, enterprise-level solutions, or products governed by stringent regulatory requirements may need to launch in a near-complete state due to the high cost of failure. In such cases, the desired state serves as a foundation for reliability and compliance that iterative updates might not immediately deliver.

Additionally, in markets where competitors release polished, feature-rich products, an iterative approach may give the impression of incompleteness. To counter this, iterative development should be paired with clear communication and visible progress toward the desired state, ensuring users and stakeholders understand the long-term vision.

Striking the Right Balance

The ideal approach often lies somewhere in the middle. A desired state can serve as a guiding north star, providing clarity and direction for the team. However, breaking that vision into iterative milestones—each focused on solving a specific buyer frustration—ensures progress without stagnation.

By adopting an iterative mindset, we not only demonstrate empathy for our users but also create a sustainable development process that allows us to learn, adapt, and improve over time. The desired state is not a static endpoint but an evolving target that reflects the ever-changing needs of our users.

In the end, our success is measured not by how perfectly we execute our initial vision but by how effectively we solve the real-world problems of our buyers. By prioritizing iterative shipping, we make progress visible, actionable, and impactful—one step at a time.

Copyright © Mark Murray, 2025