Ask HN: How do you manage complexity in your codebase?
I think managing complexity is at the core of what software engineers do. Anyone can implement complex systems but it takes lot of careful thinking and experience to build systems that are simple.
What are some of the ways have you successfully managed complexity in your codebase or system. I am interested in knowing real examples of your technical decisions that really paid off in terms of scaling your system without increasing complexity. 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.