DEV Community

Cover image for Why you should ship your app, even if it sucks
vincanger for Wasp

Posted on

Why you should ship your app, even if it sucks

Hey, I'm Vince

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/az8xf61b2qxx1msfo4t5.png

I’m a self-taught developer that changed careers during the Covid pandemic. The reason I was able to switch from education to web development was simple: I built a lot of small, fun apps early on, and showcased them in a portfolio.

Now I'm working as a Developer Relations engineer and building open-source projects that are used by thousands of developers, like Open SaaS, a completely free SaaS starter built with React, NodeJS, Prisma, Stripe, OpenAI, and more.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sf1fhsgwuurkre9a7drq.png

There's been a common theme throughout my app building days, and it's that I don't really mind how simple, rough, or "un-professional" my apps are. I just love seeing them finished and deployed.

What's important is that, in the end, you've made something, and that feels great.

And the result? Well, the result is that you end up learning a lot, fast, and soon after you'll be building apps that surprise you -- apps that you really like and feel really professional.

In the article below, I'll explain why I think you should stop learning, plan less, ship things earlier, and care less about your overall process and their outcomes.

Friends, It's time to build.

Detach yourself from the outcomes

When I was writing this, I initially thought it made more sense to include this section at the end of the article, because the outcome is the final result of a process -- so this should be the final section.

But I think this tip is so important that I decided to include it here, at the very beginning. And the tip is basically a friendly reminder to care less about what you make.

Why do this? Isn't it normal to be judged by the quality of work you produce? Shouldn't you focus on producing the best work possible?

Well, yes... but also no. No matter your experience level, whenever working in the creative space, everyone produces work they are unhappy with. Sometimes it happens during the building process, sometimes at the end. Sometimes it just depends on the day; yesterday you thought what you made was awesome, today you think it's a piece of crap and everyone will laugh at you if you make it public.

fine

But the more we attach ourselves to the outcomes, the more likely we are to focus on the negative, and negative thinking is a downward spiral. The worst part about negative thinking is that it's often a feedback loop that ultimately leads to inaction.

So you should care less.

It's hard, but try to remove yourself and your sense of worth from what you just created. Put it out there for others to try, listen to their feedback, and most importantly move forward. You will never progress if you don't keep moving forward.

So, onwards, my friends.

Stop learning

You already know enough to build great apps.

So, when I say "stop learning", I don't mean this in the indirect sense (we're always learning, after all), I mean it in the direct sense:

  • stop the YouTube video,
  • close the book,
  • maybe even stop reading this blogpost

What should you do instead? Open your code editor and start coding.

start

If the learning resource you're using at the moment isn't directly related to something you're actively working on, like a solution to a bug you're trying to fix, or a guide on how to implement a certain feature, it's probably not doing you that much good.

A lot of times, this type of "learning" is a distraction.

I'll be able to build stuff once I understand <insert-concept-here> better.
I should probably know more about <insert-topic-here>.
What if my <insert-feature-here> doesn't follow current best practices?

It's not that these questions aren't important, but a lot of times they're not important now, for the project at hand.

With the tools of today, you really do already know enough to at least get started now. The rest, you can learn as you go.

Copy others

Yes, I really do mean this.

It doesn't make sense to do the work that others have already done for you. That doesn't mean don't learn from others, but save yourself the time and hassle of implementing everything from scratch, or taking an original approach to everything.

In the end, everything you make will have your touch, twist, or accent to it, so you shouldn't worry.

Practically, what I mean by this, is don't be afraid to use libraries, boilerplates, or designs that others have created. Whether it means adapting some open-source code, or opening up the developer tools to see how a designer styled something, it's all fair game.

Image description

Not only will you save yourself a ton of time, but in the end, you'll always learning something new regardless.

So don't be afraid to be "unoriginal".


By the way, if you’re interested in building a SaaS app, and just want a boilerplate you can use so you don't have to do everything yourself, check out Open SaaS. It's a 100% free, open-source SaaS Starter with a nice landing page, Stripe payments, Auth, OpenAI API App examples (for those interested in making a "GPT Wrapper"), Admin Dashboard with analytics, and a bunch of other stuff.

https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sf1fhsgwuurkre9a7drq.png

Oh, and it also has a ton of detailed documentation to help you out :)


One feature at a time

Planning is great if it saves you time in the long run, but planning can also be another distractor that's used as a good excuse to delay doing the actual work.

The other thing about planning is that plans can change. Especially when building apps, you might need to add or change something you completely overlooked in the planning process.

So plan lightly, and build things one feature at a time.

Building one feature at a time has a couple of positive side-effects. First, you don't get overwhelmed by all the other things there is to do. Second, you can deploy/push changes after adding each feature. This keeps you motivated and gives you that feel-good dopamine hit of accomplishing something, even if it's just a small add-on or bug fix. Plus, you can try things out, respond to feedback from others, and adapt your app accordingly.

