It’s really tempting to think you can redesign something and make it better. It’s worth a try, because you may actually succeed, or you may come to the realization that the thing you were trying to fix already solves countless problems you didn’t even consider.

I’ve been working on a JavaScript framework.

Throughout this process I’ve struggled every time I’ve wanted to redesign something. Redesign is my typical reaction to encountering something I feel is less than perfect. Some redesigns have led to huge improvements in the framework, while some have been dead ends that got walked back after sanity returned. I find it hard to tell which one it is before exploring that path. It turns out one of two ways; either the redesign makes it back to the main branch, works out and then the app gets updated to work with the changes and things are better for it, or I get to a point where it just isn’t working and gets cancelled.

There have been so many revisions that I eventually started feeling guilty for deciding another was necessary, but I’ve now come to terms with the fact that this is the process. Failures are milestones on the path to success. If I never took a wrong turn at any point, I would have been stumbling toward success out of luck alone. The failed revisions making themselves known as wrong turns illustrates where the right turns were.

Programming is all about tradeoffs. React makes certain tradeoffs in order to gain certain advantages. Any framework that is better than React in one way is likely worse in another. And better and worse are subjective, so what feels right for one person or situation might feel wrong for another.

Lessons I’m learning: