*chuckle* I do believe that's the first time in recorded history that
anyone has accused AOL of being feature-rich.
AOL has always been "feature-rich". It just isn't the right thing for
almost anyone at all, because when you get that "feature-rich" you get
very feature-targeted -- in that you're catering only to the people who
want all, or most, of what you provide. People who want little or none
of what you provide (beyond basics) will go somewhere else, because that
"somewhere else" doesn't impose a whole lot of overhead. The fact that
AOL features have often been broken, slow, and in-the-way kludgey never
changed the fact that there were a lot of them -- and, in fact, it's in
large part the sheer weight of features that made the feature set so
unusable to so many people.
Trying to trap people in an AOL-only internet, rather than letting them
seamlessly out into the Internet, was a "feature" -- it was just a
feature pretty much nobody wanted. Most of AOL's features have tended to
be much like that.
The point I was making with all the features you snipped was that it
*doesn't* take wild, pie-in-the-sky everything-to-everyone features to
prevent your application from scaling linearly. Any little thing can trip
you up. Most of the features I listed were either small facets of behavior
or byproducts of other design decisions. And some of them (e.g. saving
disk space) were actually "scaling" features themselves; what helps you
scale to 100x (fitting on the available disk drives) may hinder you at
10000x (when your servers are in different data centers).
. . but you can get pretty close to linear scalability within specific
ranges of scaling, especially if you *avoid* massive feature lists.
Sure, they don't have to be "wild, pie-in-the-sky" features, but you
missed my point with that statement. My point wasn't that one feature is
"everything to everyone", but that seventy features is trying to provide
exactly that without doing any one thing that, examined in a vacuum,
looks unreasonable.
In other words, if you want to minimize scalability hurdles, one of the
most important things you can do is pick a focus area.
I'm not really sure what that has to do with... well, with anything. But
then, my point probably wasn't all that clear to you, either. The point
was that there's always a tension between feature-set and scalability.
That was sorta my point, too -- except that I wasy saying that since
there's a tension, you need to pick a direction, and if your direction
kills scalability that's your own fault and not disproof of the fact that
near-linear scalability is possible. The fact of the matter is that the
same things that break linearality of scalabilty for your software are
the things that break linearality of scalability for everything else,
too. You may start watching your "everything to everyone" business plan
circling the drain, now.
On the other hand, I find it remarkable that a huge crop of "social
networking" sites have become immensely popular without the most obvious
social networking feature - who else is here? - because that feature just
doesn't scale. It would be like if e-commerce grew to its current levels
without real-time credit card processing, or if Flickr only let you upload
ASCII-art of photos because photos are too big to store.
I don't find that so odd. The "most obvious" social networking feature
is actually not all that great a feature for a new business venture. It
was solved a long damned time ago with technologies like IRC. It's not
new. The other stuff being implemented by all these "social networking"
sites *is* new, at least in an Internet context -- or presented in a new
manner.
I both agree and violently disagree. The problem with "if you're smart you
plan ahead" is that (a) you often won't know what your pain points will be
until shortly before you hit them, (b) even if you do, they may not be in
your control, and (c) you don't always know how fast you're going to grow.
It would be foolish for me to invest in a large Arizona data center in case
the traffic to my last-updated-in-2005 blog spikes 10000x next year. (And
I do keep promising my financial advisor that I'm selling the data center.)
But sometimes externalities do hit your business; it becomes "steam engine
time", and you're the steam engine. Verizon nee AT&T nee the Bell
Telephone Company had, literally, over a hundred years of experience
telling them how much their business would grow each year. And that worked
very well until 1995, when all of a sudden the online world was booming,
people were leaving their phones off the hook even when they weren't home,
and suddenly they ran out of dial tones.
Luckily for them, they were the phone company; nobody had anywhere to run.
But if they were in a competitive business, they'd be toast, because
someone would fill the need that they couldn't. Remember Friendster?
Great idea, great product, right time, couldn't scale as quickly as their
user base, slow site, toast.
I don't generally like to be so harsh, but . . . if you plan badly, your
plan fails. Sorry to burst the bubble for anyone who thinks that hard
work and good intentions should automatically translate into success.
This is not something that can be blamed on the potential scalability of
well-written software. The blame for that rests entirely at the feet of
those who made the planning decisions in the first place.
It isn't. Elsewhere in this thread, in fact, I was arguing that programmer
productivity is far more important to orders-of-magnitude scalability than
raw language performance. I agree with you on that. Where I disagreed was
that it was realistic for "many purposes" to assume linear scalability.
Show me any site design and I'll show you a dozen places it falls over at a
few orders of magnitude.
Show me where it falls over at a few orders of magnitude, and I'll show
you software that is being misused -- or, looked at from the other
direction, miswritten -- if it's being written well at all. If it's not
being written well at all, that's pretty much irrelevant to my point
anyway, since poor software development can kill anything.
This is why focus is important: when you're trying to be all things to
all people (the all-singing, all-dancing, dish-washing performing
monkey), there's no give in any area to make compromises so that in other
areas it'll scale, because there's nothing you don't need out of a
system.