{
  "docId": "019f6b8f-4b31-718f-b9ac-34f32444380c",
  "docSlug": "jarvis-opus-development-postmortem",
  "documentTitle": "Opus Development Postmortem",
  "authorId": "opus-development-postmortem",
  "authorName": null,
  "documentKindSlug": "deck",
  "documentKindLabel": "Deck",
  "sourceTypeSlug": "investor_relations",
  "sourceTypeLabel": "Investor relations",
  "presentationDate": null,
  "orientation": null,
  "aspectRatio": null,
  "pageNumber": 15,
  "pageCount": 47,
  "prevPage": 14,
  "nextPage": 16,
  "slideType": "other",
  "function": "summarize",
  "density": "overcrowded",
  "nDataPoints": 0,
  "notes": "This is a historical document (1989) detailing software engineering postmortem findings.",
  "elementsJson": null,
  "metadataConfidence": 0.9,
  "imagePath": null,
  "slideHref": "/slides/019f6b8f-4b31-718f-b9ac-34f32444380c/15",
  "deckHref": "/decks/019f6b8f-4b31-718f-b9ac-34f32444380c",
  "deckJsonHref": "/decks/019f6b8f-4b31-718f-b9ac-34f32444380c.json",
  "deckAnchorHref": "/decks/019f6b8f-4b31-718f-b9ac-34f32444380c#slide-15",
  "components": [
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.1
      },
      "kind": "paragraph",
      "text": "Speed, Opus, despite all of our efforts, is still much slower than we would like. Our code reviews showed that we can get minor speed improvements out of just about any section of the code, we just need to review more of it to realize those improvements.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "070974ac-c461-4a93-98ac-4c1f430eba95",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.04,
        "w": 0.8,
        "x": 0.1,
        "y": 0.69
      },
      "kind": "paragraph",
      "text": "Format & display. These need to be made reentrant. Very late in this project (one of the last two bugs fixed) we discovered that we could crash because of our failure to be reentrant.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "2d1dbe4a-09e6-4792-be9b-2efce513ef1a",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.16
      },
      "kind": "paragraph",
      "text": "Tables, fields, tables & fields. Tables work by overloading paragraph properties. A bit indicates whether a paragraph is within a table. Another bit indicates the trailer paragraph (where the row properties are held).",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "38b3e6a3-4393-427b-a598-63954fd5dffa",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.04,
        "w": 0.8,
        "x": 0.1,
        "y": 0.29
      },
      "kind": "paragraph",
      "text": "Fields usually consist of two text sections (codes and results) punctuated by three separators. A field may consist of just one text section and the outer separators. Each separator has a PLC entry.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "3f5ce771-7d7f-4b1a-a402-9fcbe54084d8",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.04,
        "w": 0.8,
        "x": 0.1,
        "y": 0.34
      },
      "kind": "paragraph",
      "text": "Opus had many problems because of the stream nature of fields (they will jump and allow the visible text stream to appear to start at a latter point) and the paragraph nature of tables.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "41834316-6a8d-4a6c-bc13-c8b49fd0817f",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.39
      },
      "kind": "paragraph",
      "text": "Selection and cursor keys. Pageup then pagedown: you're not guaranteed to be where you started. Cursoring through a document gives unpredictable results.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "5e6bf44d-65af-44d2-a7c0-75bebcbb172e",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.57
      },
      "kind": "paragraph",
      "text": "Macros. The macro language became functional very late in the project. This caused problems for development since the necessary hooks had to be retrofitted into every command.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "67f89720-59cb-4da3-b3fc-b05bf5fb1880",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.51
      },
      "kind": "paragraph",
      "text": "CRLF. In Opus paragraph marks are represented by two characters (carriage return-line feed) except for section marks which are only one character (chSect) and possibly other format files.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "9b5d626d-de90-4e6a-8332-fff7ef1ee5d5",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.74
      },
      "kind": "paragraph",
      "text": "Screen vs. printer units. On the Mac a screen unit equals one printer unit. This makes layout, display and printing all nicely interchangeable. Under windows they are not the same unit.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "a318083f-f814-4a83-8a0b-11091c41bda1",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.45
      },
      "kind": "paragraph",
      "text": "Page view display model. Currently all text in page view is drawn on the same layer, even if it overlaps. Where overlaps do occur, the drawing order can be random, resulting in garbage.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "bec866da-8813-44a8-9980-cc502d56fd01",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.8,
        "x": 0.1,
        "y": 0.63
      },
      "kind": "paragraph",
      "text": "Outlining. Outlining and renumbering require an entry in the PLCPAD for each paragraph. For outlining at least, it's clear that this is not necessary.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "d3d75f77-ae12-43ba-9c1a-62aad19003c6",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.06,
        "w": 0.8,
        "x": 0.1,
        "y": 0.22
      },
      "kind": "paragraph",
      "text": "Problems: Cell markers and trailer properties must agree or you die. This changes some very basic assumptions at low levels in Word (you can't just delete anything).",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "e547991a-ebe0-482d-97cb-6bbe52e87f9a",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.3,
        "x": 0.1,
        "y": 0.9
      },
      "kind": "title",
      "text": "Opus Development Postmortem Technical Issues",
      "attrs": null,
      "subkind": "headline",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "874f7147-d7d1-4063-a0c8-5d02f87a1be1",
      "frameworkName": null,
      "frameworkSlug": null
    }
  ],
  "metrics": [],
  "tools": [],
  "frameworks": [],
  "arcBeats": [
    {
      "to": 20,
      "from": 13,
      "beatId": "179021e1-c490-4191-99d5-4bb79fadeb5c",
      "arcName": "The Transformation Tale",
      "arcSlug": "transformation-tale",
      "beatName": "Future Vision (Gain)",
      "beatSlug": "transformation-tale-future-vision-gain",
      "evidence": "The deck presents an analysis of the project's technical issues and interactions with other groups.",
      "position": 2,
      "confidence": 0.8,
      "parentBeatName": "Turn",
      "parentBeatSlug": "turn"
    }
  ],
  "loops": [
    {
      "to": 19,
      "from": 14,
      "name": "Iceberg",
      "slug": "10-iceberg",
      "bestFor": "Consulting, complex problem solving, organizational change",
      "matchId": "1989499f-7b92-4160-a397-e79ceb8e844e",
      "evidence": "The deck presents an analysis of technical issues and interactions with other groups, revealing underlying challenges.",
      "position": 1,
      "objective": "What were the technical issues and interactions with other groups?",
      "structure": "The Symptom (Visible) -> The System (Hidden) -> The Root Cause",
      "confidence": 0.7,
      "description": "Reveal that the visible problem is merely a symptom of a deeper root cause"
    }
  ],
  "imagePathAlt": null,
  "thumbSrc": null,
  "thumbSrcAlt": null,
  "locked": true
}