Ask HN: Do you need more than front end and Firebase education to ship product?
Plan A was to just learn front-end development (HTML, CSS, JS, framework, UI/UX) and use a baas like Firebase or AWS for the back-end.
Now, I'm a little concerned that relying on front-end and baas will bottleneck me in some way that isn't obvious to me as a newbie.
Given the above, how valuable would a back-end education be (node/express or ruby on rails), even if I end up going the baas route?
Notes: My product ideas are run of the mill Reddit for dogs, news aggregator, to-do list app type stuff.
I'll be following one of the Odin Project's curriculums. They offer both front-end and full stack learning tracks.
-Front end https://www.theodinproject.com/tracks/3
-Full stack Javascript https://www.theodinproject.com/tracks/2
-Full stack Ruby on Rails https://www.theodinproject.com/tracks/1
50 comments
[ 14.0 ms ] story [ 113 ms ] threadIf your hope is to learn how to write code for other peoples products and have them pay you, it would benefit you to get a more full stack education. Node would be good. Rails is nice. Django is nice. .Net works well. Java is good.
It just depends on what your goals really are.
At this stage OP won't know which backend language/tech will be best suited to whichever idea ends up taking off.
So, best to just use whichever is most popular (and with the best trajectory) since popularity leads to other advantages. Choosing rails now, for example, would not make sense.
Hard to recommend it to a beginner, but not sure if I would recommend Node or Java to a beginner either, so that's a tough one.
Your plan sounds good to me. There are quite a few all-in-one ish solutions that can help you with this, usually with pretty modern technology, like Gatsby. https://www.gatsbyjs.org/ Do a bit of research, learn what you think you need to get shipping, and ship.
With that said, building a toy API with authenticated data (user registration and the like) will help you understand the various ins and outs and will give you a better understanding of what services like Firebase offer and what their value is.
Don't focus on premature optimization - by doing things in a naive way at first, you'll understand why various engineering practices became commonplace and you'll be able to more judiciously apply them instead of cargo culting.
There's tons of ways to skin that cat, best thing to do is pick one and go for it.
Everyone is different of course but trying to install Git and use the command line before I even started the first lesson should have been my first clue that I needed just a little more of a foundation.
[1] As in my entire “programming” knowledge was the CSS I had used to customize MySpace a decade earlier.
The technicals can always be learned later, or you can pay someone to do it. These days, there's a LOT of apps that can build apps/websites for you.
On the other hand, if you want to become an engineer, then by all means, learn the technical stuff and ignore the rest. try to make a conscious choice: 1) i want to build a business or 2) I want to learn engineering.
But I'll never underplay the importance of having both backend and frontend skills -
- It's a core set of skills which will pay off multiple times in the future. - Easier to pay off the tech debt in the long run. People seriously underestimate the capabilites of postgresql + ruby on rails/express + a frontend like react. - It's much better to be dealing with the problems of an open source software than a proprietary one. - Learning how everything works together - how to frontend is wired to the backend and how the backend models the data in the database and how to deploy all of it together - is invaluable. - Almost always cheaper than proprietary solutions.
Learning between the two is a matter of tradeoffs. If time is of essence, then you probably should choose things which are easier to learn and manage. However, in the long run, proprietary solutions rarely beat the combination of postgresql + rails/node + react.
My experience with managing servers, doing deployments by hand, setting up automated deployments has been 100% not enjoyable. So I prefer to pay AWS to handle as much of that as possible for me.
I am also doing what OP has proposed (to start a business more than learn technical stuff but I enjoy both and need to do both), I evaluated firebase DB but ended up coming to the hasura/GraphQL/Postgres conclusion also. It’s been pretty good, have embraced 3factor app arch and been moving quickly. I do use firebase auth
For myself, I started with HTML and CSS, and had a lot of fun with that. Then when I decided it was time to learn JS, I hit a brick wall. I almost quit then and there thinking programming was not for me. But I was also determined to do something different with my life than I was currently doing. So I switched gears and jumped into Ruby on Rails. Ruby really clicked with me in a way that JS did not, perhaps because it was somewhat more readable and less syntax getting in my way. I got into it enough that I signed up for an online bootcamp. That's a whole different story but the short of it is I learned Ruby on Rails and that enabled me to get a job at some point soonish thereafter.
And you know what? In the end I came back to Javascript and I actually enjoy working in the frontend (with typescript mostly now) more than the backend side of things. I think maybe Ruby taught me how to rewire my brain for programming and then Javascript felt a lot more friendlier than it had previously. It's a lot of the same paradigms, just re-wrapped in different syntax.
I guess, my point is, try to start somewhere, but don't be afraid of exploring. There's no right answer for all of us.
Html/CSS/JS is a good starting point. Firebase or AWS Amplify is a good augment to that although I'd try just purely static sites with maybe some serverless functions sprinkled in if needed. Netlify Functions are an easier entrypoint into that, and I believe they are just AWS Lambda's underneath: https://www.netlify.com/products/functions/
Try to find your niche and focus down on what gets you excited. I dove into some obscure frameworks and languages at times that might have seemed ill-advised to focus on during that stage in my career. Some of these paid off by becoming popular but even when they didn't, I learned a ton.
Don't think of each idea as "Product with N engineers and X DAU", just build a thing and then add incremental improvements.
Can this be phrased differently by asking the other questions:
- What value can I deliver with what I already know?
- What things should I learn to overcome the difficulties encountered trying to deliver value (through a product) with what I thought was sufficient but clearly is not?
In other words, one wants to deliver value and start building a product as a vehicle of delivery with the skills they possess. At some point, the skills are insufficient to complete the vehicle to deliver value, and they either change the vehicle or acquire the skill.
It's not so much how you build it is the real world problems you solve. Yes there are considerations as to the quality of you product and the costs associated with low quality code. But if you solve problems well for people you will have the revenue to clean that up.
Learn to code well, don't sorry that you don't have enough tools in your tool box right now. You probably don't need them. Just focus on solving problems for people.
I'd suggest reading the pragmatic programmer before looking into a new backend stack.
Thanks for the suggestions, I'll give it a listen on Audible.
So: you do not need more than front end and a Firebase education to ship product, because Firebase was created to enable front end devs to do this.
Assuming you actually enjoy programming, fun and self development will likely come rather naturally as you build and break, find problems and develop solutions. If you have people looking at your products, even if they're just friends, learning to listen to their problems and solve them will also take you far.
Profit, on the other hand, is more difficult because that has far less to do with technology than it does with marketing and business. You could know every language, paradigm, framework, API, methodology, whatever and you'll not make a dime unless people see value in what you're building. Thus, if you actually have a real profit motive consider spreading your time between learning web development and business development.
> [...] how valuable would a back-end education be (node/express or ruby on rails), even if I end up going the baas route?
Even if you go the BaaS route you'll likely need some degree of backend knowledge to either a) have the BaaS do the right thing in the first place or b) actually understand the limitations of your BaaS, why those may be, and effectively evaluate alternatives.
In most cases, a BaaS will provide you easier ways of doing things like creating your own APIs or performing database operations. But at some level - even if basic - you need to understand your own APIs and how you're storing/retrieving data. You don't need to go particularly deep on any given topic (plenty of time for that) but you should be comfortable being able to explain your front- and back-end architecture to a fellow web developer.
> My product ideas are run of the mill Reddit for dogs, news aggregator, to-do list app type stuff
These are great starter projects; don't get discouraged because they are "run of the mill" because - as a developer - the value of novelty lags behind the value of productivity. A mediocre implementation of a mediocre concept showcases more progress as a developer than an amazing concept that doesn't exist.
I agree. It's trivial to render a component based on a route change but there are so many little problems and moving pieces after that.
I've been doing SPAs for 5-6 years and for my current project I've moved to SSR + hydration with Svelte.
https://github.com/PierBover/svelte-ssr-example
Once you learn how it works, Firebase will get you from 0 to 10 really fast but will slow you down as you struggle to go from 10 to 100. By then your app/product will have so much Firebase specific code that you will need to rewrite a significant portion of code to move out of it. Let me know if you want me to expand with specifics on why Firebase is bad.
If you need something easy to start fast I'd say go with Hasura. It will give you one-click GraphQL API over Postgres. Your front end will simply use standard GraphQL so you can change your backend without touching the front end. And Postgres is still Postgres. Even if you decide to completely rewrite your product you could keep using the same database.
Most of your Firebase logic will live in your client(s). If you have multiple clients (web, iOS, Android, etc) you will have to write and maintain the same logic multiple times in different languages. And since the DBs are so barebones you will need a lot of logic to read and write. Pretty much all the business logic you'd have in a server will be in your client(s).
You also have cloud functions which have the worst dev experience I've seen with serverless. Deploying takes forever, sometimes as high as 2-3 mins, and you will need to deploy very often as most of your functions won't run locally [2]. Debugging is done via the Firebase console which is a painfully slow Angular 1 app.
For websites the complete Firebase SDK is 215kB gzipped and you will need most of it [3].
You can define database rules using a JSON-like language for permissions and schema but it will get super messy as your project grows and become unmaintainable.
Unless you are doing a small project or a prototype get as far away as you can from Firebase.
If you do need a serverless DB look into Fauna DB which gives you everything you expect from a serious DB. Or if you're looking for a zero-config backend look at Hasura like I've mentioned earlier.
[1] https://medium.com/joolsoftware/extending-firebase-with-clou...
[2] https://firebase.google.com/docs/functions/local-emulator
[3] https://bundlephobia.com/result?p=firebase@7.14.2
Disclaimer: I'm a dev advocate there so I'm obviously biased
You pass the token to the DB via HTTPS decrypt and off you go.
Pretty sure you can do a to-do list in Firebase, maybe even Reddit for dogs.