In my years of working with large systems and complicated architectures I have found the following to be true:
- any system architecture will eventually become out dated
- programmers will continue to extend a system beyond it’s architecture
- the system will eventually end up in disarray because it is held together with rubber bands and duct tape
- management will scrap the system because it’s too costly to maintain
- system will be replaced by new architecture that will fix everything
- system will eventually become out dated…
The solution here is very close to cleaning out your junk drawer.
- know what belongs in your junk drawer and what does not
- if the idea of what goes in your junk drawer expands, don’t get a bigger drawer, put those new things in a new drawer
- clean your junk drawer(s) regularly
- always have a spare drawer for things that might eventually go into one of your drawers or might become their own drawer
What does a junk drawer and software have in common?
Well software is full of features (junk) that can be classified in to solving domain specific problems. For example: I have a junk drawer divided into my camera stuff and my USB gadgets. Any computer system solves a certain set of problems similar to being either a “USB gadget”, or “camera stuff”.
But what happens when I get start accumulating office supplies? Well I could create a third compartment in the drawer, or I could put them temporarily in either the USB part of my junk drawer or the camera part of my junk drawer.
This is very similar to when you get a new classification of problem shoved into your current system. You could reuse an existing drawer, or create a new compartment within the current drawer taking space/resources from the camera or USB compartments. This process could continue with cables, spare DVDs, and so on, but where does it end?
In comes the spare drawer.
Now in the case of our clutter/entropy/drawer rot problem, everything could be solved by always keeping a spare drawer. Now eventually you might accumulate so much junk your entire desk is nothing but drawers, but at least when it comes to refactoring and keeping the drawers you want, you can eliminate, move, delete, etc all without effecting your “primary” junk drawer.
How do you create a spare drawer with software?
Drawer Architecture is a new term I’ll create today. It’s an architecture similar to service oriented architecture (SOA) and enterprise service bus (ESB), but everything is exposed as a restful web service, all database create/read/update/delete transactions, all business objects are exposed, the architecture at it’s core is a fully exposed web api and it’s exposed via a web based dynamic language like, Groovy, Python, Ruby, or PHP.
Stay tuned for my next post… Creating A Drawer Based Architecture.