This afternoon, I met up with a designer who was in town for a few days. We were catching up and talking shop over drinks, when she brought up an issue near and dear to every designer's heart (paraphrased).
We ship things sometimes and it's not how I pictured it. It's not as great as it could be. We do these two week sprints and people keep saying that it's good enough, so we ship at the end. But I know it's not as great as it can be. And we keep saying we'll go back to fix it, but I know we probably won't. I look at other products and how well-designed they are and I just don't see how to reach that level.
We all know that feeling. You've got a vision or even a fully-realized design and the end-result that gets shipped seems lacking. There was a corner case that wasn't totally accounted for and kind of looks weird. A feature that turned out to be more difficult to implement than you thought, so it got dropped. A couple design discussions with your team that didn't quite go your way. It's easy to get down about that final product. After all, it's what you put in front of customers.
The thing to realize is that we all know that feeling because it's happening at every company and on every product out there. That's the nature of the work we do every day. We have limited time, energy and resources to get something done, so we do the best that we can with what we're allotted. The engineers on your team probably aren't 100% thrilled with all of the implementation details, about some sloppy bits of code that went out the door. And your PM really wishes you all had time to check off that optional feature that would have really made the team feel jazzed up about shipping and made them look good for over-delivering.
And yeah, what you shipped is "good enough." It's as good as you and your team were capable of this time, under these constraints. Don't like the result? Iterate on your process. Have a post-mortem and figure out how to move more quickly next time, how to plan better or how to change the constraints to ship something better. Feel passionately about making a feature you just shipped better? Take up the mantle. Find the people who feel the same way you do. Come up with a plan. Try to get it on a roadmap. Accept that sometimes you'll get it done, and sometimes you won't. The world is an imperfect place.
Our work is never going to be perfect. It's never going to match the vision we hold in our heads and the standards to which we hold ourselves. Even with unlimited time, talent and resources, what you shipped at the end would still feel incomplete. There are countless examples of people and companies with seemingly-infinite runway creating subpar products. Or worse, never creating a product at all.
The reality is that delivering within constraints makes us stronger. With everything you release, acknowledge your shortcomings, but also remind yourself of your successes. Remind yourself of those dark corners you didn't forget, that seemingly-difficult feature that wound up being easier than you thought, and the design discussions that you facilitated and navigated well. Build on those successes and make the next round even better.
And remember that "good enough" really can be good enough.