{
  "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": 16,
  "pageCount": 47,
  "prevPage": 15,
  "nextPage": 17,
  "slideType": "other",
  "function": "summarize",
  "density": "overcrowded",
  "nDataPoints": 0,
  "notes": "This is a page from a 1989 Microsoft internal post-mortem document.",
  "elementsJson": null,
  "metadataConfidence": 1,
  "imagePath": null,
  "slideHref": "/slides/019f6b8f-4b31-718f-b9ac-34f32444380c/16",
  "deckHref": "/decks/019f6b8f-4b31-718f-b9ac-34f32444380c",
  "deckJsonHref": "/decks/019f6b8f-4b31-718f-b9ac-34f32444380c.json",
  "deckAnchorHref": "/decks/019f6b8f-4b31-718f-b9ac-34f32444380c#slide-16",
  "components": [
    {
      "bbox": {
        "h": 0.05,
        "w": 0.72,
        "x": 0.138,
        "y": 0.23
      },
      "kind": "paragraph",
      "text": "Relations with Program Management have generally been very good. Adrian was always available and willing to discuss features and implementations. His method of polling when he wanted something was effective.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "5745edc2-86cb-4037-a0d6-be6e9e7e77a0",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.06,
        "w": 0.72,
        "x": 0.138,
        "y": 0.625
      },
      "kind": "paragraph",
      "text": "Finally, it is very important that Program Management continue to talk to the individual developers about features. It is important to remember who is going to be writing the code; they are the ones who really own this product. Through the course of the Opus project, I think Program Management did very well in this regard.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "6a472e06-67fa-499c-8413-c8e1f692de3c",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.06,
        "w": 0.72,
        "x": 0.138,
        "y": 0.73
      },
      "kind": "paragraph",
      "text": "Overall the testing team did an excellent job testing Opus, sometime under very trying circumstances. The developers who came over from Mac Word felt that the environment that the Opus testers had to work in was much harsher than it was on Mac Word. There seemed to be more attention on politics and rivalry then on working together to create an awesome product.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "a0959790-9b1d-4392-9c8b-b5bc6c0fb5bf",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.08,
        "w": 0.72,
        "x": 0.138,
        "y": 0.38
      },
      "kind": "paragraph",
      "text": "The attitude that \"program managers do no work\" is a bit dangerous. There were often problems arising from program management dictating tasks, especially to the PAs in development. If Program Management has a lot of non-development tasks that need to get done (benchmarks, disk images, etc.), perhaps they should hire their own people to do them. Development has hired PAs to do development related tasks.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "a74c9e21-d2e1-4391-98af-bf9a88187676",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.09,
        "w": 0.72,
        "x": 0.138,
        "y": 0.8
      },
      "kind": "paragraph",
      "text": "Communication could have been better between the teams, especially earlier on in the project. Forums such as the code reviews and testing strategy meetings really helped improve communication and get people talking about areas of the product. These forums should be continued in future projects. It is felt that it would help if development supplied testing with a list of developers and their areas of specialization (especially on a project like Opus where everyone was very specialized). It would also be good if testing provided a similar list to development.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "d25b94c5-deef-415d-b61d-b875c0560c5a",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.12,
        "w": 0.72,
        "x": 0.138,
        "y": 0.895
      },
      "kind": "paragraph",
      "text": "Development needs to take more responsibility for the testing of the product. A prevailing attitude by development was that somehow the testers would learn all about the features and all the necessary test cases but there was no mechanism in place to do this information to them. To help with communication and to assure that all areas of the product are being covered, it was suggested that developers be required to supply some information every time they check something in. That information could be TRD entries, test plans or completed macro tests for the test suite that would exercise the area changed. The main point is to force the developer to think about how the feature needs to be tested and what the test cases are.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "d56f8c8b-5ab9-4981-91d9-c35cd10f1dcf",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.72,
        "x": 0.138,
        "y": 0.135
      },
      "kind": "paragraph",
      "text": "In the following sections I try to discuss both the ups and down of our interactions with these groups and ways in which it seems these groups could improve. This is not meant to be a bashing or an attempt to focus blame for Opus' problems on others, we all have some problems and have room for improvement.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "d6f57478-070a-4a42-8e00-5e5d9b5a3ee1",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.05,
        "w": 0.72,
        "x": 0.138,
        "y": 0.465
      },
      "kind": "paragraph",
      "text": "In order to keep the entire product team better informed, it was suggested that it would be great if Program Management would keep and distribute weekly minutes from the leads meetings, instead of relying on the individual leads to pass that information on to their people.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "d87d90ed-38e2-4ee5-837e-576f8d822102",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.09,
        "w": 0.72,
        "x": 0.138,
        "y": 0.285
      },
      "kind": "paragraph",
      "text": "The Opus specification really never was. We should have had a real spec sooner and it should have been more complete and better maintained. The addition of features and the modification of existing features is inevitable considering our market and the need to do usability testing. However, when adding things or making changes it is important that we consider whether the change is worth the delay it will cause and we need to be realistic about what that delay is going to be.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "e77d4a63-e650-4900-b48b-dda3c1b7eeb4",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.1,
        "w": 0.72,
        "x": 0.138,
        "y": 0.52
      },
      "kind": "paragraph",
      "text": "It was also suggested that developers should spend more time using other Microsoft products (with which we need to be consistent) and with our competitors products. To keep this from being a time sink, it was suggested that more product presentations (like the one done for WordPerfect 5.0 several years ago) be done and even video taped. A possibility would be to have different people (both developers and Program Managers) become experts on different products then present those products to a group. This is something that Program Management should coordinate.",
      "attrs": null,
      "subkind": "paragraph",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "f62a0cc5-c9c8-4768-940d-3fccd5792832",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.02,
        "w": 0.35,
        "x": 0.138,
        "y": 0.103
      },
      "kind": "title",
      "text": "V. Interaction With Other Groups",
      "attrs": null,
      "subkind": "headline",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "65933c53-c1ef-497a-a988-8c6a77504420",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.02,
        "w": 0.2,
        "x": 0.138,
        "y": 0.205
      },
      "kind": "title",
      "text": "Program Management",
      "attrs": null,
      "subkind": "subtitle",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "8b346a31-16f8-4f7f-a4c6-64cd95e02477",
      "frameworkName": null,
      "frameworkSlug": null
    },
    {
      "bbox": {
        "h": 0.02,
        "w": 0.08,
        "x": 0.138,
        "y": 0.705
      },
      "kind": "title",
      "text": "Testing",
      "attrs": null,
      "subkind": "subtitle",
      "toolName": null,
      "toolSlug": null,
      "confidence": null,
      "componentId": "ec4ec79a-33ea-4231-b8d4-945df9faecca",
      "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
}