Quote:
Originally Posted by suzzer99
Welcome to the real world bro, unlike your one-man show where you got to optimize everything to infinity. When we started putting node and angular on our job requirements, our candidate quality went up a ton.
Yeah, exactly, I have been insulated from certain realities because I was at a small company for too long. And I think this goes a lot further - in some sense running an elite software engineering organization at scale and general principles of engineering good software clash dramatically. Think about the kinds of things we kind of take for granted as good principles for architecturing software.
Law of Demeter
Single responsibility principle
Open/closed principle
Liskov substitution principle
Interface segregation principle
Dependency inversion principle
Modular design
Explicit State/Change Management
Non-leaky Abstractions
Separation of Concerns
I'll call these qualities "modularity" for short because I think many of them are about the same thing. Essentially, we want software components to be predictable, have local impact, easily isolated, replaced. Given Conway's Law, you can map, to a degree, software architecture to organizational communication structure. And one thing becomes really clear - talented engineers absolutely hate and detest organizational modularity. They don't want to be limited in terms of responsibilities, they don't want to know just what they need to know, they want to be able to touch everything, they operate simulatenously at multiple levels of abstraction and have a holistic, as opposed to a local view of the system.
I personally haven't really tried to evaluate frameworks from this perspective before - how will adopting the architecture prescribed by this framework shape our organization and prepare us for the future - and should have more thoughts on this later.