So, yeah, deployments suck. But they certainly don't have to. All Code is a SharePoint-specific implementation of Deployment Driven Design; think of DDD as a .NET interface and All Code as a concrete class that implements it. All Code provides the environment configuration, (both the servers and Visual Studio) scripts, and, of course, code that's needed to build out a SharePoint site with a single command.

And it's the fun part. But what's really dear to my heart is DDD; it's the attitude and foresight needed to architect your solutions with the consideration of deployment as a first class citizen. It's about solving the problem of keeping different environments (across the team and across the software lifecycle and across the enterprise) in sync. It's about doing things the right way, or, more accurately, the same way.

Every time you find yourself getting frustrated and configuring something manually, pause. Every time you find yourself saving time by hard coding something, pause. Every time you find yourself getting lost and going straight to the data store, pause. Every time you find yourself taking a deep breath before some hack, some kludge, or something that you know is just bad, pause.

I say "pause" and not "stop" because whatever it is that you're doing which could cause your Computer Science 101 professor roll their eyes (or cry) might not be wrong; it might not even be bad. Not only are best practices subjective, and sometimes political, but also ambivalent toward edge cases. In other words, no one can say that any approach is one hundred percent correct in all scenarios. I am certainly not that audacious.

As developers and architects, we all know that pre-hack feeling. It's a rush of adrenaline mixed with a sweat of anxiety. Personally, when I'm debating hacking my way through something, I flash back to my childhood and recall a particular evening in second grade when I showed my mother a homework assignment that I chicken-scratched my way through so as to get back to my game of SimCity as quickly as possible.

"You can't turn this in," she said, calmly handing it back to me.

"Why not?" I asked. "It's done and it's right." Her calmness quickly evaporated.

"It's sloppy. What if your teacher can't read it? It wouldn't even matter if it's right!"

I was so pissed. I marched downstairs to the basement, fired up my Pentium 90 PC, and typed the whole damn thing out. When I was done, I presented the final version to my mother with a scowl on my face. She smiled and nodded. My teacher didn't seem overly impressed. I had apparently done double work for no reason. I was so pissed.

I didn't learn my lesson until the next homework assignment was given, and I saw that I could reuse parts of the previous file as the starting point. The double work from the first assignment saved me so much time on the second; I spent less time, in fact, than if I had done both by hand. Of course I didn't realize it at the time, but I had just completed my first repeatable deployment.

And since then, it's only gotten easier.