Confessions of an Angry Architect
June 8, 2007 - 11:43am — bexI hate technology.
That admission always confuses people when I say it... mostly because my career is software architecture and design. Nevertheless, I spend a good part of my day trying to hate the very tools I use for my job.
Far from being counterproductive, I believe it is essential for the proper design of complex systems. You never want a close-minded lover when you can have an open-minded hater. The latter is always more interesting.
I am generally suspicious of technology evangelists who drone on and on about how much they love some specific technology. Designing enterprise systems is difficult enough: the last thing you need is a cheerleader in disguise telling you that everything is wonderful. Quite the contrary: you need a grown-up who will freely admit when their software works, and when it sucks!
I'm talking to you, JEE evangelistas...
Some developers grow attached to specific technology. This is fine, because in many cases that love makes them much better at developing software. For example, if you love your text editor, you will understand all the nuances of it, and it will make you insanely more productive. Some extend this love to their favorite programming language, software applications, frameworks, and methodologies. That love can also make them much better developers, but it has a serious down side.
When the only tool you have is a hammer, everything starts to look like a nail...
The difference is that a text editor is a personal choice for the developer: it only affects his productivity and happiness. In contrast, the choice of language, framework, and methodology affects everybody that uses the final product. If the developer chooses an inflexible or far-too-new framework out of love, then the system will never be able to keep up with the deluge of needed changes.
Unfortunately, the developer rarely understands the consequences of his decision, because all too often project completion equals project success, period. If we are ever to rise out of the dark ages of software development, we have to think big and long term.
Therefore, good architects cannot love technology: they have to love the system. The system naturally includes software, but also hardware, process, context, users, and current events. Yes, even current events.
Because the problem is now much more complex, you cannot afford to be attached to any one tactic in order to achieve strategic goals. This requires you to maintain a healthy level of detachment from loving any one piece of the puzzle. You must be able to sacrifice when prudent.
How To Hate Properly
Its difficult to stay detached from liking software. If a tool helped me whip out a solution quickly that made everybody happy, then I'll feel some fondness towards it. Case in point, I know Oracle Content Management pretty dang well, and use it very frequently... but its impossible to be everything to everyone. Therefore, despite my attachment, I need to be realistic about its limitations.
That's not so tough when you've worked with a product for so long, but what about new technology trends? What about the other 63 products in the Oracle Fusion Middleware stack? Which piece is right for my problem, and how should I implement it?
I find that thinking at the architect level is easier if I initially approach all new technology with the same attitude: I hate you.
Its difficult to do, because when an exciting new trend rears its head -- AJAX, Wikis, Mashups, Apollo, Ruby on Rails -- its easy to get caught up in the fever. However, as an architect you need to hate technology so that you can find its flaws. If you get excited about it, and want to use it for everything, then you're thinking like a developer or -- worst of all -- an evangelist.
If you love the technology you're using to design a system, then it is very hard to see its flaws. You'll miss out on those little details and incompatibilities that can derail multi million dollar projects.
Love Makes You Blind; Hatred Helps You Focus.
Think about it: when you hate a person -- say Paris Hilton -- what do you do? You nit-pick. You find every possible flaw you can, and dwell on them. Shouldn't you do the same for any piece of technology that makes broad claims about making your job easier? Odds are good that it will affect your life significantly more than Paris Hilton... so you owe it to yourself to hate technology!
Step one is to hate new technology. The more exciting it is, the more I try to hate it. I tear it apart, and put it back together. I read blogs by grumpy developers complaining about its limitations. I read about projects that fail because they bought into the hype, or implemented it poorly. Its usually best to speak with hate-filled developers, because they are very knowledgeable and have very colorful language... If possible, I get a copy of the software and personally tear it apart looking for flaws.
Step two is to absorb these specific flaws to help paint a picture of the gaps in the product. What did the original developers forget about? What did they find unimportant? Did they not anticipate the product being used in a certain way? Were they ignorant of fundamentals like network programming, security, performance, usability, internationalization, disaster recovery, customizability, or parallel development? In other words, what are the weaknesses?
Step three is to calm down and take a step back. Ask around about successful projects. Listen to how this new technology helped specific people with specific problems. This helps paint a picture about what the team did well. In other words, what are the strengths?
Finally, you're ready to make an educated decision about adding this product to your system. Your emotional detachment means you'll never care enough to know every nook and cranny in the product... but if your goal is to deliver a best-of-breed solution, you have to make that sacrifice. And hopefully, the tips and tricks you need will be in the documentation when you need it!
Naturally, this hatred cycle takes time... a few days or a few weeks of research and testing. Few people have that luxury, so its best to network with other technology haters.
I'd suggest going to a user group, and asking around for somebody using the product. Offer to buy them a very nice steak dinner in exchange for a little chat. You will get some good info on what clever things they did to make things work... but don't forget to figure out what they hate!
If they can't name 5 things they hate, then they probably don't use the product enough to give you the information you need.
Therefore, be sure to bring enough cash for multiple steak dinners...




Post new comment