Much of a team’s development load is self-inflicted. The cheapest work to deliver is the work you establish you do not need, and that is settled in planning rather than in review — which means asking what the product actually has to do before anyone opens an editor.
Then test what does get built. Moving fast is not worth the exposure of poorly tested code, and the tests are what let the next person change it without fear. The architecture and the documentation around it follow the same rule: both are written for whoever inherits them.
It is a marathon, not a sprint. Measured steps beat all-nighters and they are endlessly repeatable. I use current tooling, AI included, and hold what it produces to the bar I have always used — code the next person can read, and a system I can defend in a room.