Skip to main content

User login

What is not?

 Impossible is not a fact, its an opinion 

Overall Technical Plan (minimizing the impact of change)

May 23, 2010 by dangyogi

I thought I should post a note here about the needs of the technical side of this project.

Basically, the biggest trouble maker on the technical side is dealing with change.  30 years ago, the way that software developers dealt with change was to try to eliminate it.  They tried to move very slowely and deliberately from one step to the next and make sure that each step was right before proceeded to the next step.  This had some success, but it is a slow process.  And what happens is that the user asking for the software always wants to change something.  The software developers would write a contract that would add more to the price if the user wanted to change something.  It wasn't an easy, nature process leading to the best solution for the user.

The newer way of dealing with change is to try to implement the system incrementally.  We try to keep the implementation of each part of the system very small and simple.  The idea with this approach is to allow change, but set ourselves up so that change will be easier.  This gives us the flexibility we need to do some trial-and-error experimentation and figure things out along the way.

But this approach can be a little strange because the first iterations of the system are very simple and crude.  It is natural for the user to think that the system isn't going to be robust enough, or easy enough to use, or look good enough, or what have you.  The problem is he may think that the parts that he sees are "done", when they are still obviously inadequate.

Consider trying to build a human body.  We are going to start with the skeletal system.  This is the system that physically supports the whole body.  All of the organs and limbs will attach to this.  And the central part of the skeletal system is the spine.  So we start by building a very simple spine.  Maybe it only has 3 vertebrae.  The user will say "This is not at all adequate"!  And he is absolutely right!  But instead of ending our story now, let us continue and see where this leads us.

The next step is we want to attach the bones for the limbs.  We notice that we can't attach them directly to the spine.  So we add some attachment bones.  Our first attempt might be simple bones that stick out on each side of the lower spine to attach the legs to, and something similar for the arms.  The legs and arms might start out as one long bone each.  In doing this, we see that the spine isn't flexible enough between the vertebrae that the legs attach to and the vertebrae that the arms attach to, so we add two more vertibrae in between this, giving now 5 vertebrae.

Next we see that a single bone for the leg and arm isn't flexible enough, so we divide each of these into two bones: upper and lower.  The legs will have to support more weight, so we make them longer and stronger.

Now we need to attach the head.  The skull may start out as simply a spherical bone.  We notice that being stuck to the same vertebrae as the arms doesn't allow it to turn separately.  So we add some more vertibrae between the vertebrae that the arms attach to and the vertebrae that the skull attaches to.

We can now start hanging organs on our skeleton.  We will put the heart close to the lungs, and the lungs close to the head (where the nose is) at the top of the torso.  But we notice that we need to create a vacuum to draw air into the lungs.  So we need a rigid structure around them.  We add rib bones for this.

When we try to add eyes, nose and mouth to our skull, we see that we need holes for these.  So our simple spherical skull becomes flattened slightly side to side, and the face flattened to provide a place for these organs.

We find that the arms and legs still don't have enough flexibility.  So we add hands and feet joined by a joint (wrist and ankle).

When we add the abdominal organs, we see that they need a platform to support their weight.  So our simple bones sticking out side to side for the legs needs to become a bowl shaped bone with a hole in the bottom to allow for excrement.

We hang muscles on our bones to add motion.  We hollow out the spine to add a central nervious system to control these muscles.

At this point, our body has evolved a great deal, but is still rather ugly.  We don't have skin yet!

The final addition, after the shape has been determined and we know what kind of flexibility we need, is the skin and underlying fatty tissue.

I know that I have greatly over-simplified the human body in my short example here, but I hope that this gives you an idea of what to expect from the technical side during the evolution of this project.  Note that our creature will start out almost totally incapable of doing anything, and remain quite ugly up until the very last steps!  We need to focus first on the foundation pieces, early on function, and only very late on appearance.

Bringing this back to my starting point about change, we need to start out very simple so that we can easily change our little creature to try out different possibilities to see what works.  As we figure out how the various fundamental infrastructure parts need to work, we will expand and add more and more functionality.  My goal is to focus on figuring out what order to tackle our problems in.  Order is important!  If the design of part B depends on what we decide for part A, then it is important to do part A first, before we do part B.  So you will hear me ask over and over again about what order do we need to do the various steps in.  Remember it is not the importance of the steps that is used to rank them, but their mutual dependancies along with the level of uncertainty in how to do each step (more uncertain steps should be done earlier, as they are most likely to change, to minimize the impact of that change by minimizing the number of other parts that we also need to change).

I very much would like to see each of you involved in evaluating our little creature.  If you think that something isn't being done right (meaning won't give us the right answer), I want to hear about it sooner rather than later.  This is important because it will be far, far easier to change it to make it right early in the process, rather than later.  And if you are not sure, speak up!  Early in the process we can quickly put together a little test to see if another idea works better or not.  Again, this trial-and-error programming is far, far easier early in the project, rather than later.

But I also ask for your patience because appearance will be worked on seriously as some of the last steps, after we understand what kind of interaction we need to support to make this whole thing work and give us accurate diagnosis.

Finally, if you bring something up, and I am not responsive to doing it immediately, PLEASE write it down in these forums.  If it seems that I am ignoring you, it is only because I have decided that "now is not the time".  This is very, very different than "I think that your idea is not important"!  So PLEASE write your ideas down so that we don't forget them, and also so that we can include them in our plans as we order all of the steps that need to be done.


Premium Drupal Themes by Adaptivethemes