Golden Hammer

Definition: The belief that there is a technology or tool that significantly improves productivity, reduces errors, shortens code, etc. without significant drawbacks.

AntiPattern Name: Golden Hammer

Type: Development

Problem: You need to choose technologies for your development, and you are of the belief that you must choose exactly one technology to dominate the architecture.

Context: You need to develop some new system or piece of software that doesn't fit very well the technology that the development team are familiar with.

Forces:

Supposed Solution: Use the familiar technology anyway. The technology (or concept) is applied obsessively to many problems, including where it is clearly inappropriate.

Refactored Solution: Expanding the knowledge of developers through education, training, and book study groups exposes developers to new solutions.

Compare: SilverBullet.

Examples:


I object to calling it "anti-pattern" this early in the page. Although I generally don't believe in person-neutral GoldenHammers, I believe it unfair to criticise it as if it is a consensus fact that there are no such things. About two-thirds of those I debate on this wiki seem to believe golden-hammers exist. (I don't claim them representative, however.) -- top

Really? As mainly an observer in your debates, it seems to be somewhat the opposite. Though admittedly not as prevalent these days, I seem to recall someone peddling TableOrientedProgramming as at least a chrome-plated hammer, if not a GoldenHammer. This Wiki is generally refreshingly free of GoldenHammer thinking, at least in comparison to the many less-considered sources that would have us believe (as of July 2008) that ServiceOrientedArchitecture or Mashups are the solution to all IT ills.

I only peddle it as a valid alternative or supplement: one choice among multiple. I don't claim it should summarily replace everything. This differs from the "absolutionists" who insist their GoldenHammer should replace existing stuff. (In the old days I was more insistent, before my "psychology-matters" epiphany.) -- top


BrowserConstrainedApplication doesn't seems like an example because it is not a result any one of the above mentioned forces, but due to the need for universal access. -- OliverChung

I have worked on a number of applications that had no actual need to be browser-based (internal company applications) and would have been much easier to implement as a thick client application. A BrowserConstrainedApplication? is the first thing I think of when someone talks about a GoldenHammer -- BrianDeacon

Building for universal access and building for the browser are very different things. Using "web technology" as the GoldenHammer very often leads to intractable, single-use, BrowserConstrainedApplications. I have been guilty of this anti-pattern in the past, but am reformed. -- JimArnold

What other such universal access architectures (preferrably with a interoperable standard and multi-vendor support) are there, where you can connect from cybercafe, PDA, cellphones, laptops, etc almost anywhere in the world today, other than HTTP/HTML? -- OliverChung

I don't think that's the point. In the context of GoldenHammer's, a team with whose skills are, primarily, in web development are likely to build an application which precludes the use of other clients. Sure, you can build just about anything with ASP, but try accessing it with anything other than a browser. What about the people who don't need access via the internet? -- JimArnold

Well, the page linked above describe BrowserConstrainedApplications's problem as "Sales people need to access FOO on the road, possibly from a CyberCafe, at home, and in the office.... the application needs to be accessible everywhere on the network, with uncertain client-side support". So the system requires universal access with uncertain client-side support. If HTTP/HTML is the only solution, how can it be blamed for the constraint imposed by the browser? What's more, the "Applicable Positive Patterns" section in the above linked page doesn't even address the basic problem, because "creating multiple clients" is not going to allow access from CyberCafe, unless one of them is HTTP/HTML. There may be cases where using HTTP/HTML is due to GoldenHammer's forces, but the BrowserConstrainedApplications is not one of them. -- OliverChung


