So I’ve been using FreeCodeCamp for a few years now and I think it’s amazing A couple of years ago I completed the majority of the front end certification but then life got in the way and sinse then I’ve had 2 years without any coding practise.
I have an idea for a web app that I really want to build! It’s fairly complex…it should involve user authentication, an ability to store user profiles, the ability for users to message one another, search functionality (search users based on specific criteria) and a payement gateway so a user can pay for the service.
I would like to use the MERN stack (unless there is a reason not to?).
My question is…How best to go about building such an app?
Should I build the back-end first, the front end first, or work on both simultaniously?
If I was to build both front and back end simultaniously, am I going to have a very hard time learning back-end skills as I go?
Would my time better be spent building, for example, a simple full stack app like a dynamic blog before attempting this? Or can I learn effectively as I go with the bigger project?
I have several months of free time which I can dedicate to this, so for the time being, time is not a constraint.
Any advice at all greatly appreciated!
Many thanks and look forward to your replies
I would recommend you complete at least most of the backend content in the curriculum, before trying to build a fullstack app.
Myself, and thousands of others have done this with MERN. It is simple enough, and gets the job done. So, I cannot think of a reason why not.
Understand the tools you are going to use. Then, do a bunch of research into the project structure you want. I am not talking about the shape/style of the app, but am referring to the directory structure. How are you going to separate each component?
Inevitably, you will be making changes to both to ensure they talk with each other properly. So, there is nothing stopping you from working on both.
Back to the first statement I made. I would highly recommend you do something like the APIs and Microservices & Advanced Node and Express(you will learn to build a chat app here with authentication)
Not necessarily. On a side note: Something I have experienced, and seen many others experience is burnout. If you are unfamiliar with your tools/goals, you run the risk of getting over-worked with mistakes/errors you are unfamiliar with, which will mean you could spend days making little-to-no progress. This could make you despair working on the project.
So, sometimes, starting smaller helps - again, the fCC curriculum is starting smaller. Also, your debugging skills will exponentially increase.
This is just a bit of my thoughts, but you are you. So, work how you know you are able.
Hope this helps
Thanks, Sky. I think you are right, and deep down I probably know this also haha. I dont want to loose time building something else when I could be building my project. But equally, getting grounded in these back-end technologies before hand is time well spent and will no doubt save me countless headaches in the future.
Thanks for your reply
I’m a bit torn on this because I definitely agree with Sky on a lot the points and that if you jump in the deep end early, you can end up getting frustrated and giving up/not making progress. That being said, I recently took the deep-end route and could not have been happier with it. I didn’t choose your stack but the concept is the same. I learned for a bit through curriculum and then moved on. I built my first web app - a car show finder - and it was terrible but I was able to improve it over time and now I’d say it’s borderline decent. Now that I think of it I wish I had saved some screens of the first versions … Anyways I was more motivated on a project that is aligned with my interests vs. a stock code project so even though it was harder for me I dedicated more time.
Additionally, I think there is some value to banging your head against the wall on some problems. 1) IT often leads you to learning interesting ancillary things you may not have before or would have otherwise and 2) it teaches you how to approach and solve problems outside of the scope of any canned projects where others have done exactly what you have done. This can be incredibly powerful as you improve because it allows you to dive into new applications with ease and confidence.
Either way, I think you’ll learn a lot and have fun so, Good Luck!
Can I ask what stage you where at with you programming when you decided to go ahead and build your first app? (which looks and works great by the way! Nicely done :D)
What stack did you use?
How long did it take you from start to finish?
What was your process more or less? For example, did you go head first into coding what you know and then learning what you needed to know when you hit a wall, or did you learn some basic concepts of all the technologies before making a start?
It may be helpful to learn/test features (say auth, or whatnot) in isolation so the code is not tied to any specific implementation details your real project may have.
It’s the same idea behind why you do not want to work on both the front and back at the same time (as much as possible, that is) but use tools like Postman for API testing, etc. instead of having to implement a front-end just to interact with the back-end. Just so you can keep your focus and not juggle both at the same time.
I would also suggest that for anything complex the planning phase is just as important as the implementation phase. So take your time up-front.
But at the end of the day all this, especially as a beginner, may just be too overwhelming and can cause you to freeze up and procrastinate so you never really get going. So sometimes you just have to say screw it and jump in and just start building something. Sure, it might not be the best approach to take but at least you will get going and still learn a lot by doing so, it just isn’t as time-efficient.
some very good points, especially in regards to testing specific features in isolation.
I’ve been reading a lot about the JAMstack, do you have any experience with this architecture? If so, do you see any reason why this wouldn’t work in the context of the functionality I require for my web app? Seems like a simpler way to build things from a front-end developers perspective
Thanks for the feedback!
So I had a decent background in coding concepts, and had done a few things in python a while ago but would definitely say I was kind of a beginner. I ran through projects on code camp as well as took advantage of the PLuralsight free april month to bang through python and django courses. At the end of that I at least felt comfortable doing basic things within the MVC framework. I knew almost 0 js and jquery, and 0 about postgres. Also had never used heroku.
I used jquery/js/django/python/postgres. With heroku deployment.
At this point I’ve iterated many times but it took me about 3 weeks to get something (super basic) up and running and live. Like lasjorg said, when i hit the deployment stage I had no clue what to do. I think I spent 3 days banging my head against a wall to get the app deployed but in that time i learned a whole bunch about the workings of web app deployment and heroku which I can now apply.
I used a cookie-cutter django project to start so I didn’t start from scratch and then just started adding basic features. I would come up with 1 basic thing I wanted the app to do and build that out. Each time I found that 1) my features could become more complicated and 2) my code was more concise and clear. To do that though, I wrote a lotttt of code i ended up throwing away. I wasted a lot of time on stack overflow. It was really annoying at times. But the cool thing is I was building something I thought would be cool and that’s what mattered to me/motivated me.
The only thing I might have changed is to do a little research on JS before because I didn’t even know the basics and ended up wasting lots of time there.
Definitely not the route for everyone because it’s pretty unstructured. So if you like having that process and structure, it may make more sense to work through lots of the example project sets first.
You can also likely separate implementation/deployment issues from your code slightly easier like lasjorg said. However, a very significant portion of coding is making sure the implementation aspect works too so ignoring that isn’t necessarily the way to go either.