Architecture or Design

We’re looking to hire an architect these days, an enterprise architect to be precise, and one of the questions I’ve been asking people is what is the difference between architecture and design.  Nobody has come up with my answer yet, and so, I’ll post it here and see if that improves the odds.

Much like the standard answer regarding the difference between a program and a script, the standard answer is deeply unsatisfying.  Most people, when asked about the difference between architecture and design respond that it’s about the size of the components being designed.  Generally, folks are pretty sure that design at the class or method level is definitely design, while figuring out how processes work together, especially over distributed systems, is definitely architecture.  Where is the line, though?  If I package my classes together into libraries, and think about them at that level, does it now become architecture?  What if my system happens to consist of two short batch programs that write and read a file, perhaps across a network, is that enough to be architecture?

The question of design or architecture is an important question to consider, not because we’re hiring an architect right now, but because one of the questions that developers rightly ask as they become more and more proficient is “what do I need to demonstrate in order to become an architect?”  The short answer is that minimally they need to demonstrate some architectural skill, but then it’s really hard to define exactly what that is, and how do you compare one person’s architectural skill with another’s.  It’s even harder to tell them how they can go and get some architectural skill!

Thinking merely about the size of components doesn’t help those developers because, well, what’s big enough to be considered architecture?  And anyway, what specific skill is it that you expect them to pick up as they become architects.

The specific skill that separates design from architecture is considering the business side of the technological proposal.  Specifically, a designer who is thinking in terms of initial and ongoing costs of their solution, and whether the value delivered by the solution is sufficient to warrant those costs is doing architecture.  The designer who draws components on a whiteboard, no matter how grandiose those components might be, is only doing design until they start thinking about the implied costs.

Thinking about costs leads to all the other aspects that usually fall into solutions architecture.  In order to understand the initial build cost, the architect has to make sourcing decisions.  Hardware costs come from the deployment view of the architecture, which means the designer needs to understand how scale and fault tolerance will be achieved.  The distribution model and the data architecture imply network costs.  A design that includes manual step in the business process will incur ongoing labour costs, which may or may not be justifiable relative to the initial build cost.  An architect who isn’t thinking about these costs in relation to the business is only doing part of the job, and their solution while technically superb will fail.

Note that the intuitive answer still works.  Design at the class level rarely has real cost implications.  Design at the component level, on the other hand, often does.  The design that specifies two short batch programs that access a file over the network might be architecture, but probably not a very good one.

So, when your developer is asking, “what do I need to do to become an architect?”  The answer is not, “draw bigger boxes on the whiteboard,” but something along the lines of “talk to me about the cost of your solution, what other approaches did you consider and what would their relative costs be.”  Get your developers to think in these lines, and they may grow up into architects who deliver successful solutions.

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s


%d bloggers like this: