"Wasted" effortNo amount of design is sufficient without exposing the feature to real life users.
Several years ago I wrote an open-source library, which I continue to maintain. The last major release came out about 3 years ago. Even at the time, I knew I wanted to add some new features, which would represent breaking changes. I just hadn’t had the time to design the new changes yet.
Then about two years ago, I spent several days working on the design for the new feature. But before I could implement it, I pulled away by life commitments.
I finally got back to the changes about 2 months ago, and have been working on implementing the changes a few hours per week since then. Then I finished the new feature about 2 weeks ago.
Then I started using the new feature.
Immediately, a major flaw, an oversight in the design, was apparent.
With some reluctance, I reverted about 80% of the new design, in favor of a new, new design that was ultimately simpler.
Looking back now, the new, new design is also simpler and more consistent. It’s actually all around better.
It’s simpler. It’s easier to implement. It’s easier to use. It requires fewer changes. And most important: It actually works.
What’s the point of all this?
While I don’t regret the design process I went through, even though it was ultimately “wasted”, no amount of design is sufficient without exposing the feature to real life users.
Planning vs short feedback loops
In the debate between planned architecture and short iterations, whose right? Both are right, of course.