Very curious to get some new perspectives on approaching software design.
Unknowingly, I self-aligned with what in India is known as the Jugaad work culture [1]. Jugaad favours extension by addition over modification. I combine Jugaad with a growth (software grows almost uncontrollably) & pruning (refactoring) complementary-phase.
In the growth phase, I build processes and software architectures that can be changed by adding something on top of the exiting system rather than modifying or removing. Test-driven-design helps me with the right decisions. I don't obsess over clean code, the test pyramid or documentation in the growth phase. Tests written in this phase serve either as a work bench (I need to run a piece of code often and don't want to wait for a deployment or server to start) or as a guard against regression. I want to move forward as quickly as I can before the bad design decisions I just made catch up with me.
In the pruning phase I refactor the code I wrote, add tests, write documentation, replace hard-coded values with configuration etc.
The reason for the two phases over a single continuous phase is that I observed a distinct summer-winter duality in projects where some times projects seem to teem with life and in others they are stuck waiting for decisions. Or put in other words: the immense pace at which Jugaad allows you to forward a project forces backpressure against business which then needs to "collect its thoughts" and gives you time for the pruning phase.
And if time/money is tight: common environment, smoke tests, then containers, then end-to-end tests, then everything else.
[1] https://blog.georgovassilis.com/2020/09/13/draft-jugaad-take...