Development AntiPattern prominently featured in the AntiPatternsBook. (http://www.antipatterns.com/dev_cat.htm) Someone has to bring that into shape: AntiPatternTemplate


I can't tell you how many times I have landed in gigs where the client's "engineering" staff was still designing stuff using 80186, Z80, or -- this makes me gag -- MCS-51 family technology. Can't the 8051 be allowed to die a natural death?!? Fortunately, I have priced myself out of most of the work that these loozers represent. However, the kind of thinking that has engineers designing 21st Century products using 1970's steam-engine technology still persists. I run into people designing state of the art electronics hardware and trying to shoehorn UNIX into the box because that's all they know. Duh! Duh! I was thinking about offering a sort of anti-Dilbertism service on my web site. You know the routine; "Have me come in and slap your engineers around a little until they Get It®."

You can't have it both ways, dude. Sounds like you're trying to shoehorn in 21st century uber-processors into a steam engine. Sometimes a hammer actually is the right tool. So is an 8051.

No, I am not trying to use more processing horsepower than is called for by the application. I am trying to avoid the continuous use of 30 year old technology just because the client's engineering staff stop learning anything that long ago. This is not hyperbole; this actually happens, even today. It shocks me into stunned silence to see the kind of crap I wouldn't use to operate my toaster being crammed into medical diagnostics and industrial process automation. Holy moley.

I wouldn't want any logic circuits in my toaster. It makes toast. That's a zero-bit operation. -- StuartPbBentley

... and it worked just fine for another 20 years ...

I have found myself implementing simple already-solved solutions that would work just fine, thank you, if done with an 8-bit micro, but since "this is the 90s" or "it's the 21st century" we "must use the latest stuff" to build a gadget that turns a light on, rings a bell, reports tilt conditions of remote devices to a central location. So we move from a $30 part to a $300 part, hire some guys who are a little fuzzy on what a TeeState is, and off we go. OMG. It's a WheelFactory. But, we SparedNoExpense.

Okay, try this on for size: I recall one client who made industrial temperature controls for various industries. In the case of metal heat treating the response time of the system could be measured in minutes; in the case of certain plastic molding machines the critical temperature cycle could be measured in milliseconds. These guys were developing temperature controls with all sorts of real time features, nifty user interface, and networking -- using a blankety-blank 8051! The only way they could get their junk to meet latency specs was by going to an even faster 8051 variant made by Dallas or somebody. (Dallas had a version that ran at something like 60MHz, whereas the original Intel device topped out at 2.) Some of their later designs had two or three 8051s in them to spread the work load around enough so that the junkbox microcontrollers could handle it.

Had these guys switched over to something even as recent as a 68HC16 (1980's technology) they could have met their real time constraints, had all the processing power they could shake a stick at, and eventually created a less expensive, less complex, and more reliable piece of hardware. But, nooooo! They had to stick with the craprod they knew. Oy! What a pile.


Sometimes there are good reasons for NotInventedHere and sticking to known methods, even if there are "better" ways of working. idSoftware had problems releasing Doom (correct me if I'm wrong) because they used a proprietary sound library without redistribution rights. Sometimes throwing a 100Mhz 6502 at a problem that a 6502 can handle is easiest - software can be fiendishly complex, keeping a working design but clocking it faster might save a lot of money, despite the overall sillyness of 100Mhz 6502s. The trick is to realize when your golden hammer is requiring more work to support than you save by using it.

In the case of three linked CPUs (wow, the concurrency issues!) you're probably better using one faster CPU. How can you tell? Unfortunately, without experience you aren't aware that not only aren't you using the best tool, but often you're unaware that there are other tools.

The opposite problem is that new tools which solve a fiendish old problem have the tendency to appear magical.

It's a good reason to keep your design modular. You can swap out a home-written macro parser for an off-the-shelf LISP interpreter, or write a module in perl to take advantage of the ManagedCode and RegularExpression capability, or call a C program from Perl for something that demands ASM-like control.

Probably the best lesson here though is to expose yourself to new things. PairProgramming is a micro form of this - hiring interns and swapping programmers between projects is a macro form of this. If you aren't afraid to RefactorMercilessly and you can write the same code in a few ways, or port your code to a new platform, and experiment. It's a good reason to avoid tying yourself to any technology you don't have access to - OpenSource is freedom.

Open Source is a wonderful thing and doesn't help you at all when you are trying to create a tightly enclosed, microcontroller-based electronics package. As far as determining when it is best to drop the use of a handful of Old Fart processors and go with one New Kid On The Block processor, well, that's what spec sheets and sales engineers are all about.

My contention is that the clients who insist on using Bronze Age technology are the same ones who don't want to do any research on what's out there now. These are the companies that are going to be eaten alive by their competition. I like to rub their noses in it every chance I get. Some of them Get It®. Others don't. The ones that understand alter course and typically survive to make new, better products. The ones that don't want to make waves end up sinking.

Such is life. And death.


IfItsNewItMustBeBetter -- My toaster works fine without 21st century refinements, I just put the bread into the toaster, push the lever down, and the toast pops up when done. This is all I want from my toaster. I usually add some butter or jam using an old-fashioned table knife. -- SimpleSolutionsForSimpleProblems

My toaster has one refinement I enjoy, a little lever which pushes out bread that's either too short to spring out or has failed to spring for some reason. I'm also enjoying the ones made with wider slots for thick bread or bagels. Not sure if those are 21st century refinements or if I've just had low quality toasters before.

The features you describe are 20th century. In addition, many toasters have a slider control which controls the lightness/darkness of the toast. Perhaps the earliest versions with sides that drop down could be adapted so that the drop down would be at the time pop-up toasters usually pop-up. I can visualize them springing open, with the toast ready to buttered or jammed. They could have space that was wide enough and spring adjusted to hold a half-bagel on each side. (Sunbeam, are you listening?)

I rather like the fact that my fancy-dancy new toaster is on a timer and not a thermostat, so when my girlfriend's toasting her bagel, i put mine in and the lever doesn't immediately pop back up in a few seconds, like it always did with the old fashioned one. The lever activates the digital timer and is still on a spring (but it's released with a digital "cancel" button on top). I'll be the first to say that motorized toasters that slowly lower and raise the toasted product are just ludicrous. I am however annoyed at my coffeemaker which only has logic buttons for on and off. It has no timer built in, and I can't even put it on an external plug timer because of the full logic controls. Means I can't wake up to hot coffee. I'm starting to think of an automatic button-pusher on a solenoid activated by an X10 sensor, but she's not a fan of my grungy hack tech on our appliances...

How about a toaster that asks you if you would like any toast? Maybe a crumpet? A bagel? Any baked bread products?


Personal GoldenHammer

People are different and some technologies may fit the way an individual thinks more than others. While there may not be any global GH's, it is possible that there are individual GH's. If PaulGraham says that Lisp makes him super-productive, I have little reason not to believe him. -- top

So if you believe him what do you do?

1. Nothing. I don't think I want to be productive anyway.

2. Give it a look, but make sure I spend at least as much time proving that it cannot be a GH as learning it.

3. Pretend that I have learned it, then claim that it must be a GH.

4. Give it an honest try without preconditions, and try to answer the questions, "Why does PaulGraham think it is good?" and "What can I learn from this?"

I know what I do. -- Bottom

I cannot try every GH claim for long periods; I don't have that time. However, I will inspect well-documented metrics and semi- realistic source-code change and productivity analysis scenarios. In other words, I'll try claimed GH from those who do some decent pre-science. - t

Why would someone care to do this for you? If they are satisfied, you can expect no help from them. In any case I said honest try, not long try. And the issue is not if it works, but what you can learn. It is your job to learn, not ours to teach. This is why I am -- Bottom

I do look into new stuff, but usually it's more practical issues these days, such as squeezing desired UI behavior out of existing tools. Further, using a different programming language or "odd" technique requires approval from bosses and other developers. Thus, if I did find a GH hammer, I likely couldn't use it anyhow, at least not without a bang-up demonstration.

{Dude, you have my sympathies. I've done what you do, and it's hell.}

Let me ask you this: with hundreds of claims of GH floating around, how do you filter which ones to investigate further and which to ignore? I for one will tend to ignore those associated with people who use insults or patronizing. Puffers are usually wrong in my life experience. Those more likely to be right are those who focus on their tools, not on status or self-puffery; those who are passionate about their tools, not themselves. See HowToSellGoldenHammers. - t

{I'm drawn by buzz. When I see a virtual crowd forming around a new tool, I take a look. I ignore empty self-promotion; I pay attention to accurate, in-depth descriptions of technical attributes and merit.}

Well you see, Top, command of basic principles such as those from the books we all read as a matter of course, allows us to quickly filter signal from noise. I know that many have suggested this before, but still you resist. I am only curious why. It is not my concern, thankfully, as I do not work with you or your code, but somehow I still feel the need to throw you a rope but I will lose little sleep if you fail to catch it, particularity if you fail to try. On the other hand you really are not in a position to judge others. -- Bottom

For one, I'm skeptical that my detractors are as like-minded as you suggest (assuming it's more than one person). Second, you've never demonstrated that academic materials tend to reinforce each other, rather than present potentially contradictory or alternative theories/models. Third, you've never demonstrated how your vast academic knowledge has helped you separate the good from the bad. You rarely turn it into anything demonstratively real or practical. Something is wrong. I still believe that the keys to software engineering are in WetWare and not so much pure logic and math. The set-versus-bag "relational" debate is an example where you overvalue purity for purity's sake. (One of) you didn't show any clear-cut practical net benefits, only trade-offs at best. Many and large companies seem to agree with me on that issue, thus you cannot claim I'm the lone airport-corner nut (at least not on this one :-) - t

Bottom's purpose in life is not to provide you with anything. Even if I thought it was worth my time, your disdain for the work of those you do not understand suggests that any such attempt would be futile. Your opinion of your detractors is not relevant either, as they are quite up to the task of disregarding you on their own. My purpose is to attempt to prevent bad ideas from accidentally falling into friendly hands. I am concerned that some persons are not as well armored against you because they have come here seeking to learn, and may have already been grossly misinformed by what currently passes for the CS curriculum -- particularity at trade schools. If there is any hope that they have not succumbed to the notion that anything they do not understand is not important, and if it was others would have an obligation to explain it to them, then I will plant the seed and it is up to them to tend it.

I repeat: I do not care if you want to believe that computers are made at the North Pole and function on the Homunculus theory. I do not care if you can't tell a descriptive theory from a proscriptive theory, or why it should matter. If any who read this are willing to learn, my comments are sufficient; if not, an act of god would not serve. I am of the opinion that when I fail to understand something it is my fault and my responsibility to do something about it. You seem to blame the rest of the world. You have that right, but that tends to cause me to think you are a deservedly lost cause. My only goal is to attempt to prevent others from falling into this same trap. I live a life of conflicted misery and dissatisfaction because I am forced to confront the vast number of things I do not know, and do not understand, and somehow this is my fault and my problem and not the world's. Please note that I no longer see any point in suggesting that you think about that. -- Bottom

{Beautifully put, Bottom.}

{There's certainly at least two of us here, Top. I'm not "Bottom", and in some of the Top-vs-x debates I've seen two or more others support my arguments and I've supported theirs. I don't see anyone defending you, but I do see others making the same points I've made.}

{You have a curious view of the outcome of the set-versus-bag "relational" debate. I recall you being repeatedly shown that keeping bags has downsides; eliminating bags has clear benefits and no downsides other than possibly rarely requiring a keyword or two at the system boundaries to either import or export bags; and I recall you being unable or unwilling to provide any justification for retaining bags inside the system other than some weak appeal to "authority" -- something akin to "if Oracle and IBM saw fit to keep bags in SQL, they must have had a good reason" even though several of us explained the historical inertia that leads to such systems being maintained and ignorance being sustained.}

{So, evidence points to you being precisely the WardsWiki equivalent to the lone airport-corner nut. Furthermore, Bottom is 100% correct that our command of basic principles is helpful in filtering out noise; you appear unable to distinguish signal from noise because of your lack of reading. Indeed, you are sometimes a source of said noise. Why don't you read more and learn something?}

Well, Oracle, IBM, etc. are also on the corner with me in the bag situation. So, I won't get lonely. I'd rather be surrounded with rich nuts than broke incoherent anal-retentive purity Einsteins. The WorseIsBetter crowd is both well-to-do and popular. The MIT purists are mostly just an historical asterisk.

See WhyWeNeedSpecialists


Nice phrase: LinguaSalvatorEst - "the language is the saviour" (roughly).


There are no golden hammers ... but there are a lot of people out there trying to pound nails in using:

Convincing these folks to use a steel hammer is quite difficult.

Why do you bother if they don't work with or for you? And if they do, why are they still there? At some point, you must do what you must do. -- Bottom


Whose Burden?

Re: "I am of the opinion that when I fail to understand something it is my fault and my responsibility to do something about it."

Similarly, if somebody fails to understand your POV, you should consider it your responsibility to rework your approach rather than force them to spend 500 hours reading dry material.

And, there's also the economic consideration. Given two claimed GoldenHammers, one requiring spending 500 hours reading dry material and the other only 50, I'll go with the 50, and so will a vast majority of fellow practitioners. Plus, I can look into ten times more GH claims in a given time-frame. It's a more logical use of time. There's lots of claimed GH's to explore. - t

Yeah, no need to get a medical degree when you can make do with a game of Milton Bradely Operation, a few cool pictures from DaVinci?, and the newest theories in Homeopathy. Quacks and cranks will eat it right up; it's good for the economy for people to be uneducated morons.

Not if customers ask for road-testing and science and not rely on ArgumentFromAuthority. Some studies show that perfectly well-educated doctors erroneously overrate their personal judgment over repeated tests and trials. Human nature is biased. Even the top experts tend to get StuckOnPetFactors. Empiricism is not evil. - t

I never suggested that 'empiricism is evil' you sophist boar.

Regarding the economic consideration, top, did you mean to write "one not requiring spending 500 hours reading dry material"? Your following comment would make more sense if the word "not" hadn't been used.

Well now top, I hope you don't think we are trying to change your mind. But we know that ArgumentFromAuthority differs from ArgumentbyReverence?, and that ArgumentByCitation? has nothing to do with either. Also you do not know anything about empiricism as you refuse to read Hume or Quine. I consider it privilege and an honor to hear you so enamored of your current view on the grounds that if it requires work is must be wrong. Unlike my colleague, however, I refuse to confuse you with the sophists as they were quite clever by comparison. In any event, insulting you is like feeding chickens to ducks while shooting fish in a barrel which contains only apples. I have no idea how, of course, but given your talents I am sure you can come up with reason yourself and spare me the unnecessary effort -- that's what you do right -- help to ensure that the unexplained stays that way by inventing place holders for rational thought. I should also confess that, while I do think some of your ideas are vacuous enough to induce brain cancer, I can honestly say that if you did not exist I would need to invent you -- you are with out doubt the funniest and most enlightening AntiPattern I have ever meet. I am content to leave you be however, if you agree to sign all of your insights with your full Nom de guerre , TopMind. This will provide full warning and serve as a form of reflexive refutation. Since you clearly believe your ideas are sound, you should not object. But unsigned idiocy must be considered fair game for the reasons I have already stated. Given a choice of taking seriously your claim that any or all portions of the corpus of human knowledge may, on demand of your humble self, require de novo demonstration , recursively no doubt, or lighting you up in a barrage of sarcasm, I will light you up every time -- after all, its takes much less time and you have now shown me the error of my workaholic ways.

Thank you for providing such excellent fodder. Please Sign your idiocy in future. It will save me time, avoid bring disrepute upon this wiki, and grant me leave to avoid making your fragile ego an unintended causality in the war against nihilism. As I say, to the extent that you think your ideas have merit, you should not object to signing them TopMind. I concur with your decision not to use your RealName -- It suggests that you are smart enough to know better which I fear implies much darker motives for your conduct.

TenSeven -- Bottom

Blah blah blah I'm evil and lazy and dumb and you are smart and articulate and produce wonderful detailed evidence, scenarios, and documentation worthy of lofty prizes blah blah blah. Good riddance Professor Blowhard. I'm from the Show-Me state, and you are from the Blow-Me state. - t

Fewer ad hominems please.

     -- Ass , Bottom , whatever you like 

I hope this means that at least we are not friends. -- Bottom

Marc, why have you switched to signing as Bottom? Are you dyslexic? Your comments are instantly recognizable by their typos, so you might as well use your own name.

My comments may have typos but they belong to me not to the comments. I use --bottom for fun, and because arguing with top makes be think the world is upside down. Also I see no point in associating my name with this foolishness. But in any case it really is more trouble than its worth. If I really wanted to hide I think I can manage to spoof an IP or two.

   -- Ass (I think that one is even more to the point... as I must be one to still think its worth the effort. 

I always think it's funny when people (of any intellect) 'bicker about bickering' not to mention the insult(s).


There seems to be a pattern where one over-extrapolates a particular situation. They used a certain tool or technique for one particular project or domain, and times were good. But it's hard to know if they found a true GoldenHammer or if it's something about clicking from a team or management or historical circumstance. There are consultants who grew wealthy off of COBOL, but does this mean that COBOL is a GoldenHammer? Or did they just happen to have a knack for COBOL, customer relations, FastEyes, or something else or a combo? See also WebStoresDiscussion.


See: HowCanSomethingBeSuperGreatWithoutProducingExternalEvidence, HolyWar, NoSilverBullet, FanBoy, BorgGoldenHammer

CategoryAntiPattern, CategoryEvidence


AugustTen


EditText of this page (last edited August 8, 2014) or FindPage with title or text search