feature

Building one feature at a time allows you to keep moving forward, and to adapt and stay flexible. After all, we want to finish things we start, so it's good to maintain that momentum.

Ship it early, even if it sucks

This tip is closely related to our first one, namely detaching ourselves from outcomes. When we're in the middle of the building process, before our work is completely finished and refined, and we're looking at a rough, unfinished version of our ultimate vision, we tend to think "this sucks".

And we might actually be telling ourselves the truth. But unfinished things are rarely good or pretty, and that's fine.

What's important is to remember that this is part of the process: we build raw, ugly, crappy stuff first, and then continue working on it to make it better.

sux

Think of your app like a big marble sculpture. All you have is a chisel and a hammer. It will take weeks, months, maybe even years before your sculpture achieves its final form. You should not be judging your work during its intermediate stages. It's unfinished. It's a beautiful head with chunky block for a body. It's a monster for now, and it's good to recognize that and be ok with it.

Remember what we said earlier about detaching yourself from your work? Well here is where you can really start putting this approach into practice. Take your unfinished, ugly app, and make it available to friends, family, or to the whole world if you're brave enough. Even if it still sucks.

First, shipping it early helps you get over the fear that what you made isn't good, because it won't be good at this stage. Plus, the feedback you'll get from others, as well as from using it yourself, will help you learn, move in the right direction, and make it better.

Just keep chiseling away.

Finish it, even if it sucks

This is probably the hardest approach to put into practice, and I must admit, I struggle with this one myself. But finishing the things you start is an enormously powerful skill.

Even if you're really unhappy with the thing you're working on, by finishing it, you learn the mindset of what it takes to actually finish work. Not only do you really have to detach yourself from the outcome in order to move forward, but by doing this, you turn yourself from a tinkerer into a builder.

A nice side-effect of this approach is that often times, once we've finished something and had some time away from it, we tend to be a lot happier with it than we remembered. And if the end product still isn't something you're happy with after having some time away from it, the undeniable positive effect is that you'll surely have learned a lot of new skills along the way.

Now you've learned new skills, a new mindset, and have a wiser way of working when you start your next project. And that's huge!

Final Words

What I've learned over the years of building apps is to get better you simply need to be less attached to the outcome, and finish and ship more stuff. If you can do that, you'll be unstoppable.

And to finish off this blogpost, I'll leave you with some words of wisdom from the late, great author, Kurt Vonnegut. If we think of writing code as an art form, then this quote pretty much sums up everything I've said in this post very well:

“Practicing an art, no matter how well or badly, is a way to make your soul grow, for heaven's sake. Sing in the shower. Dance to the radio. Tell stories. Write a poem to a friend, even a lousy poem. Do it as well as you possibly can. You will get an enormous reward. You will have created something.” - Kurt Vonnegut

Image description

Happy building :)

Did you find this content useful?

star_us

We're working hard at Wasp to bring you valuable weekly content, along with a React/NodeJS full-stack framework with one of the best developer experiences around, so please consider giving us a star on Github! Everything we do at Wasp is open source, and your support helps us make web development easier and motivates us to write more articles like this one.

wasp_arnie_handshake

⭐️ Star Wasp on GitHub 💪

Cheers!

Top comments (31)

Collapse
 
annavi11arrea1 profile image
Anna Villarreal • Edited

I started learning coding last September, as a beginner I was digging for every possible resource I could get my hands on. I have since stopped buying books and stopped taking online classes (for the most part) I met a great coding club on discord and have since started a massive project with my friend building a shopping cart app, and I can tell you, the learning is REAL. 80% researching a fix on Google, 15% coding, and 5% thinking about what's next.

Problem solving > spoon feeding

Not only that, but you focus on the problems that are relevant for you, saving time.

Collapse
 
vincanger profile image
vincanger

wow that's great to hear!

Collapse
 
faizan711 profile image
Faizan

Hey can you share that discord club, would love to connect with fellow devs.

Collapse
 
annavi11arrea1 profile image
Anna Villarreal

We just switched to a new server and we are currently getting things set up. You are welcome to join and poke around in the mean time!
discord.com/invite/gMJ2afQa

Collapse
 
steve-oh profile image
Steve Schafer

I'm in general agreement with your philosophy, but there's one area where you shouldn't ship your app if it sucks: security, especially your users' data security. Familiarize yourself with the concepts (XSRF, XSS, SQL injection, etc.), and use proven, off-the-shelf solutions to implement security in your app. Most importantly, don't think that you're smart enough to roll your own security. Even the experts get it wrong sometimes, and they've probably been doing it for longer than you've been alive.

Collapse
 
vincanger profile image
vincanger

You could always use a full-stack framework like Wasp, or a third-party solution that takes care of this for you (although more expensive), which is what I mentioned in the COPY OTHERS section

