Welcome to MSDN Blogs Sign in | Join | Help

Welcome to The Metaverse

Navigating the service-oriented, identity aware metaverse

News

  • Disclaimer:
    The content of this blog are my own personal opinions and do not necessarily represent Microsoft's position, commitments or strategy. In addition, my thoughts and opinions often change, and as a weblog is intended to provide a semi-permanent point in time snapshot you should not consider out of date posts to reflect my current thoughts and opinions.




    Add to Technorati Favorites
Architecture & Change

Whilst writing a reply to Tom's comments on a recent post, I realized that my thoughts might make more sense as a post than a comment:

I think Tom hit on something that a lot of us spend a lot of time arguing about, but rarely articulate explicitly and clearly in our posts, articles, whitepapers and books - the importance of architecting systems properly. I'm not going to attempt to indicate how we should architect our systems, nor am I going to propose the nature of a given architecture at this time.

What I do want to comment on is the absolute need for sound architectural principles and practice, especially as we begin to move into the realms of building Service Oriented systems that integrate multiple previously-disparate platforms and technologies. The advent of the SO wave of concepts and the technologies that enable us to build these systems in no way obviates the need to carefully architect, design and build our future systems.

Without a sound architecture that takes into consideration the needs of the end users, the available technology and infrastructure and the capabilities of the system's builders, it's unlikely that a system will be a success. How many times have we all seen apps that look fantastic, but perform poorly, or systems that are fast and relable as heck, but unusable and monsters to maintain and update?Good, clean, sound architecture is the core of a successful system which involves as much art as science. This is a hard-won discipline which isn't found as often as one would like and when it is found, it's often overdone to the most extraordinary degree.

And this latter point is very important - it's essential to balance the need to carefully architect a solution with the need to actually deliver what the users and consumers of the system need in a timely and cost-effective manner. Unless you absolutely HAVE to, there is typically little point in spending 2/3/5/10 years working on an entire detailed enterprise architecture prior to building it, which might then take another 2/3/5/10 years. By doing this, one ends up building the system using tools, techniques and processes which are, by the time the system is complete, often horribly out of date and more costly to maintain than if an iterative approach was adopted from the outset. And, of course, the systems we build often no longer meed the needs of the business which has often changed considerably since the project was architected.

We as a species seem afraid by the notion of change and yet it's change that often excites us the most and it's when "times are a changin'" that we tend to excel. Why then are we, as architects, designers, developers, testers, managers and operators of IT systems so afraid of change? Why do we continue to fear change rather than embrace it? Why do we continue to spend far too long designing systems assuming that the world around us will remain the same to then hold up our hands in horror when we realize that everything has changed ... again?!

Why don't we start with the mindset that everything is going to change and that nothing will stand still? Why don't we design our systems so that they can change and that we expect that they will? Why don't we adopt a more iterative approach to designing and building systems rather than trying to repeatedly boil the ocean with our processes and practices?

It's my fervent belief that this is the mindset that will lead us to design systems very differently in the future - especially since we stand at the dawn of a new age of systems and technologies that will enable us to be far more productive and dynamic than ever before. Let's throw down the conservative, staid, slow, cumbersome procedures and practices, tools and technologies of old, and embrace the following:

  1. You just never know what's going to happen in the future so don't aim too far ahead
  2. Deal with what you know to be true today
  3. Assess what's coming down the tracks in the near future
  4. Plan to adopt the cream of the crop
  5. Don't assume the world stands still - believe that things will change
  6. Architect, Design and plan appropriately

Thoughts?

Posted: Friday, September 09, 2005 9:20 AM by RichTurner666

Comments

Sean Chase said:

Thoughts??? How about, "this wins the Post of the Year Award." :-)
# September 9, 2005 4:07 PM

Wolf Logan said:

Sounds a lot like the Agile philosophy (Extreme, etc). My experience with Agile methodologies indicates that they're very good at dealing with change, and they produce remarkably fine systems, but they require engineers with extensive and subtle skills.

There are opposing forces here: a great deal of traditional systems design and "architecture" is intended to make the bulk of the coding "foolproof". That is to say, the designer wants to make decisions that remove a great deal of risk from the coding portion of the project. But tying down the design this way leads to the hidebound architecture you describe, and when the environment changes, the system's put at great risk anyway. At the other extreme, the designer wants to specify only the general way that subsystems interact, trusting the engineers to build appropriate components that work well together. If the engineers are clever and good at what they do, this can yeild excellent results...but if they're not top-notch (essentially architects in their own rights), the system will collapse into chaos.

With buildings, from which we seem to draw a lot of our architectural metaphors, a type of compromise has been reached. Ordinary, day-to-day buildings are conservatively architected from time-tested, approved techniques (framing, foundation, roofing, etc), and assembled by ordinary workers.

