Monday, May 28, 2018

Domain-Driven Design (DDD) Defies Dogma

1 b
Domain-Driven Design: DDD is a process that aligns your code with the reality of your problem domain. As your product evolves, adding new features becomes as easy as it was in the good old days of greenfield development. Although DDD understands the need for software patterns, principles, methodologies, and frameworks, it values developers and domain experts working together to understand domain concepts, policies, and logic equally. With a greater knowledge of the problem domain and a synergy with the business, developers are more likely to build software that is more readable and easier to adapt for future enhancement.
~ Scott Millett and Nick Tune (Patterns, Principles, and Practices of Domain-Driven Design — Wrox Publishers)

Prelude 🏄

See that Tower of Babel in the picture above? Okay, so the Babel Fish was one thing—especially for you all fans of Douglas Adams’ book The Hitchhikers Guide To The Galaxy—and the Tower of Babel quite another, with the latter being the one we’re talking about here (Let me guess: The first thing that came to your mind at the mention of the Tower of Babel was the clamor arising from throngs of people in a collective din, clamoring past one other as they all speak in their own distinct languages, past others’ monologues in their languages!) 🎪

But before we get sucked into the Babel vortex—look, it could have been a whole different
vortex that we as a society could've gotten pulled into (actually, already is, the inexorable digital vortex, that is)—let’s all of us take a big, deep breath 🐳

Dedication ⛳

My regular readers are of course well aware that it's only the rarest of occasion and time when I dedicate an essay or two to an individual; this is such an occasion, and this is such a time. With that, I dedicate this essay to Githesh Ramamurthy who is one of the clearest-eyed leaders, embodying what it means to lead by example: He leads with integrity, intelligence, wit, passion, and grace. Githesh is a mentor, benefactor, and friend ☕

Whenever you read these words—and I know that you've always carved time out of your super-busy schedule to read what I offer on this blog—please know that your encouragement, plus the priceless lessons that I’ve learned from you, Githesh, will serve me well for a lifetime, especially so at this juncture as I prepare for the quest to help change the world of the Internet of Things (IoT) as we know it today! 🔮
2 b

Preamble (By Way Of A Dialogue) ⛱

