Dartboard-Driven Design
I swear. Sometimes I think certain software architects must have a dartboard, each segment containing a design pattern, you know, Adapter here, Observer there, Factory over there. When it comes time to design something, they throw a dart.
“Ooh, Memento!”

Like you, I'm a fan of classic Gang of Four design patterns. But all too often it seems like architects pick their design patterns out of a hat. "Hmm, I've never used Visitor before, let's try that." You could call it dartboard-driven design. Just pick your pattern and go!
When Kent Beck, Ward Cunningham, Jim Coplien, and the Go4 started identifying and codifying programming patterns some years back, probably not what they intended.
Design patterns were an application of the architectural theories of Christopher Alexander to the domain of programming, and Christopher Alexander is a seriously Roarkian kind of dude, and patterns in this sense are a Roarkian abstraction: a way of coalescing the ideal form of a piece of software according to its precise function. We can connect the dots from Ayn Rand's / Howard Roark's famous and universal statement of design, circa 1943...
Here are my rules: what can be done with one substance must never be done with another. No two materials are alike. No two sites on earth are alike. No two buildings have the same purpose. The purpose, the site, the material determine the shape. Nothing can be reasonable or beautiful unless its made by one central idea, and the idea sets every detail. A building is alive, like a man.
...all the way to the modern school of object-oriented, pattern-based software development, circa 2009. The problem is that these pesky design dartboarders have poisoned the well, to such an extent that some developers have sworn off patterns entirely. Unfortunately, because [insert cheesy end-of-post conclusion here] design patterns promote software health.
(No, seriously. I just want a Design Patterns Dartboard for my wall. Entire point of this post. Thanks for reading and let me know.)
Use the form below to leave a comment.
- Of Gravatars and Robohashes
- Optimizing VP$IP
- A Question of VP$IP
- John Carmack: Script Interpreters Considered Harmful
- Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters
- BROWSE ALL POSTS
Subscribe to Coding the Wheel over email or through any RSS reader. Coding the Wheel has been published since 2008.
- How I Built a Working Online Poker Bot, Part 1, 2, 3, 4, 5, 6, 7, 8
- Summoning the Harry Potter MMORPG
- Are Commercial Databases Worth It?
- 21 and the Monty Hall Paradox
- Online Poker and the Multi-Tabling Effect (34)
talia wrote: Ping G15 Fairway Wood Mizuno MP 53 Irons Mizuno MP 68 Irons Mizuno MX 1000 Irons ... - Online Poker and the Multi-Tabling Effect (34)
talia wrote: Ping G15 Fairway Wood Mizuno MP 53 Irons Mizuno MP 68 Irons Mizuno MX 1000 Irons ... - The Coin Flip: A Fundamentally Unfair Proposition? (92)
carla wrote: great post Thanks for sharing! [mutui][1] [1]: http://www.finmutui.it/ "mutui" ... - Summoning the Harry Potter MMORPG (1593)
AmberTheHarryPotterNumber1Fan wrote: Oh Does anyone know when it will come out? - Full Tilt Color Coding In Twenty Minutes or Less (34)
Timber Decking wrote: [url=http://www.deck-max.com.au/]Timber Decking[/url] [url=http://www.timberdeckingsydney.net.au/]Timber ... - Summoning the Harry Potter MMORPG (1593)
Tekken9 wrote: There is no game, at least not yet. - The Programming Aphorisms of Strunk and White (90)
parkeren wrote: So that we will follow and what shall be the first step to do so, because everyone will like this software ... - Online Poker and the Multi-Tabling Effect (34)
Anonymous wrote: This was an entirely new concept that Titleist Japan & Titleist US worked together on to create. They ... - Summoning the Harry Potter MMORPG (1593)
AmberTheHarryPotterNumber1Fan wrote: How do i play the Game? ;{ - The Coin Flip: A Fundamentally Unfair Proposition? (92)
maria wrote: i like this article and got info.this is very nice and popular site ,it site have informative and intrusting ... - The Coin Flip: A Fundamentally Unfair Proposition? (92)
Brian wrote: This is fascinating. I wonder if there's a similar bias vis a vis the coin flip during a football ... - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Brian wrote: This is certainly not a hollywood blockbuster [dating site][1] [1]: http://www.basecandy.com/ ... - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Brian wrote: Singles looking for [dating websites][1] can join now. [1]: http://www.basecandy.com/ ... - Full Tilt Color Coding In Twenty Minutes or Less (34)
Photo booth san diego wrote: Appreciate your making the effort to discuss this, I find myself strongly about this and love mind ... - Of Gravatars and Robohashes (20)
rake wrote: [rake][1] you provide the nice information , gravaters are amazing [1]: http://www.rakebackrage.com/ ... - The Programming Aphorisms of Strunk and White (90)
Steve Waters Vancouver wrote: A random act of kindness! - Movie Doppelgangers: B-Movie Ripoffs of Hollywood Blockbusters (14)
Bradly wrote: Battle: LA was a great movie (the new one that is). I have noticed a lot of very similar movies, mostly ... - Summoning the Harry Potter MMORPG (1593)
Shawn wrote: Haha, these photos are classic! I'm actually not a fan of the Harry Potter movies but I do play ... - A Word About Authenticity (57)
Shawn wrote: Being authentic is very important. If I'm playing poker against a bot and it goes all in on a 2, ... - Coding the Tweet: Building a Custom Branded Twitter Application (71)
Shawn wrote: Using Twitter to promote a business is extremely popular today. I actually found a place to train ...


20 comment(s)
Lulz James. I'll get right on that (the Wikipedia entry). By the way, I've got to have this dartboard for my cube. It would be an awesome piece of programmer schwag, and kind of a statement on software development as a whole. Make it happen.
I'll put one in the break room next to the Jump to Conclusions Mat.
I vote for the "Beer" design pattern, highlighted in red. Obviously inserted as a nod to yours truly.
awww, why isn't it a flash game? :-(
Nice touch with KISS on the bullseye.
I agree about the bullseye did not see that at first.
You could possibly get in touch with ThinkGeek.com about the dartboard. Don't know if they consider "outside submissions" but there are always places like this which do custom dartboard printing:
http://www.dartboard-magnetic.com/custom-dartboard.html
I would certainly pay to have one of these in my cube.
Design patterns were invented by the Gang of Four. Coplien had nothing to do with it, and Christopher Alexander, who wasn't even a programmer, had zero to do with it. Patterns were mostly a fad of the late 90s, hardly anybody bothers with them anymore.
Just FYI.
@Arnold have you ever actually worked in a software development shop? Your comment is not only factually incorrect, it's lazy. Try actually working as a programmer before you sound off on things you (obviously) know nothing about.
The dartboard is somewhat epic in its geekery so I approve, even though I don't consider myself a patterns sort of guy.
You could also do this with programming languages, operating systems, etc.
Love it.
I didn't even know some of these were patterns. I mean, "guarded suspension"?
I think one area where patterns are really coming into their own is in multiprocessing. Running across multiple cores/processors will foster a whole new wave of patterns, when it finally happens. Of course these patterns will probably be incorporated into the Clojure-esque set of languages that will dominate development once the switch to parallelism is made.
For those who may not be familiar with some of the hidden meanings above:
KISS at the center of the dartboard means:
http://en.wikipedia.org/wiki/KISS_principle/
Also, "Big Ball of Mud" isn't a formal pattern, but it's inclusion here is funny.
http://www.laputan.org/mud/
Great work as usual James. I like these little "filler" posts you do from time to time.
You should probably attribute that Fountainhead quote, as I think this is one not many people today are likely to have read.
Interesting article in the NY Times today (I noticed they linked to your earlier post on coin flipping, how did you manage that?). "The Demise of Form Follows Function".
http://www.nytimes.com/2009/06/01/arts/01iht-DESIGN1.html?_r=2
It seems like your poker-related posts are always a lot longer than your classical computer science posts. I'd prefer to see some in-depth discussion of classic computer science issues. Not that I have a problem with the short and sweet posts but it seems like your post length is a little lopsided.
Verbal-masturbation..
Are you building a house, or making something work? Sure a "solid foundation" and all those parallels, and metaphors. But you aren't making something more akin to a watch then you are a house?
I'm all for some sort of organization, but IMHO to much thought on the "how, when, and where" is counter productive. Other things to consider? How easy is it to read and use by others? I hate it when I see 10,000 lines of flowery text in headers, and very little substance? If it's just you coding it (other then coming back and remembering what you did) who give's a $hite?
I'm just saying there are different view points. I'm not advocating full on "cowboy", but then is it really necessary to always design everything to the n'th degree and must you label and try to categorize everything? Coding some small program.. probably not. Coding the software for a bank, for the space shuttle, a kidney machine, then by all means do!
In my experience, the "star" programmer in the company is the guy who can get it done the FASTEST and in a reasonable way the boss/client wanted it. Not the guy sitting to him self, pondering over what "patterns" to use, what the right semantics, what the right labels are, how to abstract everything out ad nauseum; over engineered..
Like Bruce Lee, mine is the way of patterns with out patterns..
Awesome. I agree with the poisoned well comment.
Also, though, there needs to be more emphasis on "Pattern Hatching" (look for posts by Go4 member Vlissides) in the software design community.
The patterns catalogues are a place to start, but maybe your (customer's) problem has a solution that is not an obvious variation on the patterns in the catalogue.
The hark's to your Rand / Roark quote. Then you need to evolve the code to a new or hybrid pattern (i.e. hatch a new one).
And to show how old this line of thought really is:
Marcus Aurelius (philosopher and emperor of Rome 161 - 180 AD): "Of each particular thing ask: what is it in itself? What is its nature?"
Now someone will find an older quote :-)
'In my experience, the "star" programmer in the company is the guy who can get it done the FASTEST and in a reasonable way the boss/client wanted it.'
Yes, we have a few "stars" like this where I work. The get stuff done really quick, and they are worshipped by management. Pitty the unfortunate sod that has to maintain their code when they get moved on to their next staring role though. Seriously, it is more often that not a bunch of NASTY hacks.
I have the dartboard printed out and on the wall beside my computer. Nice reminder how design patterns are fun water cooler talk, but not the first place to turn.
There is one large issue with the dartboard however, Singleton should also be the white space around the dartboard ;)
One of the reasons why I like visiting your blog so much is because it has become a daily reference I can use pharmacy reviews in order to learn new nice stuff. It's like a curiosities box that surprises you over and over again.