Think of software development as a box.
Now, this box is transparent at the start, but as you develop the application this box will get darker and darker.
Initially, you can see inside the transparent box, you can see all the code bits and pieces that keep the box together.
A new task was assigned to a developer who starts working on it right away putting the implemented code in the box. The box gets darker. Then another bit of code by another developer is put inside the box and the box, yet again, gets darker.
Every new code from tasks, iterations, phases, or sprints, however you want to call it, will make this box ever so slightly darker up to the point when this box is completely black.
Developers can't see the contents of the black box, they don't know what's going on inside anymore. They have no idea what's keeping the box together.
A team's job is not to let the box become completely black.
What prevents the box to be completely black?
It's well-defined specifications. It's good tests, be it unit tests, integration, or end-to-end. It's also sane task deadlines, and a well-spent time in and around development reviews. It's refactoring stale code.
Finally, it's team energy of overcoming the hurdles of a complex project and creating a solid architectural base for this imaginary box.
Remember, good code is just a side-effect of all of the above.
Image credit: Thorn Yang on Pexels.