{"id":2771,"date":"2017-05-28T16:00:16","date_gmt":"2017-05-28T15:00:16","guid":{"rendered":"https:\/\/thekua.com\/atwork\/?p=2771"},"modified":"2017-05-27T16:37:22","modified_gmt":"2017-05-27T15:37:22","slug":"three-ways-to-handle-cfrs","status":"publish","type":"post","link":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/","title":{"rendered":"Three ways to handle CFRs"},"content":{"rendered":"<p><strong>Cross-Functional Requirements (CFRs)<\/strong> are some of the key system characteristics that are important to design and account for. Internally we refer to these as CFRs, although classically they might be called <strong>Non-Functional Requirements<\/strong> (NFRs) or <strong>System Quality Attributes<\/strong>, however their cross-cutting nature means you always need to consider the impact of CFRs on new or existing functionality.<\/p>\n<p>In the Tech Lead courses that I run, we discuss how it&#8217;s important that the Tech Lead ensures that the relevant CFRs are identified and accounted for either in design or development. Here are three ways I have seen some CFRs accounted handled.<\/p>\n<h2>1. CFRs satisfied via user stories and acceptance criteria<\/h2>\n<p><strong>Security<\/strong>, <strong>authentication<\/strong> and <strong>authorisation<\/strong> stories are CFRs that naturally lend themselves to actually building out testable functionality. It&#8217;s important to consider the effort the risk and, in my experience, is important to start implementing these early to make sure they meet the needs and can evolve. <\/p>\n<p>For these sorts of CFRs, it&#8217;s useful to identify these as natural user stories, and once implemented become acceptance criteria on future user stories that touch that area of the system.<\/p>\n<p>As as example, authorisation can be dealt with by introducing a new persona role and what they might do (or not do) that others can have:<\/p>\n<blockquote><p>As an administrator, I would like to change the email server settings via a user interface, so that I do not need to raise an IT change request for it.<\/p><\/blockquote>\n<p>If this is the first time that this user story is implemented, then some acceptance criteria might look like:<\/p>\n<blockquote>\n<ul>\n<li>Only a user with an administrator role can access this page<\/li>\n<li>Only a user with an administrator role can successfully update the email setting (check the API)<\/li>\n<li>Users with no administrator access receive a 403 or equivalent<\/li>\n<\/ul>\n<\/blockquote>\n<p>This new role addition often means considering new acceptance criteria for every story going forward (if it should be accessible <em>only<\/em> by administrators or by all.<\/p>\n<h2>2. CFRs satisfied through architectural design<\/h2>\n<p><strong>Scalability<\/strong> and <strong>durability<\/strong> are often CFRs that require upfront thinking about the architectural design, and perhaps planning for redundancy in the form of additional hardware, network, or bandwidth capacity. A web-based solution that needs to be scalable might draw upon the <a href=\"https:\/\/12factor.net\/\">12-factor application<\/a> principles, as well as considering the underlying hardware. Failing to think about the architectural patterns that enable scalability and start coding will lead to additional rework later, or make it even impossible to scale. <\/p>\n<h2>3. CFRs satisfied via the development process<\/h2>\n<p><strong>User experience<\/strong> is a CFR which often requires people, making automated testing much more difficult. An application where a high level of user experience is best dealt with by ensuring that a person with a background in UX is involved and that certain activities and feedback cycles are planned into the software development process to continually fine-tune the user experience as an application evolves. <\/p>\n<p>Changes to the development process might include explicit user research activities, continuous user testing activities, the addition of an A\/B capability and some training for product people and the development team to ensure that the developed software meets the desired level of user experience. <\/p>\n<h2>Conclusion<\/h2>\n<p>Every system has their own set of <strong>Cross-Functional Requirements<\/strong> (CFRs) and it is essential that teams focus on identifying the relevant and important CFRs and find ways to ensure they are met. In this article, I shared three typical ways that CFRs might be met. <\/p>\n<p>How else have you seen these handled? <\/p>\n","protected":false},"excerpt":{"rendered":"<p>Cross-Functional Requirements (CFRs) are some of the key system characteristics that are important to design and account for. Internally we refer to these as CFRs, although classically they might be called Non-Functional Requirements (NFRs) or System Quality Attributes, however their cross-cutting nature means you always need to consider the impact of CFRs on new or [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":2792,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1,74,4],"tags":[],"class_list":["post-2771","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-agile","category-architecture","category-development","post-preview"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.3 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Three ways to handle CFRs - patkua@work<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Three ways to handle CFRs - patkua@work\" \/>\n<meta property=\"og:description\" content=\"Cross-Functional Requirements (CFRs) are some of the key system characteristics that are important to design and account for. Internally we refer to these as CFRs, although classically they might be called Non-Functional Requirements (NFRs) or System Quality Attributes, however their cross-cutting nature means you always need to consider the impact of CFRs on new or [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/\" \/>\n<meta property=\"og:site_name\" content=\"patkua@work\" \/>\n<meta property=\"article:published_time\" content=\"2017-05-28T15:00:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/thekua.com\/atwork\/wp-content\/uploads\/2017\/05\/ThreeWaysToHandleCFRs.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"512\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Patrick\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@patkua\" \/>\n<meta name=\"twitter:site\" content=\"@patkua\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Patrick\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"3 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/\"},\"author\":{\"name\":\"Patrick\",\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/#\\\/schema\\\/person\\\/c942203c9ed3ff9e21c6c49a996ea3ae\"},\"headline\":\"Three ways to handle CFRs\",\"datePublished\":\"2017-05-28T15:00:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/\"},\"wordCount\":580,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/wp-content\\\/uploads\\\/2017\\\/05\\\/ThreeWaysToHandleCFRs.png\",\"articleSection\":[\"Agile\",\"Architecture\",\"Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/\",\"url\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/\",\"name\":\"Three ways to handle CFRs - patkua@work\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/wp-content\\\/uploads\\\/2017\\\/05\\\/ThreeWaysToHandleCFRs.png\",\"datePublished\":\"2017-05-28T15:00:16+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/#\\\/schema\\\/person\\\/c942203c9ed3ff9e21c6c49a996ea3ae\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#primaryimage\",\"url\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/wp-content\\\/uploads\\\/2017\\\/05\\\/ThreeWaysToHandleCFRs.png\",\"contentUrl\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/wp-content\\\/uploads\\\/2017\\\/05\\\/ThreeWaysToHandleCFRs.png\",\"width\":1024,\"height\":512,\"caption\":\"Three ways to handle CFRs\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/2017\\\/05\\\/three-ways-to-handle-cfrs\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Three ways to handle CFRs\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/#website\",\"url\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/\",\"name\":\"patkua@work\",\"description\":\"The intersection of technology and leadership\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/#\\\/schema\\\/person\\\/c942203c9ed3ff9e21c6c49a996ea3ae\",\"name\":\"Patrick\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2ef85a5f91c2aac13efb3ac90077b4db7f8883cafd6e60f2bcecba6b092d4011?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2ef85a5f91c2aac13efb3ac90077b4db7f8883cafd6e60f2bcecba6b092d4011?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/2ef85a5f91c2aac13efb3ac90077b4db7f8883cafd6e60f2bcecba6b092d4011?s=96&d=mm&r=g\",\"caption\":\"Patrick\"},\"sameAs\":[\"http:\\\/\\\/thekua.com\\\/atwork\"],\"url\":\"https:\\\/\\\/thekua.com\\\/atwork\\\/author\\\/patrick\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Three ways to handle CFRs - patkua@work","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/","og_locale":"en_US","og_type":"article","og_title":"Three ways to handle CFRs - patkua@work","og_description":"Cross-Functional Requirements (CFRs) are some of the key system characteristics that are important to design and account for. Internally we refer to these as CFRs, although classically they might be called Non-Functional Requirements (NFRs) or System Quality Attributes, however their cross-cutting nature means you always need to consider the impact of CFRs on new or [&hellip;]","og_url":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/","og_site_name":"patkua@work","article_published_time":"2017-05-28T15:00:16+00:00","og_image":[{"width":1024,"height":512,"url":"https:\/\/thekua.com\/atwork\/wp-content\/uploads\/2017\/05\/ThreeWaysToHandleCFRs.png","type":"image\/png"}],"author":"Patrick","twitter_card":"summary_large_image","twitter_creator":"@patkua","twitter_site":"@patkua","twitter_misc":{"Written by":"Patrick","Est. reading time":"3 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#article","isPartOf":{"@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/"},"author":{"name":"Patrick","@id":"https:\/\/thekua.com\/atwork\/#\/schema\/person\/c942203c9ed3ff9e21c6c49a996ea3ae"},"headline":"Three ways to handle CFRs","datePublished":"2017-05-28T15:00:16+00:00","mainEntityOfPage":{"@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/"},"wordCount":580,"commentCount":0,"image":{"@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#primaryimage"},"thumbnailUrl":"https:\/\/thekua.com\/atwork\/wp-content\/uploads\/2017\/05\/ThreeWaysToHandleCFRs.png","articleSection":["Agile","Architecture","Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/","url":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/","name":"Three ways to handle CFRs - patkua@work","isPartOf":{"@id":"https:\/\/thekua.com\/atwork\/#website"},"primaryImageOfPage":{"@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#primaryimage"},"image":{"@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#primaryimage"},"thumbnailUrl":"https:\/\/thekua.com\/atwork\/wp-content\/uploads\/2017\/05\/ThreeWaysToHandleCFRs.png","datePublished":"2017-05-28T15:00:16+00:00","author":{"@id":"https:\/\/thekua.com\/atwork\/#\/schema\/person\/c942203c9ed3ff9e21c6c49a996ea3ae"},"breadcrumb":{"@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#primaryimage","url":"https:\/\/thekua.com\/atwork\/wp-content\/uploads\/2017\/05\/ThreeWaysToHandleCFRs.png","contentUrl":"https:\/\/thekua.com\/atwork\/wp-content\/uploads\/2017\/05\/ThreeWaysToHandleCFRs.png","width":1024,"height":512,"caption":"Three ways to handle CFRs"},{"@type":"BreadcrumbList","@id":"https:\/\/thekua.com\/atwork\/2017\/05\/three-ways-to-handle-cfrs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/thekua.com\/atwork\/"},{"@type":"ListItem","position":2,"name":"Three ways to handle CFRs"}]},{"@type":"WebSite","@id":"https:\/\/thekua.com\/atwork\/#website","url":"https:\/\/thekua.com\/atwork\/","name":"patkua@work","description":"The intersection of technology and leadership","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/thekua.com\/atwork\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/thekua.com\/atwork\/#\/schema\/person\/c942203c9ed3ff9e21c6c49a996ea3ae","name":"Patrick","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/2ef85a5f91c2aac13efb3ac90077b4db7f8883cafd6e60f2bcecba6b092d4011?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/2ef85a5f91c2aac13efb3ac90077b4db7f8883cafd6e60f2bcecba6b092d4011?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/2ef85a5f91c2aac13efb3ac90077b4db7f8883cafd6e60f2bcecba6b092d4011?s=96&d=mm&r=g","caption":"Patrick"},"sameAs":["http:\/\/thekua.com\/atwork"],"url":"https:\/\/thekua.com\/atwork\/author\/patrick\/"}]}},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/posts\/2771","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/comments?post=2771"}],"version-history":[{"count":6,"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/posts\/2771\/revisions"}],"predecessor-version":[{"id":2794,"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/posts\/2771\/revisions\/2794"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/media\/2792"}],"wp:attachment":[{"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/media?parent=2771"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/categories?post=2771"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/thekua.com\/atwork\/wp-json\/wp\/v2\/tags?post=2771"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}