« New exception handling technique!!! | Main | Spending Moore's Dividend »

Something CAN be done about legacy

It may seem that legacy--that is "old style" systems we've inherited or maybe even built but no longer like--is purely something we must live with now and forever.  It seems inevitable that our current systems, languages, and applications are doomed to eventually collect dust and an occasional deriding comment from some new intern who doesn't even know what it is like to boot a computer using floppies.  I say, however, nay!  How can I say this considering that it's always been this way!?  Stay with me.  First let's establish that some things never go out of style.  Like math for instance.  Math hasn't changed much since computers were born, and isn't likely to any time soon... or late.  Philosophers are still trying to decide whether math is somehow part of the universe, or if math is merely a cool abstraction we use to predict things about the universe.  Regardless, it certainly does give us a useful tool for modelling and predicting actual things.  Because of this, it has a timeless nature to it, even though we might change what symbols and tools we use to represent things. 

Computer software abstractions are unavoidably related to math, though in many cases the relation may seem like a cousin-in-law's friend's neighbor once removed.  It's actually this distance from more foundational principles that makes software so easily dated.  In the name of problem solving us Software mechanics have evolved some awfully patched up monsters.  This has been made possible by the kind hardware folks, who have been generous enough to make our obtuse layers of bandage-work actually perform in a reasonable manner (thanks guys).  One of the many prices to pay for so much bad software abstraction is the rapid manner in which our systems become legacy.  Legacy because they are so difficult and fragile to change that nobody wants to touch them.  Legacy because they are so laden with complexity that it is nearly impossible to tease out and salvage the essence as platforms change.  Legacy because we've got a newer better technology wheel we've reinvented and we must rebuild the old systems because now they just look old.

It's all of the non-essence stuff in our systems that makes us have to replace rather than extend or enhance them.  Think of any given system as being made up of two parts:  One part describes the essence of the problem for which the system was created, something like mortgage amortization, modeling customers and sales, or simulating paper documents.  The remainder of the application is a description of how to deal with the other layers of technology, such as the user interface technology, expression of concepts within the programming language, or interoperability with other applications.  The former is sometimes called essential complexity, the latter accidental complexity.  A math formula doesn't become dated, because it contains minimal "fluff" and maximal "content".  Imagine, however, if every few years we renamed all of the math operators, changed symbols, and required filled pages and pages to define simple equations.  It sounds unproductive, but you could probably sell lots of silly little books with cutesy animal pictures on the front of them to help the poor mathematicians keep up.

The closer we get to systems which describe the essence of their mandate, the less likely they are to become legacy.  In fact, it could be argued that as the accidental complexity approaches zero, it becomes impossible for a system to be dubbed legacy as it is merely a model of reality.  Yes, of course the facet of reality being modeled could change, and so our VHS tape collection tracking software may no longer be needed, but that's not the kind of legacy I'm talking about.  That does lead to a point however.  It is the changing "real world" that spurs our need to change our software models.  Given the information age, the "real world" for most domains is changing faster than ever.  The software abstractions, on the other hand, are more complex than ever, demanding incredible amounts of accidental complexity to achieve anything.  The result:  J2EE, .NET with CAB, LAMP... and a burnt out industry unable to recruit young people because the job is [raise pitch of voice] "boring."

The solution is seemingly simple: minimize accidental complexity.  Easier said than done right?  Actually not really, but [stepping up on soap box] we must take advantage of the "mathematics of data" when modelling data problems.  We must understand that everything we do, at all levels in the software stack, is data management.  Missing this fact is tantamount to trying to model physics using basic arithmetic.  We must define applications first and foremost in their "timeless" logical form, as a relational schema.  I spent the last two days dealing with COM programming.  I'll never get these back.  We must stop thinking that API based abstractions are somehow going to solve a problem; think REST, SOAP, CORBA, DCOM, RPC, etc.  Before I hop off of the soap box, let me vouch for myself.  The prescribed approach DOES work and DOES minimize accidental complexity.  I've now built several applications in Dataphor, a platform that only begins to realize the potential of declarative development, and I've seen that an application can truly be created from little more than defining structures which model reality.  If a system is defined in a high-level, declarative way, let the trendy winds howl as they may, that system will easily evolve, and may not ever need to be replaced.