—Reader: Hey Akram, so whatever this DDD (Domain-Driven Design) thing is anyway, we're willing to give it a listen. But what—more properly, “who"—in the world is this “Dogma” that you mention in the same breath as the title of this essay: "Domain-Driven Design (DDD) Defies Dogma"? 🐶
—Akram: Um, so the “Dogma” part of the story goes something like this: Being the inveterate cat-lover that you all know me as, I nevertheless once took pity on and gave shelter to a dog whose Ma was somewhat indisposed. So this dog’s Ma, as I was saying… 😳
—Reader: Yo, stop. Stop right there! Heaven help us, Akram, lest you take it upon yourself to start spinning yarns again. (Dude, we are still licking our wounds after being exposed to your balderdash—that wasn't so long ago either—having to do with your recursive take on Reveling In The Glory Of Software (On A Stormy Night!)) 👺
—Akram: May I inform your gentle ears that the name—Programming Digressions but of course—of our blog site may have something to do with digressing. But hey, we will digress no more! Instead, we'll dive headfirst into the coolness of DDD. Cool? 😎
—Reader: We’ll believe that when we see it. But yeah, go ahead… 🚧
7 b

1. Outside, Looking In 🔭

Would you rather be outside, looking in—like the little girl peering through the glass window at the intriguing rodents in a section of the zoo—or instead partake in the grand design, taking a cue from Mother Nature? If you answered yes, and if you’re up for it, let’s you and I follow the road on a quest to find out a particularly powerful software design approach that should not be allowed to languish anymore… 🚕

But first, FWIW, allow me to—and this is especially for those of you who are already looking for me to make things snappy—introduce three sparkling books (including the seminal one which started it all) which capture the aforementioned software design approach that we will be grappling with over the course of this essay:
  1. Implementing Domain-Driven Design — Addison-Wesley Professional (by Vaughn Vernon)  
  2. Patterns, Principles, and Practices of Domain-Driven Design — Wrox Publishers (by  Scott Millett and Nick Tune)
  3. Domain-Driven Design: Tackling Complexity in the Heart of Software — Addison-Wesley Professional (by Eric Evans)
Each one of the books in the list above is stellar in its own right; ignore it at your own peril (just sayin’.) Curiously enough—referring here to the fine book by Vaughn Vernon—there is a lot of cowboy humor liberally sprinkled throughout the pages of his book, Implementing Domain-Driven Design. Overall, though, it’s a book worth reading: So if riding horses isn't exactly your thing, please don’t let that blemish your view of a superb book! 🐎

FWIW, I’m going to quickly add that the same author (Vaughn Vernon) went on to write an even more awesome book called. More details—even more than you might care for!—on exactly that can be found in an essay elsewhere: Best Reactive Programming Books.

With that… Whoa, what do we have here but a cowboy—and a petrified one at that—surrounded by crisp prairie grass, looking intently at the paradoxical downtown buildings over yonder… 🌾

Something really, really anachronistic is going on here, methinks ⏳
8 b

2. Doing DDD—Until The Cows Come Home! 🐄

Here, then, is the real deal (cowboy humor and all) when you are ready to dive into the implementation details of Domain-Driven Design (DDD). But I hear you asking, Yo, how does this all defy dogma? 🐶

And to which I can only reply—at this time anyway—with the admonishment to please, Hold your horses! Everything comes in its own good time, and for especially those who wait!
As my life goes on I believe
Somehow something's changed
Something deep inside
Ooh a part of me
There's a strange new light in my eyes
Things I've never known
Changin' my life
Changin' me
I've been searchin'
So long
To find an answer
...
Good things
In life
Take a long time
yeah yeah

~ Chicago (Lyrics from (I've Been) Searchin' So Long)
Dogmatism aside, imagine this: Would you rather learn things through rote memorization or via discovery? Where would we be today—as a society whose fabric has been woven through vast infrastructures of inter-networking— had we settled for the de jure standard (the OSI layered model) instead of the far superior de facto standard (TCP/IP networking)? 📬
23 b

3. Who Is The Best Designer Of Them All? 📐

Wait a second, Akram, are we going hunting for mushrooms—or toadstools or whatever in the world those three bright-red spotted things growing on stalks are—just as we had settled down with a mug of coffee in hand?! 🍄

Sigh, me and my grand designs: All I was trying to do there was to bring to the forefront of your mind the organically evolving designs sprinkled by Mother Nature across the length and breadth of the natural landscapes around us…
3 b

4. Organically Evolving (Software) Designs 🍒

All the same—my grand and outlandish schemes notwithstanding—the oh-so organic evolution outgrowth of those toadstools provides us with a perfect segue into the wherewithal of DDD! And here we are going to hear from the horse's mouth (Okay, so Eric Evans is a fine human being, and an excellent one at that; I am merely using the proverbial dictum about the apocryphal horse's mouth.) Yep, Evans is the guy who started it all: DDD as we know it today was ushered into the world through his creative agency. 🏆

And you don’t have to take my word for it—listen to some luminaries of our industry gushing about his work:
If you don’t think you are getting value from your investment in object-oriented programming, this book will tell you what you’ve forgotten to do.
~ Ward Cunningham
 
This book belongs on the shelf of every thoughtful software developer.
~ Kent Beck
To those rave reviews I’ll add Evans’ succinct round-up of the gestalt of DDD:
I have spent the past decade developing complex systems in several business and technical domains. In my work, I have tried best practices in design and development process as they have emerged from the leaders in object-oriented development. Some of my projects were very successful; a few failed. A feature common to the successes was a rich domain model that evolved through iterations of design and became part of the fabric of the project. 
This book provides a framework for making design decisions and a technical vocabulary for discussing domain design. It is a synthesis of widely accepted best practices along with my own insights and experiences. Software development teams facing complex domains can use this framework to approach domain-driven design systematically.
Yep, right there in the pic below is my copy of Evans’ book, surreptitiously propped up against a hefty tome that you should also check out sometime, probably sooner than later, especially if you’re into AI that sort of thing. It's a rather tastefully designed book: Planning Algorithms (Cambridge University Press) by Steven M. LaValle 👻
21 b

5. Ships Laden With (Docker) Containers 🚢

Wait a second, what in the world is that container-laden ship doing here? Docker containers anyone? Anyone?! (Just sayin’, just sayin’ because I'd rather stay rooted in the physical realization of building systems versus some ivory tower stuff, and I’m not even talking about Eiffel the tower or yo, for that matter, Eiffel the programming language!) 🗼

But I digress ⛷
4 b

6. The Crimson-braided Book 📕

I love this book, tastefully crimson-braided, standing upright, bolstered at the back by the same book (Planning Algorithms from the Cambridge University Press) that we ran into earlier, of course: Patterns, Principles, and Practices of Domain-Driven Design by  Scott Millett and Nick Tune is in a league of its own when it comes to imparting the wisdom in the DDD territory.

This is one of those rare, stellar software books where it's evident that great care and attention was lavished in preparing it. Profusely illustrated, clearly articulated, replete with marvelous end-of-chapter summaries, this book is a keeper. I'm a Go/Java/Scala programmer, and have been working in the Big Data area for a while, and would have preferred the code examples to be in either of these languages. But I must confess that the C# code is pristine enough in its quality that it it's easy to follow along ⛵

The content and crystal-clear presentation is abundantly evident throughout, though I feel compelled to point out two stand-out chapters that are not to be missed:
  • Chapter 21: RepositoriesRepositories mediate between the domain model and the underlying data model. They ensure that the domain model is kept separate from any infrastructure concerns.
  • Chapter 24: CQRS: An Architecture of a Bounded ContextCQRS is a design pattern that creates two models where there once was one. Instead of a single model to handle the two different contexts of reads and writes, two explicit models are created to handle commands or serve queries for reports.
All-in-all, a terrific and delightful book, which is why I think of it as one of the two definitive DDD books, the other one being, of course, the seminal volume by Eric Evans himself (the classic book entitled Domain-Driven Design: Tackling Complexity in the Heart of Software)! 💘
22 b

7. Representations Are Ubiquitous. And Yes, Representations Do Matter 🎭

OK, Akram, isn’t it about time that you stopped rambling—we know all too well that you are a sucker for (great) books and stuff—and instead gave us the scoop on the guts of DDD for crying out loud? So it’s Akram here, saying merely this much in my defense that the deal goes like this: While DDD is not going to solve weighty issues which humanity faces—the mosaic in the picture below with love and harmony and peace suffused all over is an ideal to which we should all strive nonetheless—anytime soon, it’s only fair to mention that the way it (DDD) entered my lexicon will necessarily have us take a trip back to the time. That’s when I was working as a senior software engineer for Boston Scientific (not in Boston, mind you, but in the good old Twin Cities in my beloved Minnesota) and I noticed  a copy of Evans’ groundbreaking book sitting on the desk of one of my coworkers… 📚

My (now-erstwhile) coworker began talking about this thing called a Ubiquitous Language and stuff like that. It made some sense at that time, and I actually headed over to the local Barnes & Noble that afternoon and got myself a copy of the book; the booksellers  there, of course, all knew me by first name, and on seeing me enter the bookstore, realized full well that I must have found yet another excuse for buying yet another book (But they weren’t complaining, at least as best as I could tell.)

The bottom line is this: Representation does matter—Would you rather work with concise JSON-encoded representations of data or with their far more verbose kin, those XML-encoded representations? Would you rather do arithmetic using the lean and efficient Arabic numerals or their laborious kin, the Roman numerals? Yep, I thought you would agree 🌂
6 b

8. Fast-forwarding By 10 Years 🚂

That was 10 years ago. Let’s fast-forward to 2018—and one more time recycling a pic that appeared above moment ago—and you have the best book published on the subject of DDD: Patterns, Principles, and Practices of Domain-Driven Design by  Scott Millett and Nick Tune can serve as a model for the best that there is in the presentation of technical material! 🏰
22 b

9. Principled Design Must Be Informed By A Ubiquitous Language 🙋

Ah yes, so I was going to give you the lowdown on the essence of DDD. It’s a mindset of principled design which expects of us—the technology types—to level with the domain experts and treat them as equal partners in an approach to the design and crafting of software that is informed by a shared language (Yep, you guessed it: We’re talking about the Ubiquitous Language here!) 👍

To take the bird’s eye view, we—collectively the domain experts (the SMEs) and the technology types—should remove the artificially-erected barriers in our communication and instead work hand-in-hand to accomplish more in less time 👐
9 b

10. Oh, The Fun We're Going To Have! 👧

Oh my, and and I would tell you about the fun we’re going to have along the way! Pure, unadulterated joy is not far off. Not far at all, in fact, provided that we jettison off the arcane approaches of yesteryear… 🚛
10 b

11. Did Someone Say… Refactor? 🎯

Wait, did somebody say something about refactoring those lumbering engines like those which appear in the pic below? Oh my, I’d rather stick to refactoring my code, with the help, of course, of DDD tactics and strategies. After all, DDD is squarely about brainstorming that's informed all the while by collaborative learning 🎪

Actually, I’m going to take one step back—from my mention above of refactoring code—and talk some about refactoring design itself. I mean, are you able to sit down with paper and pencil (or stand in front of a whiteboard for that matter) and come up with a useful model right away? If you can, then you're likely in the same league as Leonardo da Vinci, and I ceremoniously—insert one drum-roll here—refer you to the following two essays:
Meanwhile, for us mere mortals, as we grapple with initial design models in the quest to refactor and evolve those models, it would serve us well if only we appreciated more that the model and the language (used to describe any given model) are not static entities; if not attended to properly, the the model and the language can easily devolve into a Big Ball Of Mud. Hey, nobody wants that! 🐐

So the lesson to draw here is: As software practitioners, not only should we tend to mercilessly refactoring our code, we should pay at least as much attention—if not more—to refactoring our software design.
11 b

12. Then There Was The Repository 🎁

Speaking of DDD tactics and strategies, allow me to introduce another DDD concept—a centrally important one at that—which deals with the notion of a Repository. See those steely-faced gents carved into Mount Rushmore as in the picture below? There you go. And look, I’m not trying to be cute here: Evan’s himself—in the picture which adorns the beginning of the central chapter dealing with Repositories—presents the image of a steely faced librarian zealously guarding a bookshelf worth of books 💂

Crucially, he notes:
The goal of domain-driven design is to create better software by focusing on a model of the domain rather than the technology. By the time a developer has constructed an SQL query, passed it to a query service in the infrastructure layer, obtained a result set of table rows, pulled the necessary information out, and passed it to a constructor or FACTORY, the model focus is gone. It becomes natural to think of the objects as containers for the data that the queries provide, and the whole design shifts toward a data-processing style. The details of the technology vary, but the problem remains that the client is dealing with technology, rather than model concepts.
~ Eric Evans (in Domain-Driven Design: Tackling Complexity in the Heart of Software — Addison-Wesley)
 
To cut a long story short—woohoo, no digressions for a change—pay special attention to the crucial role that repositories play in the practice of DDD 👀
13 b

13. I Want To Fly Like An Eagle (Or, Failing That, Like A Seagull) 🐬

Once you got that down—plus a few salient concepts such as Bounded Context, Domain Event, and Aggregate— you will surely feel the unbearable lightness of unencumbered, yet disciplined, design. Indeed, you are bound to identify with the seagull soaring above the ocean waves as in the picture below 🌊
I want to fly like an eagle
To the sea
Fly like an eagle
Let my spirit carry me
I want to fly like an eagle
Till I'm free
Fly through the revolution

~ The Steve Miller Band (Lyrics from Fly Like An Eagle)
—Reader: Wait a sec! Are we talking seagulls or eagles or what? Can we at least get that right please?
—Akram: Sheesh, some people can be, like, so picky! No matter what, remember, though that

Time keeps on slippin', slippin', slippin'
Into the future
Time keeps on slippin', slippin', slippin'
Into the future

~ Also by The Steve Miller Band (Lyrics from Fly Like An Eagle)

All good? Ready to proceed and meet even more interesting characters in our meandering DDD journey? 🎡
12 b

14. Of Meandering Neanderthals 🗿

Hoh, hoh, hoh, did somebody just say something about “…meandering journeys”? Okay, this is a bit too much to resist, and I simply can’t bring myself to close out this essay without sharing some wisdom—something that could demonstrably have been garnered only by someone deep into the cavernous and meandering landscape of distributed software systems design—which is, oddly enough, by way of a riddle that spontaneously arose in my mind during the past 24 hours. It goes like this 🙊
Question: What do you call a Neanderthal who is prone to meandering?
Answer: A Meanderthal, but of course!
So there. Now you tell me if the connection (Nexus?) of this parable-laden wisdom to the meandering landscape of distributed software systems design isn’t as clear as the day? Yes, yes?! 💤

Whoa, is that a Meanderthal—tastefully attired in that oh-so demure costume or something—in the pic below or what? I mean, wow, for one thing, it’s sure got a bevy of enthralled kids for its audience! 👧 👦
14 b

15. Lightsaber-wielding Goslings Sure Can Derail The Practice Of DDD 🔨

But no sooner had we soothed our nerves than we took a few steps in the star-board direction and came across a fierce creature as in the picture below! Exactly, didn’t I tell you? Here be monsters!! All that this gosling—and no, it’s not related in any way to mild-mannered James Gosling, the original and primary designer of the Java programming language—is missing is a Jedi lightsaber, and we are out of here, like, pronto! 🔪


Look, here’s the deal: To practice DDD with any level of focus, we need uninterrupted quanta of concentration. We’d rather not be dealing with Jedi lightsaber-wielding goslings if we are to get anywhere with designing software that is going to power the new era that is dawning… 🌞
15 b

16. Our Ships Sail Into The Harbor 🚣

Finally, we witness how the ships have sailed onto the shore, or at least some boats have! See those trawlers and fishermen hauling in their nets after a hard day’s work of the disciplined practice of DDD? Yep, it’s Entities and Aggregates all the way down…

Dare I say that our friends the turtles may wish to have a word or two with us in this regard… 🐢
16 b

17. Bright, Colorful Designs ⛄

Last, but certainly not least, you may find yourself perking up at the site of the motley crew, ragtag band of mailboxes lining a lazy street

Honestly, answer me this: If people would only get a little creative in choosing colors for their mailboxes, wouldn't life itself become all that more colorful? 📪 📫 📬 📭 📮
18 b

18. Let's Not Forget About CQRS! 🐘

Don't you forget about me
Don’t, don’t, don’t, don’t…
Don't you forget about me

~ Simple Minds (Lyrics from Don't You (Forget About Me))
As we wind down this essay, it behooves us to remain mindful of yet another player in the DDD solution space: CQRS (Command Query Responsibility Segregation). I strongly encourage you to check out the marvelous narrative on CQRS—truly one of the standout sections—in the remarkable book named Patterns, Principles, and Practices of Domain-Driven Design (Wrox Publishers, by Scott Millett and Nick Tune) 🚀

In particular, they introduce the reader to the notion of CQRS without any fuss by elegantly clarifying that CQRS
…is a simple pattern that you can apply to a bounded context. It separates the domain model into two models: a read model and a write model (sometimes called a transactional model). 
The reason for the separation is to enable a model to serve the needs of a single context without compromise. The two contexts in question are reporting on the state of the domain and performing business tasks, also known as the read and write sides. Using a single model for bounded contexts that have complex presentation needs and rich domain logic often results in that model becoming overly complex and devoid of integrity, generating confusion for domain experts and a maintenance nightmare for developers. By applying the CQRS pattern, a model is split in two, enabling each model to be optimized to serve each context more effectively.
If you are anything at all like me, you’re probably eager to fire up your favorite IDE—doesn’t matter which though for me it would be IntelliJ IDEA—and bang out some code to put this CQRS thingamajig into action! YMMV, but when we all succeed, all of us here in programming digressions, we may well have on our hands something like this densely packed scenario such as the one in the picture below ⛹

I mean, where do I even begin with the richness of it all: The legion of IoT sensors in that demure house ceaselessly emitting signals, the embedded  micro-controllers attached to the handful of eucalyptus trees standing tall nearby (and ready to transmit perhaps their eucalyptus oil-levels in real-time), or perhaps that sharp S-shaped band in the adjacent road where we be driving our Ferraris (feeling safe in the knowledge that intelligent road-signs will communicate to approaching vehicles and alert them to programmatically reduce their speed)? 🚕 🚓 🚗 🚙 🚌 🚛 🚚 🚓 🚒

(Akram, stop being lazy and just find and insert right here a link to the published conference paper or two that were based on your MS dissertation related to autonomously-intelligent vehicles using AI algorithms, including the trusty back-prop!) 👽
19 b

19. Aspiring To Sublime Designs 🌹

Hey, no Ferraris for us now; not right away, anyway. Meanwhile, let’s take in the penultimate picture or two below, that of the feathers of peacock. Are you, like me, also thinking to the timeless and inimitably graceful design that is the handiwork of Mother Nature? We—all of us technology types—can only aspire to design software that is a fraction as tasteful and graceful: Truly, the journey itself is the destination 🚥 🚲 🚦
20 b

20. Raise Your Hand If You're Still Awake… 😴

One If By Land, Two If By Sea.
~ Henry W. Longfellow (his eponymous poem, Paul Revere’s Ride)
Hang on, what kind of T-shirt is that, hanging on for dear life, clinging to a clothes hanger—which itself is hanging on for its life to a desultory doorknob in my sanguine study—with the lovely logo of the reactive summit which I attended in Austin not so long ago. But here’s the real deal: See that book, stoutly standing upright—Michael J. Casey's and Paul Vigna's fine book entitled The Truth Machine: The Blockchain and the Future of Everything—with my T-shirt in the background? And you may well be asking yourself, muttering under your breath no doubt, “Why has Akram wedged a Blockchain book in the guts of an essay that purportedly on DDD?" I wouldn’t blame you one bit if you did 💼

Then again, I simply have to make sure—so I make unannounced checks  using the element of surprise—that my dear readers are still awake. And I kid you not: People have been known to fall asleep smack in the middle of reading my essays, and continue reading while sound asleep (that being the reading analog, of course, of sleepwalking!) 😴

In the remote case that anyone is awake and—even more remotely still—they wish to look up my write-up on Blockchain, I can gleefully point you in the direction: Blockchain Adventures!
Truth machine b

21. It’s Now Or Never 🎸

After all has been said and done—here we tacitly acknowledge that a whole lot more has been said than done—we’ve reached the horizon of our journey: We are standing in front of a bridge in the countryside, a bridge that beckons us to venture outside our comfort zone. Tree-lined or not, easy or hard, straight or crooked, we simply have to cross that bridge.

Recall the image of the Tower of Babel which appears to atop this essay: Yes, far too much time has passed, far too many disconnects have taken place in the industry—technologists speaking one language and our counterparts the domain experts speaking another—that we can no longer afford to wring our hands in despair as we ruefully size up the situation in realizing that a lot of water has flowed under the bridge… ⛩

It's still not too late. But it is imperative that we cross the chasm. To put it in starker terms, it’s now or never.
17 b

12 comments:

  1. Dear Akram,
    Thank you for brightening my day with your dogma-defying wit and humor.
    You blogs are always a joy to read!
    Ami Kitty

    ReplyDelete
    Replies
    1. Dear Ami,

      - In turn, I thank you for bringing sunshine to our blog with your thoughtful ways and caring words :)

      - It is your support, your witty ways, and your unflinching encouragement (through thick and thin) that truly put the zing in my writing: What more could a writer like myself ask of their muse? Indeed, your remark about "dogma-defying wit and humor" is truly a tribute to your mentoring and encouraging a small-time writer like me. But I've learned from the best (the very best that there are), and help me get to the stage where the world is now my, well, stage.

      - "Akram, back to Earth now, quick!", I hear my readers telling me, and rather solicitously, too ;)

      - Yep, your wish is granted. I do, however, owe many (perhaps most!) of you all a glimpse into the antecedents of the word ("Ami"), which my dear reader (Ami Kitty) used in signing her name to the comment above...

      - For one thing, and you all knowing full well that as the software practitioner that I am, one who has been in the trenches (for a bit over two decades now) of designing and developing distributed systems software applications and infrastructure, that the word ("Ami") is definitely not the cloud computing acronym that we know and love (at least for those of us who have been operating in the solution space of Amazon Web Services, aka AWS) to stand for "Amazon Machine Image" ("AMI"), LOL :)

      - "Dude, what does it mean then?", you ask me, um, rather zealously at this point! So here's the deal: "A rose by any other name would smell as sweet", to quote an especially memorable phrase from my nemesis, The Bard himself (William Shakespeare of course!)

      - Okay, okay, you really want me to spell it out, don't you? (Sheesh, some people are, like, so literal-minded or something.) Anyhow, and going back to my childhood now, I grew up calling my beloved Mom and Dad by the traditional moniker each of "Ami" and "Aba", respectively (My father, who was a chemical engineer by profession and spent the larger part of his life in civil service, in serving others in the spirit of the memorable JFK quote, which I'm paraphrasing from memory here, that "A rising tide lifts all boats," passed away a few years ago.)

      - Nobody can have the place in my heart that they truly have. Nobody.

      - Love, however, and reverential love in particular, is perhaps the most mysterious force that I've grappled with in my life... Love has this enigmatic quality of creating room where there was no room before. I don't know how it happens. I just know that it does.

      Delete
    2. - And the best I can do here is to illustrate the idea by pointing you in the direction of a sublime anecdote that I came across a few years ago in a marvelously open-minded, interfaith book entitled The Fragrance of Faith. That anecdote in particular takes us back through the mists of time, amid the patina of history steeped-tradition, to The Rose of Baghdad. Ready? Okay, it goes like this:

      ~ On returning to Baghdad from his spiritual journey Sheikh Abdul Qadir faced a tribulation which was overcome with majestic wisdom. Many of the scholars of Baghdad were perturbed by the return of Sheikh Abdul Qadir who, due to his great reputation and spiritual status, had amassed a large following of disciples. The scholars gathered and devised a way by which they could send a clear message to Sheikh Abdul Qadir indicating their displeasure at his presence in Baghdad.

      ~ They ordered a large vessel be filled to the brim with water, and sent it to the quarters of Sheikh Abdul Qadir. The container represented Baghdad and the water represented the scholars in Baghdad. This indicated that Baghdad no longer had any more room for a new Sheikh.

      ~ With an ingenious stroke of wisdom, and demonstrating his extraordinary powers of perception, the Sheikh plucked a rose, which he then simply placed so as to float on top of the surface of the water in the vessel. He then ordered the vessel be taken back to the senders who, on seeing it, immediately acknowledged the great spiritual wisdom of the Sheikh, opened the doors of the city to welcome him with a flourish, and assigned him the title "The Rose of Baghdad."

      - Enter Ami Kitty ("Ami" in short as I lovingly call her: Remember how "A rose by any other name would smell as sweet") is a sublime individual, an intellectual of the highest order, and simply a terrific person to be around.

      - And one more time, just to be sure, you, Ami, are no "Amazon Machine Image" ("AMI"), far from it, in fact, LOL :)

      Delete
    3. - Finally, here's a clue (especially for those of you who are into Disney movies and that sort of thing) which might help a bit as well: In the Disney movieThe Jungle Book that is set in a bygone era of colonial India (based on Rudyard Kipling's book by the same name), the young, feral, boy-hero (Mowgli, of course) refers to the splendid Raksha (Mother Wolf, of course) as "Ami" as he bids farewell to her and the wolf pack, ready to venture out and make contact with the humans in the far-away village (after, but of course, taking care of Sher Khan, the nasty tiger).

      - Look, people on occasion don't put confabulation past me, LOL, but I kid you not here: I remember the dialog above distinctly (in which Mowgli calls Raksha "Ami" during the teary farewell. What made this memory all the more distinct (and we can talk about Shacter and the so-called seven sins of memory on another occasion, plus toss in a digression to the wonders of "working memory" as we know it, should you so wish) is that tears were rolling down the cheeks of my dear wife as we together watched the searingly sad Mowgli-Raksha farewell scene on our DVD player (right from the comfort of our home couch.)

      - So, Ami it is. A small word. And only three letters long at that. Wider in soul than the expanse of the sky, though.

      - You truly are a precious gem, Ami. Please continue visiting our blog, won't you please, and keep sharing your scintillating wit and wisdom with us? (You know just how much I love dialog with my readers!)

      - In the end, lest all of you, my dear readers, think otherwise, please know that every single one of you is as dear to me now as ever. It's just that, to paraphrase the literary genius and giant, George Orwell in his slim, slender, and splendid book named Animal Farm: "All readers are equal, but some readers are more equal than others."

      - Oh, in case anyone noticed (in the remote scenario that you've made it this far in the Comments section!) the morning lark-early AM timestamp atop this Comments section ("Posted by Akram Ahmad at 5:30 AM"), I can solemnly affirm it really is true. As my buddy Josh Suarez (an absolutely brilliant software designer and developer with whom I just had a ton of fun working together, developing server-side software, and then some, at the IT Innovation Center of General Motors, here in Austin) used to tell me, "Akram, you're a crazy early bird!" (I think this might have something to do with the fact that I was at my desk in the office by 7:00 AM every single day, month after month after...) But I digress.

      - I love you all, especially you, Ami :) :)

      Delete
    4. - "Wait a second: Surely Akram isn't back with yet another comment, and that, too, on his own essay?!"

      - Well, I'm going to solemnly reply: "That is kind of true, but please hear me out."

      - Look, for one thing, shyness never got anyone anywhere; just ask any one of the shrinking violets, and you will get a pretty good idea of what I'm talking about ;)

      - To that I will add, in passing: So while I may be pretty mild-mannered (I really am, too, and nothing is changing that anytime soon), it often belies my bulldog tenacity: Nobody is ever going to walk over me, unless, of course, they want their jaw rearranged unceremoniously. Okay, relax, I'm not into full contact sports like rugby or anything like that ;)

      - Anyhow, I had secretly been hoping that someone would post another comment; I would then, but of course, use that as my subterfuge for replying and tacking on the thoughts which I'm jamming here, instead, those being the ones that now follow:

      - The immutable laws of fluid dynamics simply cannot be altered. Period. So in case anyone noticed (I did, for one, and with an acute sense of mortification), I may have implied exactly that (and thereby rupturing a schism in the fabric of fluid dynamics wisdom) in my infelicitous wording of the part of the anecdote (in the second part of my reply to Ami Kitty's comment) which has to do with Sheikh Abdul Qadir's ingenious stroke of wisdom in ordering a large vessel to be filled to the brim with water, and subsequently (and this is where the infelicitous wording had me by the throat!) when the Sheikh "plucked a rose, which he then simply placed so as to float on top of the surface of the water in the vessel".

      - (By the way, is anyone even noticing my embedding those carefully-curated links throughout the length and breadth of my comments and replies, in addition, of course, to my usual embedding of garrulously-garnered links throughout the length and breadth of the essays you read around here?!)

      - At any rate, can you imagine a globular rose, in all its rosy loveliness, being plucked from its stem and then placed on the surface of a vessel filled with water? Um, it sure is going to sink. No doubt about it.

      - So what the narrative really should have said is that the Sheikh plucked a handful of "rose petals", which he then placed on the surface of the water so as to have those petals osculate with the meniscus (sorry, that's just another one of those SAT/GRE rote-memorized, million-dollar words from a bygone era in my academic training!). Earlier, at that time, I didn't realize the loveliness of the whole anecdote, and how I was clearly managing to wreck it during my original narration. Oops!

      - Okay, I'm signing off for now: You all please don't be shy with your comments now. Shrinking violets are vastly overrated, though I love them all, nonetheless! Honestly, "with malice toward none, and charity toward all," or something close to that as in the memorable words of Abraham Lincoln. I think :) :)

      Delete
    5. Dear Akram, Early Bird,
      I'm honored to be your "Ami." I notice the acronym carries a bouquet of divergent meanings. "Amazon Machine Image" is just one, and actually sounds perfectly okay to me - even flattering. Some of the others are "American Mushroom Institute" and "Amazon Malaria Initiative," both of which are worthwhile, I'm sure, and if you wish to call me "American Mushroom Institute," I'm fine with it. I'd be less pleased to be known as "Acute Myocardial Infarction," but as long as you reassure me that "AMI," with all its multiple significance, is still a sweet smelling rose, I'll continue to be tickled pink at being called "AMI."

      Delete
    6. Dear Ami, Night Owl that you are :)

      - See, here I am, first thing in the morning, replying to you. Let me tell you: I got a kick out of reading your marvelous message, your fantastic comment! I mean, who could have thought that a simple, unadorned, and unvarnished word ("Ami") could have the mind-boggling range of divergent meanings that it evidently has: Only my very own Ami's research could have uncovered this intriguing corpus through her assiduous research!

      - (Frankly, my favorite expansion for the "AMI" acronym is the "American Mushroom Institute"; pray tell me, dear Ami, what can a lowbrow like me do become a card-carrying member of the "American Mushroom Institute"? You've always encouraged me, over the years, to set my sights high, now haven't you?: Surely this coveted membership isn't too far beyond my reach. (Hint: Please reassure me that it isn't.) Failing that, I will have no recourse but to gravitate in the direction of this old chestnut:

      Ah, but a man's reach should exceed his grasp, Or what's a heaven for?
      ~ Robert Browning

      - Oh, now how about the other "AMI" acronym expansion that you have unearthed: "Amazon Malaria Initiative". Wow, nice, but will it ship with my Amazon Prime membership? That's what I want to know ;)

      - Our other readers may well be incredulous at this, but (having a brother for a practicing cardiologist, and he is a dear friend of course) this whole notion of the "AMI" acronym expanding into "Acute Myocardial Infarction" is sheer innuendo. Far be it from any indisposition to ever visit my dear Ami! So there.

      - "Ami" will (as it always has) signify a sweet-smelling rose, Ami. Goodness, among many other things, I simply couldn't have asked for a better interlocutor :)

      - We'll do some rose flotation experiments the next time we get together. Is that a deal? (Goodness, my mind is already awash with the "relative density" experiments I used to do in the Physics labs of my high school.)

      Delete
    7. - Let's see now: Shall we tell our fellow readers about how you fondly call me "Beta"? Knowing that a majority of the readers who come hither (to read what we write and post here, together of course) happen to be technology and software types, I have a suspicion that they are going to reflexively converge on the following meaning as being betokened by the word "Beta": According to Wikipedia.

      - "Beta, named after the second letter of the Greek alphabet, is the software development phase following alpha. Software in the beta stage is also known as betaware. Beta phase generally begins when the software is feature complete but likely to contain a number of known or unknown bugs."

      - (Hint: As for those "unknown" types of software bugs, I'm momentarily relegating them to the "Heisenbug" category.)

      - Woohoo, how cool is that? The only thing, though, is that when you use the word "Beta" for me, it mean something totally different: "Son." (It doesn't get any more beautiful than this; I am honored beyond words, I truly am, dear Ami!)

      - Whether I call you "Ami" or Mom (or whether you call me "Beta" or Son), it's all good.

      - Let's wrap up, for the moment anyway, with a digression (see, didn't I tell you that we would eventually become digressors all, one day?). It goes like this, even as I know that many of our readers will nod their head in agreement, you I know for sure:

      ~ "When I use a word,' Humpty Dumpty said in rather a scornful tone, 'it means just what I choose it to mean - neither more nor less.'
      ~ 'The question is,' said Alice, 'whether you can make words mean so many different things.'
      ~ 'The question is,' said Humpty Dumpty, 'which is to be master - that's all."
      ~ Lewis Carroll, Through the Looking Glass

      Delete
  2. Dear Akram Beta: I don’t know if the American Mushroom Institute will let you join, but local chapters of mycology enthusiasts abound throughout the US., such as the Fungus Federation of Santa Cruz and the Mycological Society of San Francisco, for instance. And wow! Look what I’ve just found: The Central Texas Mycology Meetup – right in your own backyard !!! I wonder where their meetings take place? People’s basements, maybe? In any case, it should be a lot of fun to be with people who share your enthusiasm and who can teach you what mushrooms to avoid if you’re poking around in your own backyard looking for a snack. Be sure to avoid the destroying angel. It’s very pretty, but if you bite into it, it will bite you back.

    ReplyDelete
    Replies
    1. - Dear Ami Kitty: LOL, this is so poignant and paradoxical (i.e. being crestfallen and elated at the same time!) that, frankly, I'm a tad disoriented. I mean, even as I watch my lifelong dream of becoming a card-carrying member of the oh-so coveted American Mushroom Institute being shattered before my very eyes, which of course strikes me as monumentally unfair right there, my spirits are nonetheless buoyed by your mention of the prospects of those fantastic local chapters of mycology enthusiasts: Hope is around the corner... Your fabulous research has unearthed how those chapters are flourishing and how they abound throughout the US: Woohoo, that will be my ticket!

      - This whole mycology thing (far from being snakebitten or anything even remotely like that) sounds fascinating. Um, what exactly is mycology, fascinating though it sure sounds? So in my vain attempt to keep up with your staggering intellectual pursuits, my dear Ami Kitty, I sought this (early) morning (even as I rubbed my eyes on waking up and remembering to reply to your comment) to catch up with you by first looking up some references online: (1) This is the first one, and (2) this is the second.

      - I have this sinking suspicion that all this goes back (and buried deep in the maw of this essay on Domain-Driven Design) to this particular (the third, to be precise) subsection of this post: "3. Who Is The Best Designer Of Them All?". That's where, course, I had gone out on a limb and conjectured with a not unreasonable amount of foolhardiness like so: "Wait a second, Akram, are we going hunting for mushrooms (or toadstools or whatever in the world those three bright-red spotted things growing on stalks are) just as we had settled down with a mug of coffee in hand?!" OMG!! Methinks I've done it now, and I'm done for :( :(

      - Or maybe it is (and here we will turn our collective attention to the memorable words of the one and only Mark Twain) when he had ruefully noted how "The news of my death was greatly exaggerated!" Good grief, is this lachrymose or what? (Anyone remember that line from the TV show, "Judging Amy"? Dude, it's getting more and more macabre by the minute.

      - Sigh, me and my grand designs: All I was trying to do there was to bring to the forefront of your mind the organically evolving designs sprinkled by Mother Nature across the length and breadth of the natural landscapes around us.

      - But fear not: My one and only Ami Kitty will surely rescue us by helping snatch victory from the jaws of defeat. One thing is for sure: I ain't going anywhere close for sure to those nasty-sounding "destroying angel" mushrooms that you mentioned. So I prefer my food (and I can be picky) to be of the kind that doesn't move (at least not too much wiggling, please!) when I try to eat it ;-)

      - Ah yes, there are a ton of meet-ups in my town (Austin) for sure: Maybe I'll start a Domain-Driven Mycology Design meet-up one of these days. Stay tuned.

      Delete
  3. Hey Akarm.

    Great essay as usual. I lost count of times I laughed.

    My professor had talked of DDD. While his introduction was brief, your essay has me convinced. I would be exploring more into this.

    Thanks for the essay, and apologies for the late reply. I hadn't had a chance to comment due to some legal matters.

    Thanks again for all the great work.

    ReplyDelete
    Replies
    1. - Hey Amey, thanks so much for the delightful comment! Look, for one thing, I love it when my readers get so giddy (presumably from reading what I write and post here, or at least that is my hope anyway, LOL) that they start misspelling my name ;-)

      - It's all good, it's all good: No worries :) :)

      - For another thing, you underscore a sentiment that remains near and dear to my heart, and informs everything that I write and post around here: If I can bring the pulsating excitement of the programming and engineering communities to the (general) public and, in turn, get you all excited, then I know that I have succeeded in some small way.

      - Indeed, to that end, as you graciously commented: "Great essay as usual. I lost count of times I laughed."

      - Here is an example (and where I was replying to another reader's comment on an essay elsewhere on this blog) and where I underscored precisely the sentiment that your comment reminds me of. In the context of "...software actors and amazing benefactors..." Here is the link: The pursuit and practice of software engineering should really be about having fun!

      - As such, I got a kick out of reading what you shared about how, "My professor had talked of DDD. While his introduction was brief, your essay has me convinced. I would be exploring more into this."

      - I am flattered by your words, especially when you say, "Thanks again for all the great work."

      - It's really the participation by readers like you, Amey, that makes this blog all worth the while. Some of the essays that I post around here get a trickle of comments, while others get a steady flow of comments, and yet others a runaway torrent :) :)

      - Having said that, and speaking of a torrent of comments him, this comes to mind, and which you all can check out at the link here: Comments section of my essay on the software engines powering our digital society.

      Delete