In the end, no amount of careful planning and precisely followed procedure will make up for a poorly designed architecture. The root of the problem is that poorly designed architectures are prone to failures under stress and additionally lack the infrastructure for real-time analysis and modification.
Although I certainly can't describe all aspects of good design in this section, or even in this book, I intend to challenge some of the traditional approaches to Internet application development and, at the very least, motivate you to always prove to yourself that a technology is the right fit before you use it as a building block in a large architecture.
Time and again, I hear statements such as "Perl is slow" and "Java doesn't scale." These are dangerous statements, because when knowledgeable people say them, they are stating that a particular design and implementation in Perl or Java is slow or not scalable. However, when people hear these things and repeat them as gospel they breed ignorance. Languages aren't slow; implementations of languages are. Language selection and scalability have little to do with each other; architectural design and implementation strategy dictate how scalable a final product will be. I beg of everyone, stop making blanket generalizationssay what you mean.
The most important rule to abide by when implementing a large system is that you design it first. The challenge of this rule is that implementation in most environments is organic and continually evolving, and a master architect will not be involved in every aspect of ongoing development. So, what to do? Hold coders to a higher standard; they must be architecturally savvy.
Don't think like a coder; think like an architect. I have the utmost respect for codersI am onebut a coder who cannot step back and see the big picture is effectively a hammer-wielder, not a carpenter. It is essential that you can see the overall architectural plans and understand the purpose of the overall system. When you get the 30-inch-wide doorway at the top of the handicap accessibility ramp, everyone (not just the foreman) should be asking "how will a wheelchair fit through this"
Good design is essential, but a good initial design is merely a foundation for success. The structures built on those foundations can be neglected and crumble to the ground unless good design principles are continually applied.
The reality is that it is challenging to find a project leader, coder, or systems administrator who has enough breadth of knowledge to make generally excellent design decisions on an ongoing basis. This is why it is so essential that regular collaboration take place between the business, development, and operations teamsit is, perhaps, the most fundamental ingredient in good design.