Traditional software books described the process of writing software in this way: you gather the requirements, then you start developing the software, done (with more intermediate steps, but you get the point).
Software is not built from top to bottom.
Building software is an iterative process that involves the analysis of the requirements, designing the application, developing one part of the application, writing tests, refactoring, performance optimization, and so on.
Agile methodologies like Scrum have risen over time to help in this effort. Everyone has a different opinion on the usefulness of those methodologies, and my take is that any methodology is better than no methodology.
Every week and month, you will go through all those phases of working with software, back to the drawing board for a new feature, or to rewrite the software from the ground up to create a new major release.
Software is a living artifact, it’s just never “done”.