When my daughter was born, and even during the nine months leading up to it, my wife and I read a *LOT* of books. On pregnancy, on child rearing, on labour, on how to cryogenically freeze the blood from the umbilical cord.
But when it came down to the really hard questions, I did what almost every new parent does: I called an expert I trusted. I.E. My mother. See, books can take you only so far when you’re learning. Yes, they’re important to get a general sense of things but nothing beats a proven expert’s opinion and, even better, good old-fashioned experience.
I remember a conversation I had with said expert. At the time, I was asking about some stupid little thing that new parents worry about. After she calmed my worries, I asked my mother: How do you deal with all the conflicting advice you get from people and books and magazines?
She said: Do what you think is right, then find a book that says you did the right thing if it’ll make you feel better.
Now, eight years after the birth, I’m a little more seasoned as a parent. I’ve gained some experience and can handle most anything she throws at me (though she still surprises me). There are more than a few cases when I’ll consult with peers on things like study habits, social skills, symptoms for illnesses, but for the most part, I leave it up to an intuition that has been honed over the years.
It’s about time to bring this back to software development and hopefully, you’ll see the parallels. If not, well, they can’t all be gold.
I’m not suggesting you call your (or my) mother the next time you need to figure out how to resolve a dependency. But chances are, you have a network of peers and experts (sometimes the same people, sometimes not) that you turn to when you have questions or just want to discuss software in general.
That, coupled with the aforementioned old-fashioned experience, is how I become a better software developer/parent. Books and articles and blogs and even discussion groups are good for giving you a sense of what’s good and bad. But if you’re faced with a situation you’ve never seen before, or if you’ve done the "right thing" and are feeling something’s off, it’s time to break out the free will, baby.
This is important for people who are just starting out in software development or even in an area of it they haven’t much experience in. It can be overwhelming trying to figure out what the "right thing" is. Or worse, you get into a situation where the "right thing" doesn’t actually apply to your scenario specifically and you start fretting about whether you should deviate.
I’ve been putting "right thing" in quotes because, well, you can’t see me making quote-y motions with my hands a la Dr. Evil. But rest assured, I’m making them. And the reason is that the "right thing" differs from one situation to the next and, more importantly, from one person to the next. All it takes is one look through the altdotnet discussion list to find an example. Even given the exact same conditions, one person’s preference may not match another’s. And both may be equally valid.
So if you’ll feel better having a second aggregate root in your domain, by all means do it. But make sure it isn’t simply a quick fix so you can go home. Maybe a single aggregate, lazy loading, and a unit of work will solve your problem. But then again, maybe it won’t.
In the end, a little confidence goes a long way. You’re smart people. Like the title says, if it feels good, do it. But make sure you are always questioning what feels good.
Kyle the Enlightened