Whenever I hear someone use the phrase "seamless design" in reference
to a large software system, I cringe inside.
Perhaps the examples I have seen are not representative,
but in my experience when people try to design a large seamless system
they usually end up with a large system with poorly defined and
mostly hidden seams, and it's an ugly mess.
Personally, I have no problem with seams per se.
I don't think I have any seamless shirts, yet that has never bothered me.
Some of my shirts even accent the seams with a different color thread
so that they stand out.
When done well, the design of the seams adds to the
aesthetics of the shirt.
There are very few large man-made objects without seams.
Continuously poured concrete freeway lanes are very large, yet even there
they put in seams where appropriate, such as for expansion joints,
and there are well defined seams between the lanes.
A seamless road is very nice until it needs a bit of repair.
Then it gets patched, and you have something much uglier than a seam.
Or the ground shifts a bit and causes irregular cracks, which are like
ugly, poorly designed seams.
Concrete sidewalks could be made seamless for long lengths, like freeways,
but usually, in addition to real seams for expansion,
they put in fake seams by scribing additional lines across the sidewalk.
These
control joints
are designed so that, if the sidewalk shifts and
cracks, it is more likely to do so at the control joint,
where it will not mar the appearance of the sidewalk.
They also make repairs much nicer: you can rip out and replace one
sidewalk square rather than putting in an irregular patch or replacing
the entire section between real seams.
Those sidewalk designers were not stupid.
In my view, software systems are like shirts and sidewalks:
they should have nice seams in the right places.
When done well, those software seams can add to the aesthetics of the
system and make it simpler to maintain.
When I say "software seams" I am of course referring to the
interfaces between the different components of the system.
A system with well defined interfaces can be a thing of beauty.
Without those well defined interfaces, the system may
"crack" in random places like a too-large slab of concrete.
The larger the system, the more important it is to have
well defined interface points.
If your business is successful and continues to grow,
eventually you will exceed the capacity of your system.
If you have a truly seamless system, you may have to replace the whole
thing.
With well defined interfaces, you have the option of upgrading only the parts
that are at capacity.
Similarly, if you ever want to migrate to newer technology for any reason,
or integrate with another system,
having those interface points makes it possible to migrate or integrate
the system in
parts, which is generally less expensive, less risky, less impacting,
and more flexible.
The next time someone starts talking to you about seamless software,
think about seamless shirts and sidewalks before assuming that
"seamless" is a good thing.
Sunday, November 2, 2008
Subscribe to:
Post Comments (Atom)
2 comments:
I'm going to start talking about seamless design at every opportunity from now on ;).
It appears you are saying that seamless can be equated to monolithic. If so, that is a good point.
I wonder why so many people seem to be obsessed about seamless design? What exactly is it supposed to buy?
Chris: I believe people who ask for large seamless systems are reacting to a plethora of poorly designed systems with bad seams. If every shirt you have ever seen has ugly seams, it's easy to believe that the solution is to create a shirt without seams. Until you actually try to do that.
Post a Comment