{"componentChunkName":"component---node-modules-gatsby-theme-medium-to-own-blog-src-templates-blog-post-js","path":"/product-choices/","result":{"data":{"site":{"siteMetadata":{"siteUrl":"https://javame.netlify.app","githubUrl":"https://github.com/aterreno/blog"}},"mdx":{"fields":{"slug":"/product-choices/"},"excerpt":"Recently, on my last project we had to make some product choices (which web server, which application server, etc.). That’s how I proceeded…","timeToRead":1,"frontmatter":{"title":"Product choices","description":"","categories":[],"date":"May 06, 2009","canonical_link":"https://javame.netlify.app//product-choices-6aeaacff499f"},"body":"function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); }\n\nfunction _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }\n\nfunction _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }\n\n/* @jsxRuntime classic */\n\n/* @jsx mdx */\nvar _frontmatter = {\n  \"title\": \"Product choices\",\n  \"description\": \"\",\n  \"date\": \"2009-05-06T00:00:00.000Z\",\n  \"categories\": [],\n  \"published\": true,\n  \"canonical_link\": \"https://javame.netlify.app//product-choices-6aeaacff499f\",\n  \"redirect_from\": [\"/product-choices-6aeaacff499f\"]\n};\nvar layoutProps = {\n  _frontmatter: _frontmatter\n};\nvar MDXLayout = \"wrapper\";\nreturn function MDXContent(_ref) {\n  var components = _ref.components,\n      props = _objectWithoutProperties(_ref, [\"components\"]);\n\n  return mdx(MDXLayout, _extends({}, layoutProps, props, {\n    components: components,\n    mdxType: \"MDXLayout\"\n  }), mdx(\"p\", null, \"Recently, on my last project we had to make some product choices (which web server, which application server, etc.).\"), mdx(\"p\", null, \"That\\u2019s how I proceeded.\"), mdx(\"ul\", null, mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"I wrote down on an a spreadsheet all the key criteria for the product choices.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"I picked up three-four products for each product category.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"I\\u2019ve used only three levels of goodness of each product in each category: red = bad, yellow = ok, green = good. All the levels were relative to the other products choices and not absolute.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"We arranged a meeting, discussing the colours on the spreadsheet, at the meeting there was a representative of all the team roles (Scrum Master, Product Owner, some Team members, Architect)\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"We cleaned up the spreadsheet and we send it to the client with more information on the suggested products.\"), mdx(\"li\", {\n    parentName: \"ul\"\n  }, \"The process was time boxed, it took in total less than two ideal days and it was a task in the project backlog.\")), mdx(\"p\", null, \"That\\u2019s how the spreadsheet looked like:\"));\n}\n;\nMDXContent.isMDXComponent = true;"},"allWebMentionEntry":{"nodes":[]}},"pageContext":{"id":"a77bcbbc-006c-5f07-a072-3349f4421f5f","previous":{"id":"78da722e-a678-5435-ae0b-1377f82a34da","fields":{"slug":"/planning-extreme-programming/","published":true},"frontmatter":{"redirect_from":["/planning-extreme-programming-b89ad0c5cb50"],"redirect_to":null,"title":"Planning extreme programming"}},"next":{"id":"274075c7-9b08-51f3-ad97-14115518cb93","fields":{"slug":"/agile-project-management-with-scrum/","published":true},"frontmatter":{"redirect_from":["/agile-project-management-with-scrum-861f5d13a401"],"redirect_to":null,"title":"Agile Project Management with Scrum"}},"permalink":"https://javame.netlify.app/product-choices/","themeOptions":{"plugins":[],"config":{"title":"Antonio Terreno","description":"Antonio Terreno's blog archive","shortBio":"","bio":"Principal Consultant at Equal Experts","author":"Antonio Terreno","githubUrl":"https://github.com/aterreno/blog","siteUrl":"https://javame.netlify.app/","social":{"twitter":"javame","medium":"","facebook":"","github":"aterreno","linkedin":"antonioterreno","instagram":"tritonitri"},"goatCounterCode":null}}}},"staticQueryHashes":["4131332129","645483741"]}