Knowing what to build
A lot of times I find myself so excited by an idea I'll start building it ASAP, just to be stuck 2 days later on something I didn't took the time to think about.
Map out your MVP, draw a few schematics, think about the features you'll implement, how you'll implement them.
Resist the urge to just build it right away and force yourself to cool down and put some thinking into it. Once you're ready, go!
Knowing your tools
Much underlooked: knowing what tech to use.
What you master. Not jumping in there with the latest new stuff you saw trending on HN / Twitter.
Learnt this the hard way with the serverless module, back when it was the new thing to try. It was still very early but I didn't care.
I'd host it on AWS so it's cheap and use some DB that looks like Mongo, Dynamo.
The amount of time I lost figuring out ways around contraints imposed by serverless, and the amount of time it took me to figure out how to use well DynamoDB was just not worth it, in what I was trying to achieve which wasn't a the time learning a new tech.
I spent time debugging like hell, but as it was still relatively a new tech, the internet wasn't full of explanations and blog posts on the issues I encountered.
Go for more mature tech.
For me, after a bunch of experimention, I now generally use:
- Express, ejs, mongoose, passport (for users),
- Stripe for payments
- Hand made CSS (with a lot shared between pages) for landing page
- Bootstrap 4 + jQuery for dashboards
It might not be the best for 2019 but at least it's reliable.
Maybe I'd be better off with React, a serverless architecture, using GraphQL.
It doesn't matter to me.
It doesn't mean you shouldn't try new stuff! it's fun to experiment.
Depends on what you want, is it learning this new thing, or building fast? Just be careful about not going too spread.
It took a time to decide myself on my current stack after lot of experimentation including Rails, PHP and Django on some projects.
You should re-use at the maximum your code between projects.
Recently I started splitting recurring parts of my projects into components, Node modules:
- I have a module that handles authentification and account management through passport.
- One that handles billing with Stripe, managing user subscriptions, adding removing cards, upgrading your account, etc...
- One that gives an overview on my users and how they're using the app.
- And one that generate nice error pages.
As of right now I use them in ~5 different projects.
For now they're pretty basic feature-wise but as I'll go and add more, they'll be available on all the products as simply as by updating the dependencies.
These modules make sense only because I know I'll use the same technology (Express, mongo) in later projects.
Focus on the important and shortcuts
It's important to be good at prioritizing things. Not losing focus to useless/notthatuseful things.
You'll add them later when you have some time for that. Then re-use them as much as possible.
Focus on tasks that advance you the most toward your target and go pieces by pieces on it.
Be careful not to be too drawn toward the big picture because you'll get discouraged. Map limits for your MVP and try sticking close to them.
That doesn't mean you shouldn't adapt to what you learn on the way of course.