Back to speaking and media

Product iteration article

DevTalks · Romania, 2026

592 Builds Later: Features That Survived (And the Ones That Didn't)

Shipping is only the beginning of product work. After hundreds of builds, the difficult skill is not adding another feature—it is reading evidence well enough to decide what deserves maintenance, what needs a different shape and what should disappear.

DevTalks 2026 conference artwork for Rusu Dinu-Ștefan

A build number is not a product outcome

A high release count proves that a team can deliver changes; it does not prove that those changes created value. Every feature adds code paths, states, support questions, analytics and future migration work. The compounding cost is easy to miss because it arrives gradually, long after the celebratory launch.

The useful question after a release is not whether the implementation worked as specified. It is whether user behaviour changed in the intended direction without creating a larger cost elsewhere. Adoption, repeated use, retention, support volume, reviews and operational load must be read together. No single dashboard number can make the decision alone.

Turn feedback into evidence

App-store reviews and support messages contain urgency and language analytics cannot provide, but they are not representative samples. A two-star review can expose a real failure mode without proving that every user shares it. Product judgment means locating the behaviour behind the comment, measuring its reach and understanding who is affected.

Before building, write down the expected change and the signal that would support it. After release, compare that expectation with observed behaviour and qualitative feedback. This simple discipline prevents a feature from surviving merely because removing it would feel like admitting that the original idea was wrong.

Keep, reshape or remove

A feature earns its place when users discover it, return to it and receive enough value to justify its ongoing complexity. Low discovery may call for clearer placement; discovery without repetition may reveal weak value; repeated use followed by complaints may point to reliability or usability. Those patterns require different responses.

Removal is a product capability, not a failure. It should be handled with the same care as launch: check dependencies, preserve important user data, communicate changes and watch for unintended effects. Sometimes the right answer is a smaller version that protects the core job while eliminating configuration and edge cases few people need.

Build a release loop that learns

Small, observable releases reduce the distance between a decision and what it teaches. Feature flags, staged rollouts, crash reporting, product analytics and support categorisation are valuable because they make learning safer. They also create a path back when the evidence contradicts the hypothesis.

The goal is not maximum release frequency. It is a repeatable loop in which each build has a reason, a measurable expectation and an explicit review point. After 592 builds, the durable advantage is not the accumulated feature list. It is the ability to change direction without losing user trust.

Three rules for the next release

  1. 01

    Define the expected user behaviour before implementation, then decide in advance when the result will be reviewed.

  2. 02

    Combine behavioural data with reviews and support context; treat each as incomplete evidence rather than a verdict.

  3. 03

    Budget for simplification and removal, because every surviving feature creates a permanent maintenance claim.

Conference source

Event profile and original context

This article is the stable, on-domain version of the talk. The event profile remains linked as an independent source while it is available.

View the DevTalks speaker profile