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!
The Enterprise Hammer is not Flexible
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:
- Other building shapes will not work.
- Other building materials will not work.
- It is difficult to adjust the Enterprise Hammer to deal with local variations: terrain, zoning, architectural considerations, etc.
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...
The Enterprise Hammer is Deliberately Inflexible!
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?
- If the frame is flexible enough to match your building, you will do well.
- If the frame does not match, you may be worse off than if you had no frame at all.
- If the frame is inflexible, you will see builders abandon the frame and build their own.
Are You Saying that Flexibility and Scalability are Opposites?
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.
So How do I Get More Flexible?
Stay tuned for the third installment.