choosing your stack
Namaste!
So, you're all set to start freelancing. But freelancing like any other work needs some skill to get paid. In today's issue and the subsequent ones we'll be talking about choosing your stack, basically tech stack, and then how to build on other skills like product thinking and design.
why choose a tech stack?
A craftsman works with his tools. He uses the tools like an extension to his hand. At points a race car driver doesn't know where his body stops and the car starts. He is one with the car. I read somewhere that Rahul Dravid would know if his bat was off even by a few grams. I think I made my point. Your tech stack is going to help you in doing great work.
what constitutes a tech stack?
Anything and everything you need in order to deliver the final app to your client. This covers your code editor, your HTML templating engine, your CSS framework/preprocessor, your programming language of choice, your cloud provider, your database choice, even your Domain Name Registrar, your version control system, and a lot more which you have to identify and put it in your toolbelt.
so, what's today's issue going to be like?
Belt doesn't make Batman but it's damn important. So, choose and put the tools wisely. In today's issue I'll give you 10 commandments, just to get Moses' feeling, and you can choose to completely ignore or think around those and put your toolbelt together.
what's the jibber jabber?
What if you don't understand what I am saying? Then go Google this stuff, read about it. If you still don't get these technical jargons then bro we are playing on different levels. You might want to buy one of those books which tells you about a Udemy course on Wordpress/Wix/Webflow and then build a website for $100 and be happy with your life. I think I made it clear in the starting chapters that this newsletter series is for the serious folks
Without wasting further time, let's start.
1. always cloud
See, the client is paying.
Reliability of the service/app you have put reflects on you. If it's up, your client will recommend you to his network.
Cloud is infinitely scalable. Put a load balancer in front, spin up a few more instances and you're good to go. Or, just use serverless and pay as per use.
It's always secure. Even the default selections are secure. It makes it a little bit more work for you to put up a service but it makes it infinitely hard for anyone to get in and get your data. Will talk more about security in later parts.
100s and 1000s of well paid and expert engineers from Google, Microsoft and Amazon are paid to build and maintain these services. Trust them.
So, don't buy a VPN server and set up a LAMP server on Rackspace. My God! That's prehistoric.
2. don't be academic
You chose the path to freelancing and money making right? Then walk on the path.
No need to learn just for the sake of learning. Anything which people do only for interviews: system design, data structures and problem solving, operating system principles, etc. Off limits for you.
First learn what's needed to deliver, then maybe learn for depth/understanding.
3. slow and stable is good
Oh! Flutter is amazing. It's going to replace everything. Let me quickly leave everything I know and learn this new shiny piece of tech which no one is using.
If you waste your time behind every new tool, every new library, every new tech, when will you do other stuff? You don't have the luxury of a regular dev who works for salary and then tries to stay on top of everything over the weekends. You have a lot of other work to do. Hence, choose a tool in your belt and stick with it. Learn to wield it properly.
In the hands of a doctor a syringe saves life, in the hands of an addict...
4. scale is a good problem to have
So, Google is using this amazing thing to scale its services. Or Facebook is using this great database for everything. Market will always be filled with some tech which scales really well but it's really hard to get started.
A lot of people want to build the most scalable product on the first go. No, build MVPs, make the correct choice but don't drill yourself into a hole trying to configure kubernetes for a website.
Solve the problems of scale at scale. When you or the business which is funding you will have more money to throw at problems because they have millions of customers. However chances are they would have moved to an in house tech team by the time they get good traction. Freelancers are not contracted to build Facebook, they are contracted to build simple SaaS with hardly any scale.
Solve the problems of scale at scale.
5. choose javascript
If you have been following me, you know I toot the JS horn all the time. Why? you learn one language and you can make
server side apps
desktop apps
mobile apps
web apps
and some of the biggest and baddest apps are being developed on JS. The demand is only ever increasing and supply is low as unlike Java and C++ it is not taught in college.
More importantly, the ecosystem is ever growing. People make fun of the JS ecosystem saying that every other day there's a new framework but we discussed how to deal with that in point 3. And that brings me to the next point.
6. always open source
As a developer, the urge to write my own software is way too strong. Learn to resist that urge as a freelance. You are getting some of the most amazing folks in the world writing code for you for free, with tests, and millions of folks testing it everyday in production. Why do you want to write your own?
If you really feel like then better practice is to contribute back to open source software. But don't spin off your own unless there's an obvious need and there's no library (highly unlikely considering JS) for it.
Freelance wins when you delegate work and do the absolute bare minimum.
7. choose React
This brings to my next topic. You can choose React or Vue. Both are good and have amazing supporting libraries and frameworks for almost everything under the sun. However, I would suggest React for one big reason and that's React Native. You get the power to create good enough mobile apps with it. So, you can tap into two markets.
When doing React, don't try to piece everything together. NextJS, Gatsby, CRA etc. are good tools. I'll keep reminding, leverage work done by others. In today's world everyone is working on React and its ecosystem and you get all of that for free.
8. learn to choose the right tool
There's an old hindi saying which roughly translates to that if you have to stitch a piece of cloth then a needle will be more useful than the sword.
In freelance, you sometimes get web apps, but sometimes you get just plain old websites. Know when to pick up React, Gatsby or Next. But also know when to pick up a simple HTML/CSS template with a CMS at the back. Learn to use the right tool for the job. A CMS will help your client too. Don't go and build your own CMS or blogging template and waste time on it. Ask your client to pay $50 dollars for the best design and just get it.
Fun fact: teawithtanay.com is a wordpress site, coz it suits my editor.
9. keep your swiss knife ready and sharp
Okay, here's the final set of tools as per my suggestion:
Category Suggestions Code Editor VSCode CSS Bootstrap or Tailwind Server NodeJS, Express or you can go the other way where in you use serverless, or Hasura to generate your API Database SeQuelize or MongoDB Cloud Provider Heroku (good for beginners), AWS/Azure (pros) Framework Create React App (Beginners), NextJS (props) Code sharing Github (learn git really well) State Management MobX (fast for freelancers) Router React Router / Reach Router
Now, whatever you decide, create a scaffold with it. Keep it ready. With your folder structure, your API, your auth, your routing, state management basically everything ready.
Understand that each piece closely works with other pieces so if you change a piece in the middle of a project there will be a lot of rework. Avoid that. Smart folks create their own project template and keep everything working and ready all the time. You'll get many starter projects like that. Create one for yourself end to end with everything predefined. All you should do when you get a project is write business logic and nothing else, mind you NOTHING ELSE. For inspiration, checkout react-boilerplate
on github by mxstbr
Do the plumbing before a project and you'll churn out code faster.
10. you're not just a developer
As a budding freelance, and even after that you'll have to do a lot more than just development. You have to be
a marketer
a sales guy
a product manager
a project manager
a designer
a negotiator
There would be so many hats that you need to wear. It's exciting but also means that you need to be efficient in the programming part. We will cover how to be all of these in the upcoming parts.
goodbye (for now)
I had a 11 hour long office day today, and that's why the delay. The meetings just kept overflowing. Good thing is that I have prepared content points for all the issues, still writing 1600+ words takes time.
I'll be waiting for your emails and tweets on how you liked this issue. Please keep them flowing. :)
-----------------------------------------
This is my 6th newsletter. If you missed any one in between you can read it here: https://tinyletter.com/tanaypratap/archive
You will also get a link to this newsletter there and you can use that to share with friends or over social media. Once again, thank you for subscribing and reading till the end. Means a lot.
Yours,
Tanay Pratap