As a quick disclaimer, I am of course not naive enough to believe that the best technology wins and that politics aren't a primary force in the dynamics of why we are where we are.  Nonetheless, I choose to ignore what I can't control and focus on what can be done in the present.  Also note that a declarative softwaretopia is inherently opposed to "hiding" logic.  This has all sorts of interesting technical ramifications, but it also has some interesting business ramifications.  Perhaps the open source movement is laying useful groundwork.

TrackBack

TrackBack URL for this entry:
http://databaseconsultinggroup.com/blog-mt/mt-tb.fcgi/24

Comments

This post caught my eye because it addresses what I see as one of the central complications in IT today. Companies can often be held hostage for years by outdated enterprise systems, and the problem is actually compounded by the belief that the only way to deal with legacy troubles is to invest in entirely new systems.

As time goes on and the gap between legacy systems and modern reality grows wider, this issue is becoming more widespread. Companies suffering under an outdated system are left with two unattractive choices: continue suffering or go through a migration process that is expensive, complicated and fraught with uncertainty. Invariably, adopting a new system involves exchanging the old software's limitations for a whole new generation of issues imposed by the new system, and the cycle of dissatisfaction begins anew.

If a company decides to preserve the status quo by keeping a dated system in place, it will often be necessary to use consultants or in-house staff to build an ever-more-chaotic collection of patches to address specific issues as they arise; digital duct tape.

On the other hand, if the same company decides to risk a migration, they will generally need even more consultants to write even uglier hacks in an attempt to bridge the awkward gap between the two systems. Ultimately they can end up with a "patched up monster" that is even more heinous than the one they were originally attempting to slay.

The more I was exposed to this frustrating cycle, the more I too began to believe that there had to be a better way. Fortunately, there is in fact a much better way, and your statement below does an excellent job of summing it up:

"We must define applications first and foremost in their 'timeless' logical form, as a relational schema."

All enterprise systems are really just elaborations on an underlying relational schema. When a system becomes outdated, its issues nearly always lie within the application and abstraction layers; the database itself usually remains perfectly valid and usable.

The "better way" I've focused on is to build an application that emphasizes and embraces its core functionality as a relational data manipulation tool. Software that literally derives its own structure on-the-fly by analyzing the schema of the database it's being asked to run against.

This product makes it possible to create a "backdoor" interface into nearly any enterprise system's underlying database that goes a long way toward resolving frustrating issues with legacy software. It provides a stable, standardized way of visually working around issues with systems both old and new. In some cases, it can even replace an older system entirely by simply adopting the old system's database. By keeping the old data, it thus eliminates the need for a migration. Sort of like placing on a new auto body on an old chassis.

Our company was built largely on the belief that such an approach is the best way to deal with the problem of legacy data. It's great to see this concept gaining momentum. There is a better way and we'd love to show our version of it to you! We are seeking like-minded consultants to become value-added resellers; your insightful post proves that you are indeed "like-minded"! Our goal is not just to sell product, it's to bring tangible, long-term relief to the millions of people whose daily working lives are made unnecessarily cumbersome and frustrating by enterprise software systems that are either outdated, quirky or poorly matched to their intended purpose. If you're curious, please check us out at http://www.databaseace.com


Warm Regards,

Steven Harrison
DatabaseAce, LLC
1-877-DTBS-AC1
http://www.databaseace.com

Post a comment

(If you haven't left a comment here before, you may need to be approved by the site owner before your comment will appear. Until then, it won't appear on the entry. Thanks for waiting.)