Collapse
 
whattheportal profile image
WTP | WhatThePortal.com

Solid advice - the paralysis that comes with perfection is real.

Small, steady, frequent - who knows how far you'll end up going! Thanks for sharing this like-minded approach. It embodies what we like to call "Profit Engineering" - not going for perfection but going for impact.

Collapse
 
vincanger profile image
vincanger

yep. that's the way!

Collapse
 
jakepage91 profile image
Jake Page

Totally agree, marginal gains is the name of the game.

Collapse
 
obistanlee profile image
obidiagha stanley

a step at a time.
and you will be surprised how far you have gone while enjoying the process.

Nice one.

Collapse
 
vincanger profile image
vincanger

yep. one step at a time sounds too easy though. there are so many psychological battles you have to win along the way, which is why I wrote this.

Collapse
 
obistanlee profile image
obidiagha stanley

i agree

Collapse
 
michaelflore profile image
Michael Flores

This was the post I needed to hear! To much of the time we aim to be perfectionists and think that we need to have everything ready and have all the answers before we make something. The idea in this case is just to have a MVP and build it up overtime! Great post.

Collapse
 
rita profile image
Rita

I completely agree with what's been said above. I was working on a small project one weekend, something simple like "create celebration text using AI." I launched it and then forgot about it. Later, I checked the metrics and saw it ranked high in search results and was getting organic traffic. This motivated me to add monetization, and now this simple project pays for the servers for all my projects.

Regarding perfectionism, when it's time to launch, people usually go to Product Hunt, right? From what I understand, it brings a major traffic boost. But what if the project isn't perfect at that time (not terrible, but could be better)? This could mean losing a huge opportunity because it's hard to get the same level of interest with a second launch. What would you suggest: launching as is or waiting until it's in the best possible state?

Collapse
 
cbolanos79 profile image
cbolanos79

I have read your article and I can say I find this very interesting, specially about the topics of avoiding overthinking. Nevertheless, I would like to highlight some ideas, from the perspective of my experience and point of view. I hope you don't take as a critic but a personal point of view which can lead to a constructive debate and enrichment.

  • Consider delivering your apps just when they are ready to be used, in other words, a mature enough MVP ready to be used. Why? Because if it's in a very early stage of development, or just the UI isn't polished enough, the app will be rejected by potential users, instead getting feedback. As you said, use the available boilerplate and avoid to reinvent the wheel using available resources: libraries for your language, UI libraries and tools (bootstrap, etc). Once you master them, try a new one.
  • Don't be close minded: consider you'll never master all the available tools or frameworks, ever if you are a seasoned developer. Try to learn new technologies, play with new frameworks: you never know when something will be added to your toolset. Be creative and explore your options, try different approaches.
  • When you build a new app, try to get a general view, set a work plan, not a detailed one but enough to have an idea of what are you going to do, and then, start working. This way you will avoid frustration, and be more organized.
  • Finish it: I totally agree with you. Be consistent and finish what you started, don't get excited by starting a new project. It's better to go with lite steps rather walking a long, hard path.
  • Invest in learning: look for resources surrounding your skillset, try to add new skills and improve your existing ones.
  • Last but not least: enjoy. Just enjoy learning, writing apps, trying to do your best on each project. There can not be doubt your first project will be ugly, the second one a bit less, the third one will shine a bit, and so on. Continue practicing, although you don't get the expected perfect result.

I wish you the best and hope to continue reading your articles :)

Collapse
 
l4ur4oliveira profile image
Laura de Oliveira

Overthinking (and overplanning) is hell! 😑 Lots of started work, but none completed. I will definitely share this post with my team! Thanks!

Collapse
 
martinbaun profile image
Martin Baun

Simplify, and fine-tune, boom, won't suck any more :) Great read I really enjoyed this!

Collapse
 
vincanger profile image
vincanger

Thanks

Collapse
 
valvonvorn profile image
val von vorn

So you should care less.

So you advice to ship shitty code so to say IIUYC.
This is fine! This is fine for your junior side project.
This is not fine for production code!

Collapse
 
vincanger profile image
vincanger

I never said ship shitty code to production codebases. That's a different topic. Here I'm talking about building your own apps.

Collapse
 
mayasingh39 profile image
Maya Singh

Great Article.

Collapse
 
vincanger profile image
vincanger

Thank you, Maya

Collapse
 
letsbsocial1 profile image
Maria Campbell

Great post Vince!

Collapse
 
vincanger profile image
vincanger

Thanks, Maria!

Collapse
 
zvone187 profile image
zvone187

Just ship 💪💪

Collapse
 
vincanger profile image
vincanger

That’s right :)

Collapse
 
efraim9 profile image
František Kočí • Edited

Motivating, thanks a lot! I think we need more articles like these!

Collapse
 
vincanger profile image
vincanger

glad you liked it :)