Amazing quote from here

Developers: “Lean” and “Agile” won’t fix bad code. The fastest way to build complex software is to do it right. Most software is complex. Doing it right means building discreet, single-purpose components (…classes, services, methods, blocks of code in a transaction script, whatever…) with low coupling and a high degree of cohesion, with consistent levels of abstraction and well-understood interfaces between them. If you don’t think so because that’s not how it worked when you tried it or if you don’t know what these things mean then you have yet to master the fundamentals of your craft. I don’t care how many years you have been slinging code and what your job title is. You are a beginner, in thrall to an IT industry so broken that it’s possible to spend years in shops where no one ever experiences the productivity gains which come from well-made, supple, fit-for-their-purpose, easy to maintain software applications. The notion that complex systems are best assembled from easier to understand and managed subassemblies has been validated by generations of engineers before you, going back at least to the beginnings of the industrial revolution. As a result, you won’t need to fiddle with the carburetor of your car in order to install a new stereo. The power windows won’t go up and down when you step on the gas. Having seat belts and fan belts doesn’t mean they live in a shared belt subassembly. That’s what good software is like. – Robert Reppel