This is just how I work on things but it seems to me to be a solid approach. The most general way possible. It's easier to think about it without thinking in specific frameworks or any languages. Just a step by step process of what needs to be done. This is of course steps done for making an app on an app. Like a new app module. Not starting from scratch like making the gulp file and the beginnings of setting up the connection to the database and creating the API boilerplate.
Know and write out what your data structure is for that new web app or what data structures you will be using. Also are you going to change any of these data structures and why.
Using an app like JustInMind to create a template of the idea you have in your head to model off of. This doesn't need to be super fancy you could even just draw something on paper with notes about what actions do what and what happens to the data structure behind the scenes when certain actions are completed. Even model the flow of the user through different components or pages.
Start writing up the controllers with the ideas of the steps in step 2. If you see yourself editing things in the controller to conform to the ideas in step 2 think about fixing things in step 2 and redrawing and maybe even rethinking all together. It is not too soon yet to refactor since we haven't even made a template or any css.
Start creating the child components or controllers and services along with the templates and css. make it all with fake data and nothing connected to the database you are using yet. make sure you can manipulate it the way you want. Make sure you know how your data comes in and what format it is in so you can create a mock data object to play around with.
Once I have all of my front end working with my mock up data I ditch the mock up data and start working on my back end integration with the front end. Since the back end pieces are usually the same and API set up of a CRUD system you can make changes here.
Above is how I usually set up an app but have in some cases needed the back end to do most of the heavy lifting and will in this case move step 5 before step 3 and the step 4 above becomes step 5 and I create a new step. In step 6 I ditch the mock data and just finally wire up the back and front end.
This should be something you do, some people might forget about it or ignore it but it's always a good idea to do tests while developing so you aren't writing one giant broken piece of junk.