You need to develop from a general philosophy that less is more.
I use thin frameworks, no database orms, less class-based programming and more stateless functions. It's very easy to follow the code chain all the way down to the database just using grep and an editor -- no magic (or very little), what is happening is more or less explicit in the code. And the code is written very simply - I do spend some time just removing and simplifying things as much as possible before I call them done. Pays dividends later when you have to revisit stuff you haven't looked at in six months.
From the systems side, no docker, no k8s, I run Ubuntu LTS vms and manage them using Saltstack. It's simple, lets me run my stuff on pretty much any cloud that can run Ubuntu (any of them), and it's all automated. The rest of the stack is filled out using best-in-class tools that I run myself - nginx, postgres, redis, etc so I'm not tied to any proprietary versions of these services. DNS load balancing directly to nginx - no ELB or hidden request or ssl termination costs.
I try to run the simplest thing that gets the job done, and then run the exact same thing in my development environments to have parity with production - it works well.