SOLID Go Design
For middle of the road companies with middle of the road developers, I find SOLID is not really a great set of principles to focus on.'S' is pretty good because it helps encourage developers to get away from huge classes that have dozens of methods.'O' is basically useless when applied to a single codebase, because one of the worst parts of middle-of-the-road developers is when they start to realize they can extend classes. You end up with horrendously complicated and deep class hierarchies. I find that when it's time to add functionality, it's far better to just refactor and create new classes for composition.'L' is deeply confusing, and the difficulty in understanding it is what leads to the deep and brittle class structures above.'I' drives intermediate developers to create more and more interfaces that have 1-2 methods, which when combined with their difficulties with 'O' and 'L', just leads to confusion and high cognitive load when trying to maintain the codebase.'D' is good.