Generation 2 Philosophy

10/4/99 - Go Back

Every design expresses a philosophy. Ours is based on a deep understanding of people's needs and the framework elements used to build the flexible solution fabric.


People's Needs

To gain a concise, crystal clear understanding of people's needs, we examine the key system stakeholders. Each stakeholder has only a few key needs, that once identified form a "needs pattern" themselves. Along with each need we list the key UHR best practices that fulfill that need. We tried layering these but it didn't come out clean.

1. Digital Industry

Key Need

Supported By

Foundational Abstractions Structured Assembly, UHR Tech Grid
Universal Standards DK, Datatrons, Cellular Plugpoint Structure, Circuit Based
Exemplar Models Future successful showcase uses of UHR, gurus

2. Domain Industries

Key Need

Supported By

Interoperatability Datatrons, Circuit Based
Thriving reuse market Part centric, Visual Tools enhance productivity
Extrememly mature tools Visual Tool use was designed before everything else

3. System Manager - The prime customer

Key Need

Supported By

Maximize ROI DK, assemble systems from reusable parts, Infinite Extensibility
Satisfy customer requests DK is spec, evolution is easy
Satisfy system users (See Developer, End User)
Ease of Project Management Part frameworks, parts, Segmented Architecture, assembly

4. Developer - The secondary customer

Key Need

Supported By

Ease of learning and use Visual Tools, sample systems, simple core architecture, doc
Expressiveness Domain neutral core, composition oriented, self referential tree
Ease of reuse Part centric, Anonymous Collaboration, Part Shop
Ease of achieving high quality Reuse reliable parts, circuits seldom fail (most of assembly is circuit construction)
Extreme architecture elegance Circuit Based, self referential tree, DK drives everything
Ease of frameworks Frameworks are just another collection of parts, System Tree provides a universal plugpoint structure, Part Shop allows easy framework "fill in the blanks".

5. End User - Today the third customer, eventually the prime customer

Key Need

Supported By

High quality (Same as "Ease of achieving high quality" in Developer)
Ease of accomplishing tasks Expressiveness, reuse of what has worked well before
Ease of personal configuration DK driven, Visual Tools
Performance Use direct links for bottlenecks, reuse optimization

6. Part - As UHR matures, these become more like living forms

Key Need

Supported By

Universal reuse mechanism DK delivered to part automatically when created
Universal input/output Messages, Datatrons
Dynamic system manipulation Access to core on a "need to know" basis

7. Society - This is a little bogus. :-)

Key Need

Supported By

More environmental awareness The habit of part reuse can spread to the habit of recycling, etc.
More cooperation, less competition, less proprietary and lock in approaches The interconnectedness resulting from standards, part and tool reuse, and end user system configuration as the norm will lead to a more cooperative nature. This will be demanded by end users as they more and more drive the Digital Industry.
More contentment Users can more easily express their own needs directly. Developers can focus more on self-expression and customer satisfaction, and less on code grinding. Managers can focus more on satisfaction and less on unpredictable schedules.


Foundational Philosophy

Given these needs and how UHR supports them, we can see dependencies and what helps the most. Add a dash of intuition, and you have:

1. DK is the timeless foundation for everything else. DK does one simple thing. It describes a structure populated with collaborating, configured parts. The structure itself is created by anything reasonable, such as adequate core parts today, better core parts tomorrow, and nanotech ten years from now.

As the years go by, more and more corporate investment will lie in describing system structures with DK, and not in coding systems. DK and code can vary independently, allowing periodic replacement of old code with better code or other mechanisms. It's like gradually replacing a car piece by piece while the driver goes on, and on, and on.... And so the largest investment, DK, is the safest - Just like the DNA in nature. Think of DK as "corporate DNA". If you want your IP to last longer, put it into DK, not code.

2. DK drives Circuit Based systems. DK really just describes great big circuit boards of parts. The Circuit Based pattern is so powerful it provides the main architecure. As a bonus, this architecture is congruent with electronics, making symbiosis much easier. The architectural elements are:

3. Only Evolution Aware systems can avoid obsolescence.

4. Visual Tools sitting on the above will make programming as easy as writing. When this happens, the Software Age will have started its decline, and the ToolWare Age will be hitting its stride. After all, it was the discovery of the right tools that made the difference in The History of Man.

Remember, all the Visual Tools have to do is edit DK and show the conceptual representation of system form, such as models, System Tree, animation of Message travel, part dependencies, parts with personalities dancing, Datatrons feeding, etc. Why not make it fun! When speech comes to GUIs, users will converse with tools and parts, making programming even easier. The cool thing is the tools are built with parts themselves!

Thus the second generation reference implementation of UHR needs to first provide a DK layer, and then Circuit Based Plugpoint Structure on top of that. Above that "core" lies Part Inventories and Visual Tools. Everything else will tend to fall into place fairly automatically, because we have chosen the correct driving abstractions. We hope! :-)


Stability

We can see that UHR can be partitioned into DK, Parts, Core and Visual Tools. What about their stability?

1. The most stable must be the DK. This is a matter of defining a system's structure (Container DK) and how parts are initialized for reuse (Part DK). Really only Container DK is a challenge. If all it does is define what parts in in a container, where a part's DK comes from, what the circuits are, and what parts are started when the container is started, then it can remain stable. This looks straightforward. We will use no additional part configs like in the BA, which required reflection.

2. The second most stable must be Parts. Part stability is a matter of consistent, flexible interfaces that can handle all possible collaborations in a generic, anonymous manner. We have not yet analyzed this in detail with the goal of stability. It may boil down to a DK interface, a lifecycle interface, a Message in interface, and a Message out interface. These are the basics. Then there are more interfaces such as NodeUser and PartUser. The basics are starting to be well understood. The others are not so well understood.

3. The Core can vary easily as long as it honors Part expectations. Since most domain Parts don't use the core, this should be somewhat easy. It's only Visual Tool Parts, high performance Parts needing direct links, and Parts manipulating the System Tree for dynamic behavior that need Core access. We will carefully design various Fascades around the Core, such as PartReader.

4. Visual Tools use the Core, Parts and DK. They have the most expectations, but the good news is there are far fewer Visual Tools than everything else. So when the others change, only a few Visual Tools are affected.

Actually at first Parts must be the most stable, because that's where the greatest investment is. But over the years, Part reuse and substitution in many systems will cause DK to have the greatest investment.

So our first next step is defining clear, flexibile, stable interfaces between these partitions.