In this segment we are going to dig further into Idea #1 from Building the Enterprise Hammer:
The three things that distinguish real enterprise development are flexibility, adaptability, and maintainability -- not scalability!
In the first segment, we introduced the "Enterprise Hammer", which attached a number of hammers onto a frame so that entire sides of buildings could be nailed together quickly. In practice, this Enterprise hammer has a lot of problems:
This starts to look like a straw man argument. Couldn't we just make a more flexible, adjustable frame for the Enterprise Hammer, and solve these problems? Yes, we could, but...
In the Java world, we have been obsessively focused on scalability. I.e., how big can we make the Enterprise Hammer? Flexibility gets less attention. In fact, the J2EE stack and the Java language itself are deliberately designed to limit flexibility. To continue the analogy: engineers are allowed only to build and attach hammers. They are not allowed to adjust the frame of the Enterprise Hammer, or attach other devices to the frame. What the consequences of this approach?
The success of Spring, Hibernate, etc. are pretty good evidence that more flexibility is needed.
Absolutely not! In fact, they go hand-in-hand.
Enterprises need flexible software systems that model their world in rich detail. While some processes are wholly standardized, there will always be important exceptions. Enterprises also need to deal with disparate internal systems, outside partners, mergers, and evolving laws and regulations. Size brings issues not only of magnitude, but also of variety.
One reason enterprises need flexibility is in order to scale! Consider a seemingly unrelated question: world hunger. Tragically, people go hungry every day, despite global food production capabilities that are sufficient. The problem is not production, but allocation. Similarly, software scalability problems tend to come not from insufficient processor power or disk space, but from difficulty in allocating that power to the right tasks at the right times. More flexible systems make it easier to reallocate resources and tasks, solving real scalability issues when and where they occur.
Stay tuned for the third installment.