This is the project website for Ode (pronounced oh-dee), a personal publishing engine for the web. Ode is unique in that it is designed to be simple – not necessarily easy.
Simple means understandable (at least it does here).
"Mine is an architecture documentation project"
I started with the goal of completing what I called a 'case study'.
Something was missing
What I came up with is a general model for writing architecture documentation.
Early in the semester we were asked to read the prologue to the book "Documenting Software Architectures: Views and Beyond", which presented this list of 'Rules for sound documentation':
Note: This is review, what is new is the question...
Documentation should:
Are these rules enough?
Again, from the book "Documenting Software Architectures: Views and Beyond" we have this definition
Architecture is what makes the sets of parts [of a system] work together as a successful whole. Architecture documentation is what tells the developers how to make it so.
We are told that architecture documentation should be:
And that it should serve as:
The "IEEE Recommended Practice for Architecture Description and Software-Intensive Systems" (IEEE Std 1471-2000)
presents four scenarios "intended to suggest the range of uses of the recommended practice"
This is the situation that describes what I proposed to do, that create the architecture documentation for an existing system.
Requirements
Accomplishing all of this is no small feat.
These scenarios...
All of these figure prominently into my approach and the resulting model.
Note: We have been introduced to many ideas about software architecture and architecture documentation throughout the course of the semester.
And there are many details that fill out the broad conceptual framework, but here is my list of fundamental concepts... without which we cannot hope to do an adequate job with architecture documentation. (followed by the contents of the slide)
This is my list of critically important concepts:
If one thing is clear from what we've discussed in this class it's that the work we set out to do is difficult and it isn't getting any easier.
For all of the problems we had with the autonomous computing paper, here is a quote from the article that no one was bothered by enough to refute:
Computing systems' complexity appears to be approaching the limits of human capability, yet the march toward increased interconnectivity and integration rushes ahead unabated.
Though not the answer to all of our software complexity woes, we can
Note: If we're willing to entertain the idea that autonomous computing is a potential long term solution to the complexity problem, and if the authors of that paper are correct that the realization of their vision will require
"a concerted, long-term, worldwide effort by researchers in a diversity of fields"
We had better learn to tolerate complexity
by improving the tools and techniques we use to document software systems.
Note: I'll warn you that there are several slides dealing with problems associated with documentation because
I have no doubt that we'll all recognize these problems so it shouldn't take long to get through them...
Easier doesn't necessarily mean easy.
We have few well established patterns for dealing with documentation.
There are many questions that must be answered before we can hope to do an adequate job with architecture documentation.
These are not the only challenging questions.
The existence of multiple documents
It is not uncommon to find ourselves in a situation where we have multiple and competing documents, or multiple versions of the same document.
A one document approach may be interpreted as a single task.
Writers of technical documentation are often detached or isolated from the development groups.
Although the architecture documentation should prescribe how the system should work, if it does not adequately describe the current behavior, it may be regarded as irrelevant
We are often unrealistic about the investment required and as a result do not set aside adequate resources for documentation.
The ability to write documentation well is a skill that not everyone involved in the development of software possesses, or practices.
We said early in the semester that software development is essentially linear, and that this may contribute to our inability to properly specify complex architectures.
Note: Taking into consideration modern development environment, and techniques, hundreds and thousands of developers working on the same system simultaneously and independently, and collaborating with teams that may be separated gegraphically, I don't know that it's true that software and software development is strictly linear.
Lastly, we may want to question some of the the assumptions that underlie the stated goals of architecture documentation.
How might we address some of these problems?
In my estimation must be able to:
My approach to the project was straightforward.
I started early in the semester with the work I knew how to do, not knowing a lot about architecture concepts and architecture description at the time.
Note: Literally hundreds of pages of documentation for ode alone not including other elements of the environment (libraries, services, protocols, etc.)
Next, I identified what I considered to be critical concepts in the current thinking about architecture documentation.
Finally, I needed a method which would allow me apply the concepts.
Borrowing concepts from component-based software engineering, we create a set of documentation components
These include a wide variety of architectural elements related to the architecture
Anything we want to
Each documentation object is essentially a package of progressively more detailed versions of the documentation for one element of the architecture.
Imagine that all of these documentation components arranged in a grid
Note: I am aware that this slide takes a turn toward the discussion of a possible implementation but it is a useful mechanism/vehicle to help understand how this model might work (I hope) and this is where I'm headed at the moment.
I don't lean too heavily on a discussion of the implementation, just this slide and the next.
The browser allows us to:
The browser does not show connections between documentation components.
We need another interface for composing views.
When we select any view (from an collection of views available in the browser), The documentation components of that view are highlighted.
If we choose to compose the view the browser's grid drops away.
By connecting the documentation components, we specify relationships among the documentation, in a way that is similar to what you might think of doing with an abstract ADL.
A view is a physical document in the sense that it can be printed, copied and shared.
The model supports two approaches to documenting relationships in the architecture.
This is a decision for the architect
They may be roles, or individuals (i.e. specific people) involved with the architecture.
Is it possible to anticipate the needs of all of these stakeholders?
They are reusable.
Is everything a documentation component?
The approach is intended to be nonlinear, flexible, and adaptive.
To this end it:
Note: You may recognize that many of these advantages answer/address the problems of documentation discussed earlier and correspond the proposed solutions which I've also talked about earlier in this presentation.
After reading the Rapide paper, the class talked about whether the strategy epitomized by that language is adoptable
Can we pursue architecture-based approaches without architects?
In comparison, I believe that the modest idea I'm proposing is adoptable now because it reflects the developer-driven organizational style that currently dominates software projects.
Because it is a documentation model it does not place any restrictions on or make any assumptions about the system itself.
Documentation can serve as a path toward architectural change.
Documentation bridges architecture and implementation level details, serving as a medium for communication between stakeholders.
The model addresses common logistical issues related to maintenance of documentation.
The model introduces only a minimal amount of overhead.
Information that is not included in the documentation takes on an active meaning.
I'm continuing to refine the model by building a 'prototype' that works roughly as described.
Ultimately the end result of this may be the development of a set of tools for creating, manipulating and presenting architecture documentation in a way that is consistent with the model as described.
Thank you
Software architecture documentation (and Ode)
"This presentation describes some principles and introduces a general model for architecture documentation."
I started with the goal of writing the documentation for another Ode ([ode-is-simple.com](http://ode-is-simple.com "Official site for Ode at ode-is-simple.com")).
Something was missing
The prologue to the book "[Documenting Software Architectures: Views and Beyond](http://www.amazon.com/Documenting-Software-Architectures-Views-Beyond/dp/0201703726 "Book page at amazon.com")", presents this list of 'Rules for sound documentation':
Documentation should:
A question I asked myself: Are these rules enough?
Again, from "Documenting Software Architectures: Views and Beyond" we have this definition
Architecture is what makes the sets of parts [of a system] work together as a successful whole. Architecture documentation is what tells the developers how to make it so.
We are told that architecture documentation should be:
And that it should serve as:
The "IEEE Recommended Practice for Architecture Description and Software-Intensive Systems" (IEEE Std 1471-2000)
presents four scenarios "intended to suggest the range of uses of the recommended practice"
This is the situation that describes what I proposed to do, that create the architecture documentation for an existing system.
Requirements
Accomplishing all of this is no small feat.
These scenarios...
All of these figure prominently into my approach and the resulting model.
Note: There are many details that fill out the broad conceptual framework, but here is my list of fundamental concepts... without which we cannot hope to do an adequate job with architecture documentation. (followed by the contents of the slide)
This is my list of critically important concepts:
If one thing is clear it's that the work we set out to do is difficult and it isn't getting any easier.
Consider this quote from the paper !GET THE TITLE autonomous computing paper!:
Computing systems' complexity appears to be approaching the limits of human capability, yet the march toward increased interconnectivity and integration rushes ahead unabated.
If we're willing to entertain the idea that autonomous computing is a potential long term solution to the complexity problem, and if the authors of that paper are correct that the realization of their vision will require
"a concerted, long-term, worldwide effort by researchers in a diversity of fields"
We had better learn to tolerate complexity
How? By improving the tools and techniques we use to document software systems.
Note: I'll warn you that there are several slides dealing with problems associated with documentation because
I have no doubt that we'll all recognize these problems, so it shouldn't take long to get through them...
Easier doesn't necessarily mean easy.
We have few well established patterns for dealing with documentation.
There are many questions that must be answered before we can hope to do an adequate job with architecture documentation.
These are not the only challenging questions.
The existence of multiple documents
It is not uncommon to find ourselves in a situation where we have multiple and competing documents, or multiple versions of the same document.
A one document approach may be interpreted as a single task.
Writers of technical documentation are often detached or isolated from the development groups.
Although the architecture documentation should prescribe how the system should work, if it does not adequately describe the current behavior, it may be regarded as irrelevant
We are often unrealistic about the investment required and as a result do not set aside adequate resources for documentation.
The ability to write documentation well is a skill that not everyone involved in the development of software possesses, or practices.
Software development is not as linear as it once was, and that this may contribute to our inability to properly specify complex architectures.
Unfortunately
Lastly, we may want to question some of the the assumptions that underlie the stated goals of architecture documentation.
How might we address some of these problems?
In my estimation must be able to:
My approach to the project was straightforward.
I started producing and pulling together a wealth of documentation for Ode.
Next, I identified what I considered to be critical concepts in the current thinking about architecture documentation.
Finally, I needed a method which would allow me apply the concepts.
Borrowing concepts from component-based software engineering, we create a set of documentation components
These include a wide variety of architectural elements related to the architecture
Anything we want to
Each documentation object is essentially a package of progressively more detailed versions of the documentation for one element of the architecture.
Imagine that all of these documentation components arranged in a grid
Note: I am aware that this slide takes a turn toward the discussion of a possible implementation but it is a useful mechanism/vehicle to help understand how this model might work (I hope) and this is where I'm headed at the moment.
I don't lean too heavily on a discussion of the implementation. (It's just this slide and the next.)
The browser allows us to:
The browser does not show connections between documentation components.
We need another interface for composing views.
When we select any view (from an collection of views available in the browser), The documentation components of that view are highlighted.
If we choose to compose the view the browser's grid drops away.
By connecting the documentation components, we specify relationships among the documentation, in a way that is similar to what you might think of doing with an abstract ADL.
A view is a physical document in the sense that it can be printed, copied and shared.
The model supports two approaches to documenting relationships in the architecture.
This is a decision for the architect.
They may be roles, or individuals (i.e. specific people) involved with the architecture.
Is it possible to anticipate the needs of all of these stakeholders?
They are reusable.
Is everything a documentation component?
The approach is intended to be nonlinear, flexible, and adaptive.
To this end it:
Note: You may recognize that many of these advantages answer/address the problems of documentation discussed earlier and correspond the proposed solutions which I've also talked about earlier in this presentation.
There are quite a few proposed strategies for dealing with the need for architecture documentation.
A key question that must be asked when evaluating any of these approaches:
In other words, can we pursue architecture-based approaches without architects?
In comparison, I believe that the modest idea I'm presenting is adoptable now because it reflects the developer-driven organizational style that currently dominates software projects.
Because it is a documentation model it does not place any restrictions on or make any assumptions about the system itself.
Documentation can serve as a path toward architectural change.
Documentation bridges architecture and implementation level details, serving as a medium for communication between stakeholders.
The model addresses common logistical issues related to maintenance of documentation.
The model introduces only a minimal amount of overhead.
Information that is not included in the documentation takes on an active meaning.
I'm continuing to refine the model by building a 'prototype' that works roughly as described.
Ultimately the end result of this may be the development of a set of tools for creating, manipulating and presenting architecture documentation in a way that is consistent with the model as described.
Thank you
Current Release (version 1.2.3, 2010/0613) -- Installation instructions included.
Note: Ode is a self-hosted project. To use it you need either a web hosting account or your own web server.
Don't let that scare you away. There is help available if you need it. :)
Glad you asked. It's a new platform for creating weblogs (and other types of dynamic sites) which emphasizes simplicity, both in terms of usability and design. The idea is that anyone who is interested should be able to understand how the program works at the source code level.
Find out more...
I encourage you to subscribe to this site's feed to keep up with all of the news and info related to Ode.
Does that sound like you?
If so, then you may have just have found the project you're looking for, and we'd love to have you participate.
There is a community forum for this project at forum.ode-is-simple.com. Please feel free to register and participate.
Though I plan on very actively pushing content to this site, the forum is intended to be a community effort, as well as a resource. You'll find information about the project on the forum that you won't see here.
Your involvement is key to the project's success! (Yes, I'm talking to you. :)
There is a community forum at forum.ode-is-simple.com. For general questions, the forum is a great way to get in touch with me and the rest of the Ode community.
You can also send me an email if you'd rather do that.
None (at the moment)
Ask yourself if you're comfortable handing over all of your content to a service that you have no control and then hoping that they don't change the terms of service on you in such a way that you're no longer comfortable with their policies.
More importantly, we already have a web. If you're like me, you don't see the need to build a web on top of the web and put it in the hands of a single commercial entity. Something about that just doesn't feel like a step in the right direction. The beauty and power of the web is its distributed, interconnected diversity!
Start a weblog and invest in yourself and your own online presence.
What's more, the web needs your help if it's going to continue to be the free, and open platform that has been from the beginning.
The web is such a great idea, and such a powerful one, that it was capable of producing Facebook, Twitter, Google Plus, LinkedIn, Wordpress, Amazon, Wikipedia, and on and on. It could do all of that without any one company controlling and profiting from it. In fact it was possible because there was no one company controlling and profiting from it.
The web is an amazing resource. We ought to appreciate it. More than that though, we ought to continue to invest in it, and in our own future by supporting a healthy, open web.
Please join me in supporting an open web for the benefit of all.