« links for 2006-08-28 | Main | links for 2006-08-29 »

Eight Fallacies of Distributed Information Systems

Essentially everyone, when they first build a distributed information system, makes the following eight assumptions about the data. All prove to be false in the long run and all cause big trouble and painful learning experiences.

  1. People tell the truth.
  2. Content is independent of presentation.
  3. Syntax doesn't matter.
  4. Identifiers are reliable.
  5. Metadata and data are consistent.
  6. Schema ensure interoperation.
  7. All the data must be available.
  8. Canonical models can be determined.
  9. Index latency is zero.

August 28, 2006 06:10 PM


(August 28, 2006 10:22 PM #)

You left out quite a few other reasons.

10 Adding more programers speeds up development

11 Requirements do not have to be fixed before development begins

12 Mythical man month

13 Development can write more than 10 lines of debugged code per day.

Mark Nottingham
(August 29, 2006 04:49 AM #)

14 You can hide the difference between local and remote invocation

(August 29, 2006 02:03 PM #)

RW: I don't think he's talking about distributed development.

The item 'people tell the truth' seems too broad and doesn't seem any different from 'people make mistakes', 'data entry is fallable'. Similarly baffled on the Syntax line. I'm certain I'm missing some context...perhaps 'data' can be changed to narrow the focus?

Looking forward to anectodes, examples, blog entries expanding on these.

Gernot Starke
(August 29, 2006 08:29 PM #)

#15 (although I personally recommend to put this one further up the list): The whole truth is represented in source code (and no design decision ever needs to be documented)

#16 documentation and communication are for whimps only. Real programmers don't talk.

(August 31, 2006 02:57 AM #)

17. Standards are good.

Carlos E. Perez
(September 1, 2006 12:57 AM #)


Here's my list:


1. You can trust everyone
2. Universal agreement is possible
3. A perfect model of the real world can be created
4. Change can be avoided
5. Time doesn't exist
6. Everyone can respond immediately
7. Concurrency can be abstracted away
8. Side effects and non-linearity should be removed
9. Systems can be proven to be correct
10. Implementation details can be hidden

However, your list has some other interesting observations. Hopefully we can read some more elaboration in a future piece. ;-)