How to build a distributed application: Introduction

If you set out to devise a theoretical framework for both the design of distributed applications and the process of building distributed applications, it seems unlikely that you would base it on a theory for armed conflict. Even though we may talk of "death march" projects, I've never experienced any real life or death struggles in the world of software development. And yet, I've come to use Col. John Boyd's OODA loop as my framework for how to build a distributed application (this will seem doubly ironic to those folks who know me well). Boyd had a laser-like focus on destroying the enemy in the most efficient manner possible by improving "our" OODA loop while disrupting "their" OODA loop. In software development, there is no "them" (even if we developers, in fits of extreme perversity, sometimes think that our customers or the system administrators are enemies). I use the OODA loop with a completely inward perspective. That is, I use it as a measure of how well my team or application is working.
What is the OODA Loop?
A complete discussion of the OODA loop is well beyond the scope of this blog, but Boyd's fundamental thesis was that the quicker you iterate through the loop, the more effective you become. The most common misimpression is that his thesis is simply about speed. To the contrary, the real key to understanding the loop is that quicker iterations come primarily by combining an initially accurate orientation, which allows you to favor implicit guidance and control (the thick green arrows in the diagram above) over explicit decision-making, with the flexibility to accommodate changes in your orientation based on observation. Automated unit testing makes a good example from the world of software development. Many developers believe that writing unit test will inevitably slow them down. If you take a static view of the process, this seems obvious:
production code + unit tests > production code
But once you experience developing with effective unit testing, you realize that you can actually write better code faster. In OODA loop terms, you've made the creation of unit tests part of your Orientation ("requirements") phase. Each time you make changes to your code, you run the whole set of unit tests (this is implicit guidance and control) and you can observe whether the changes have adversely affected your conformance to spec (red light/green light). You gain the ability to tighten your coding loop which, in turn, leads to an overall decrease in the amount of time it takes to deliver the right code.
Another way to look at this diagram is to use it to model the architecture of a distributed application. In this view, the decision diamond represents a user decision, the "implicit guidance & control" boxes represent application logic, "outside information" represents external system inputs, and orientation represents application state. I suspect trying to visualize a distributed application this way will be very disorienting to most application architects and developers because it is initially very difficult to relate this view to our normal mental constructs for application design. I find it extremely useful, because by concentrating on designing applications that can speed up this OODA loop, I can discover application patterns and techniques that provide more effective business process automation. Using this model leads directly to distributed applications that are, in today's parlance, service oriented.
Where do we go from here?
This post is designed to lay the groundwork for a series of posts that will translate this somewhat esoteric theoretical framework into practical advice. Before I write those posts, I'm interested in some specific feedback. Would you like me to explain more about the OODA loop and how it's commonly used outside of software development? Do the examples I used make any sense at all to anyone besides me? Does anybody think it's important to a theoretical framework for building distributed applications (whether or not you think mine's full of hot air)?

Posted Jan 19 2006, 05:06 PM by john-cavnar-johnson

Comments

Rob wrote re: How to build a distributed application: Introduction
on 01-19-2006 2:46 PM
Can't see the image John.
John CJ wrote re: How to build a distributed application: Introduction
on 01-19-2006 2:49 PM
I've fixed it now. Let me know if it still doesn't work.
Rob wrote re: How to build a distributed application: Introduction
on 01-19-2006 2:54 PM
John

My 2c.
I'm pretty happy with the OODA description and don't feel that more examples will add much.
As far as frameworks go, I think that they are a bit like opinions - everybody has one.
Ali Pasha wrote re: How to build a distributed application: Introduction
on 01-28-2006 3:19 PM
I agree with Rob. Before you go into the OODA description, can you please describe what other frameworks you considered and why you found them lacking?
Document Security wrote Consideration after building a distributed application
on 05-26-2006 11:46 PM
Distributed application is great when you are creating software for more than one user and they will use it at different location. OODA is nice flowcharting showing the flow of data. Security is major concern in distributed application.

Add a Comment

(required)  
(optional)
(required)  
Remember Me?