More elaborate, unique buildings are architected with a combination of these conservative techniques alongside the occasional innovation or flourish, which is carefully analyzed and tested before it's deployed. These buildings are constructed by specialist workers, but generally still with ordinary skills, and monitored by more highly-trained specialists who have carefully studied the new, innovative techniques.

The most unique and expensive buildings are architected using a large number of potentially innovative techniques, developed in coordination with highly experienced specialists and carefully planned to fit together only in this one special building. These buildings are assembled using hand-picked teams of carefully trained and experienced workers, who bring a great deal of specialized knowlege and skill to the project. The resulting buildings are marvels, but they're also hideously expensive.

Perhaps software systems fall into similar groupings.
# September 9, 2005 7:47 PM

RichTurner666 said:

Thanks for your thoughts guys (and Sean, if you're trying to score free t-shirts at PDC, then pop over and say hi!).

I think Wolf has very eloquently outlined many of the challenges we face today through comparisons with how house-building architecture works.

He also states that many architectural methodologies propose to better handle change and enhance agility.

I'm not prescribing a methodology - I'm suggesting something much more fundamental. I am suggesting we totally change the the very core of our expectations and assumptions. Assuming the world is a safe, non-volatile place to be is an exercise in futility. Let's embrace change and the power it gives us. Once we do that can we then begin to form effective methodologies that enable us to deliver truly agile services.
# September 9, 2005 9:07 PM

Mitch Labrador said:

I second Sean. Do I get a t-shirt too? :)

I look foward to seeing the WCF team at the PDC, I definetly have a few questions for you guys :)
# September 10, 2005 12:17 AM

Jason Haley said:

# September 10, 2005 7:52 AM

Wolf Logan said:

----
I am suggesting we totally change the the very core of our expectations and assumptions. Assuming the world is a safe, non-volatile place to be is an exercise in futility. Let's embrace change and the power it gives us.
----

That is, essentially, what drove the development of Agile methodologies from the beginning: recognizing that change is not only inevitable, but when properly approached, becomes a source of strength. If you've not already done so, I strongly suggest you investigate Agile methods. A good place to get a birdseye view is at http://www.agilealliance.com/home

Since the late '90s, practitioners of Agile methods have been exploring ways to redefine how we approach designing and building software in full recognition of the messy, complicated, chaotic world in which we work.
# September 10, 2005 9:39 PM

RichTurner666 said:

Hey Wolf - yep, I'm familiar with many proposed "agile" methodologies. However, while many "agile" methodologies propose the notion of being amenable to change, I don't think they go far enough.

I'm talking here of us ... you and I ... architects, designers, developers, testers, operators and managers everywhere ... US accepting that change will happen and fundamentally changing our mindsets to accept, expect and embrace the opportunities that not expecting the world to stay the same will give us.

This is more foundational than just adopting a methodology that tells you what to do when things change. This is about changing ourselves to no longer fear uncertainty.
# September 11, 2005 2:28 PM

Wolf Logan said:

Ah...then I see where we are miscommunicating. I believe I may have made the shift you're trying to describe many years ago. In my view, uncertainty isn't something to fear or control, but a simple fact of life. Agile methods offer a way of approaching uncertainty and change while still getting a job done.

In particular, I find that Agile methodologies don't "tell me what to do when things change" -- they often don't tell me what to do at all. Instead, they force me to realize how I have to organize my own discipline and skill to reach a goal when there are few dependable landmarks.

I admit I'm a little surprised that anyone still believes it's possible to accomplish much in the software world adhering to a rigid framework, surrounded as we are, for years, with evidence to the contrary. I've often had to "train" executives to recognize that risk-management in software development is less about tightening control than it is about staying light on our feet and dealing with each day's changes. When you know you can't control it, your best investment is in the skills to "read it and ride it"...to recognize what's going on and respond to it intelligently.

I think we agree on the importance of expecting uncertainty and change. I think we disagree on how novel a concept this is.
# September 12, 2005 4:07 AM

RichTurner666 said:

Hey Wolf - I am in total agreement with what you've written here. Agile methods when used appropriately are indeed very liberating. However, I have seen some treat some agile methodologies (and aren't the terms "agile" and "methodology" an oxymoron? ;)) with too much reverence and then get very stuck indeed!

What I am proposing here is abosolutely not a novel concept ... for many of us, but it appears to be very novel indeed for many of the people with whom I talk. I still hear repeatedly that organizations approach building systems in a very long-winded waterfall approach which results in still-far-too-prevalent failed projects.
# September 16, 2005 1:02 PM

Welcome to The Metaverse said:

I received an email from a long-time follower of my blog that I thought might serve to spark a little

# May 10, 2007 8:23 PM
Anonymous comments are disabled
Page view tracker