The Case of Emergent Design.
September 23rd, 2008
The Case of Emergent Design.
Published on September 23rd, 2008 @ 04:43:58 pm , using 969 words, 3198 views
This one I owed it since a long time.
In the year of 2000, David Cavallo published his article "Emergent Design and learning environments: Building on indigenous knowledge". In this article, the term "Emergent Design" was coined, as an alternative of blueprints. Cavallo indicates that many analysts researching the situation of educational change projects failing, was actually because of the committee-generated blueprint that was created to drive the change. The result was always a reformed implementation of the blueprint that did not solve the problem.
So, Cavallo proposes another "way" of doing that process. He bases his discussion in two innovations: The Digital technology and the Administrative decentralization. Se second one does not change the management practices, but only lowers them to other levels in organization to be distributed.
Now, Cavallo proposes some principles to guide this. Constructionism (Papert, we build knowledge when we construct things), that is based on Constructivism (Piaget, we build upon what we already know). The other ones are Technological Fluency, Applied epistemological anthropology, immersive environments, critical inquiry, long-term projects and Emergent Design.
The idea was to allow children to be immersed in long period projects, so they can handle fluent technological language. With that, the students will start looking with criticism the new understood world, and using the epistemological anthropology the teacher may be able to detect the learning forces of the students freedom and design "on-the-fly" the next learning framework to explode the possibilities.
All this is handled using the emergent design approach. The learner focus on building new knowledge upon the existing knowledge, and the tools and guides are given to facilitate that. Thus, there is no preexisting path, but one that is built as it goes on. It is pure Discovering by Construction.
Now, that is a learning experience Cavallo says it is not the only one possible. It was mapped to software development by Kent Beck, and it is presented as an alternative to blueprints (that is, the dreaded BDUP).
Emergent design is built on top of a Make-Verify-Improve life cycle. Since the new world is not created yet, the developers usually give baby steps, one step at a time. Decisions are not taken at earlier stages, but a just-in-time approach is followed, and developers are the one making those decisions.
This can prove good points:
- Avoids Prediction. Decisions are taken upon knowledge acquired by constructing, when the developers know that it works, and at the time it is needed.
- Verifiable products. The created products are real, working, and thus they can be validated against the requirements. New development is done on top of this real thing and not on top of paper ideas.
- Decisions are backed up by information obtained from feedback of real products and not assumptions.
Still, there are a couple of bad points to mention:
- Refactoring vrs Redesign. Note these are two different things. Refactoring is about improving the code after it works, redesign includes changing what it is done to use another approach or structure simply because the first one does not work. So, emerging design may not be about creating and then improving, but creating and then recreating.
- Late decision at Macro level. The problem with too late decisions are that the ones that affect a level higher that code may require much more amount of rework, recreating functionality in another way. Remember, refactoring is work to improve, rework is work to make it work as it should.
- There is certainly more information (a developer immersed knows more about his local environment than a designer), but there is less higher view to make the correct decision. That is, the grass-level view Cavallo explains work for individuals creating a single knowledge, since that knowledge is ok to be incomplete (there are lots of data the learner will not know). When you have individuals working together, you need a second level view to understand how all the individuals are doing matches together.
- The validation is locally centered. When individuals validate their decisions taken upon the current local value, the isolated solution may work. When integrated, the correct parts may not add up to an integral sound structure.
- It is assumed the individual will make the correct decisions based on information, which requires a long time to acquire (Cavallo’s long process). Thus, initial development is a challenge since no individual has enough info to make certain decisions.
So, those and other pitfalls can be avoided by taking care of tactical and strategic decisions:
- Use guidelines, like principles, to driven the decisions in case of doubt.
- Create from the bones. That is, create on top of a secured and sound base that explains by itself the rationale of the solution. That may require to bring some critical decisions Up Front, always knowing those decision may be changed in the future.
- All decision has to have a rationale that supports it. The idea is that later on, when the decision proves to be wrong, the rationale may help to chose another idea.
- Multilevel Coding. I know this is something not much people understand, but actually defining the global structure, then defining each component using a tactical structure to bind the bones, and finally writing the code to add meat to them, is what I call coding at levels, since every description of the solution is code. This helps a lot to visualize when and how a decision of any level can be taken or improved.
Hope this helps to clarify a myth about Emergent Design: It is not an easy two step methodology of blindly doing and then step back to see what emerged from the disconnected decisions. And, it may not be good for all projects not for all people. Lastly, it not an alternative to architecture, but just another technique to construct the architecture itself.
William Martinez
Trackback address for this post
7 comments
Nice to see you blogging again. Even better seeing you speak about emergent design. I agree that emergent design is no simple formula. I'm not sure that the pitfalls you speak of could be readilly avoided using an alternative.
Software is design, whether at the programmers level or the architects level. The real issue is consistency of design and communication amongst designers working at different levels of abstraction. The Agile community have come to the view that this communication is best served if all designers work at all levels.
This is the "brain meld" idea, which only works well for small highly skilled teams (7 plus or minus 2 people).
For teams bigger then this (and with lower skills), then "osmotic" emergent design will run into problems.
I use the term "osmotic" to characterise a form of communication amongst designers that has a low overhead. If design change requires up issuing a lengthy written document that then needs to be reviewed and sent half way around the world, then big up front design may be just the thing :)
Nice to talk to you again.
I agree with what you said. Now, the original E.D spec actually had two kind of players:
1. The learner, who is creating his own world upon the knowledge he already had.
2. The teacher, that was looking from above, and managing the learning force by facilitating the method, resources and subtle guide to the learner.
Now, the difference lies in the the descentralization of control. That is, no big director in the ivory tower defining the fate of the students, but the learner and teachers below following the natural evolution.
Still, you have two roles and a lower, individual look. With software development, the goal is not an individual one, is a team one. And you should have several roles to play, and each should be learner since they must construct upon the current knowledge.
Finally: Documents per se are not evil, but I have come to realize that the documentation tools may not serve the goals. I mean, I need to be able to take a 10000 feet look to a system, to see the big picture. But, I will not be able to see it looking at just code. A word document is of no help. I need something else.
Cheers!
William Martinez.
Forgot to say that I like the new look of your blog. Very snazy. BTW comments aren't showing under the post.
Interesting what you say about documents. Working as a coach I tend to find that the best means of communication is face-to-face, either at a white board, or whilst sharing a keyboard, programming.
This only works well for small teams though. For large teams, low bandwidth, half-duplex communication in the form of written documentation appears to be a necessary evil, especially when the teams is geographically dispersed.
My view is that software development doesn't scale that well and we should stick to small teams.
This is the new B2evo version, and it has new skin manipulation. Need to learn it a little bit more though.
William Martinez Pomares
William: "The validation is locally centered. When individuals validate their decisions taken upon the current local value, the isolated solution may work. When integrated, the correct parts may not add up to an integral sound structure."
Paul: "My view is that software development doesn't scale that well and we should stick to small teams."
I am a teacher (high school) and a doctoral student in educational technology. The more I teach and the more I learn, I come to the realization that small groups of learners/developers/teachers/teams is what we need to focus on.
Emergent design is based on community need. The result of this design process is not something that can necessarily be transferred to other communities - nor would we want it to be. The process, however, can facilitate design and development within different contexts - process not content.
Never doubt that a small group of thoughtful, committed citizens can change the world. Indeed, it is the only thing that ever has. Margaret Mead
Emergent design principles can propel the action of small groups as they go about changing the world.
Just saying... :)
I'm very glad you are interested on the topic.
My wife is also a postgraduated in "Educational Informatics", another name for TI used in education. She is also a High School teacher, and a has some classes at University for older people too. I myself teach at the University a class about Software System Architecture fundamentals.
So, I can see the problem with different set of glasses :-D
I mean, a small group is working on something, they are actually doing lots of things at the same time: communicating, deciding, proposing, learning, teaching. Some of those are subgoals, and the major goal is to have the client happy (in the development case) or the community with a sound knowledge structure (in the learning case).
In any given case, I may end up with a good product, but the subgoals may have not been accomplished. Let's say, I put together experienced developers with junior developers to allow for a coaching-leaning experience. At the end, if the process is not carefully followed, the experienced ones will take complete control and create the solution by themselves, and the juniors left to clean up after the party.
So, there are many things we need to carefully define.
Lastly, Emergent Design, as suitable for small groups, may need to be complemented or adjusted to larger teams, as those teams are needed for larger projects. And one option is to create clusters of small teams, which will require a hierarchy or levels of teams. Still, in all cases, the look above the individual teams results is required.
Cheers!
William Martinez.
"Emergent design principles can propel the action of small groups as they go about changing the world.
Just saying... :) "
So true...
Software development is very complex and difficult, testing our cognitive abilities to the full. Yet we choose to use a brain-dead manufacturing metaphor for the way we organise teams.
Software development is not predictable product manufacture, it is new product development, which is a creative process.
A good analogy is fashion design. In the fashion industry they use small teams and emergent design principles to come up with new novel creations.
The act of creation is essentially a "right brained" activity. The Software Industry seems to be uncomfortable with this. I think many developers are uncomfortable with this too, preferring to only use the left hemisphere of their brains :)
As a coach I would be interested in any educational material that backed up my experience with small teams. It would help me in convincing managers that software teams do not scale. If you could post a link to useful material then I would be most grateful.
As for Williams point about large projects, a great Oak Tree originally started out life as a little acorn. I don't see why large systems can't be grown from small working systems, using a small team over time. It just requires a mental shift. Systems like Unix were created this way so it can be done.
Paul


