Hey, I'm Vince
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.
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.
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.
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.
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.
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.
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.
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
Happy building :)
Did you find this content useful?
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.
Cheers!