Published on

Ship Pretty, Functional Things


When Reid Hoffman said that if you’re not embarrassed by the first version of your app, you shipped too late, I think he was referring to features and bugs. Not design and functionality. The app has to function well enough to solve a problem. The design has* to be pretty enough not to turn off users, but the rest is where Hoffman’s quote comes into play. Polishing features, writing costly (in time) integration tests—I know many devs will hate me for this point—and other things prevent you from launching.

*"has" is loosely defined here. There are plenty of examples, including ones pointed out to me on the IndieHackers forum, of products that were ugly and hard to use that worked out just fine. Those stories feel like survivorship bias stories, though. Maybe I'm wrong?

Nail the design. Nail the initial functionality. And ship.

I write this because I’ve noticed that as I focus more on design and UX for my MVPs, I am relying less and less on frameworks and libraries. I’ve found myself writing all my css and styling from scratch. It takes quite a bit longer, but you get a feeling that is unique and not something picked up off the shelf. That, to me, is worth the extra time. And that falls outside of the famous Reid Hoffman quote, in my opinion.

This is not to say you should dump the frameworks. Bootstrap and other css frameworks can help you get started quickly. Those frameworks all provide a really nice baseline design, so you'll be able to ship pretty things. That said, I think it's harder to stand out in a crowded market if you lean too heavily on a framework. And that is where writing my own css and styles comes in here. The market for Perligo, is one that is well-defined. However, it's defined by products that are ugly and slow. A competitive advantage beyond the functionality is simply providing a better experience. So, I've chosen to handle all styling myself. But, by all means, if you are shipping a pretty, functional product, feel free to use frameworks.

The point is, it's ok to be embarrassed by your product’s immaturity at launch. It's ok to be embarrassed by bugs. But don’t be embarrassed by its design and lack of functionality.

There's a great post from 2017 by Jason Cohen about his disdain for MVPs and how we should be building simple, lovable, and complete products. I think that post closely aligns with my thinking here. Jason says:

But no customer wants to use an unfinished product that the creators are embarrassed by. Customers want great products they can use now.

It is possible to fund success by shipping ugly, hard-to-use products. But if you can avoid it, you should. Your users will thank you.

This is what I’m applying as I build Perligo.