{"id":3172,"date":"2012-11-06T14:24:59","date_gmt":"2012-11-06T21:24:59","guid":{"rendered":"https:\/\/www.jamasoftware.com\/?p=3172"},"modified":"2023-01-12T16:57:04","modified_gmt":"2023-01-13T00:57:04","slug":"software-requirements-classifying-customer-input-part-2","status":"publish","type":"post","link":"https:\/\/www.jamasoftware.com\/legacy\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/","title":{"rendered":"Software Requirements: Classifying Customer Input, Part 2"},"content":{"rendered":"<p>In the first part of this two-part series I described some cues that help the business analyst detect when a customer has presented some input that could be classified as a business requirement, use case, business rule, or functional requirement. This article continues the discussion to help you classify customer input into several other categories of requirements knowledge.<\/p>\n<p><strong>Quality Attributes.<\/strong> Statements that indicate how well the system performs some behavior or lets the user take some action are quality attributes, also called quality factors, quality of service requirements, and sometimes simply nonfunctional requirements. Listen for words that describe desirable system characteristics: fast, easy, intuitive, user-friendly, robust, reliable, secure, and efficient. Chapter 12 of my book <em>Software Requirements, 2nd Edition<\/em> provides guidance on writing quality attributes.<\/p>\n<p>You\u2019ve probably been asked to build user-friendly software, but I\u2019ll bet you\u2019ve never been asked to build user-hostile or user-surly software. Everybody wants user-friendly software. However, it does you no good to write down a requirement that simply states, \u201cThe system shall be user-friendly\u201d or robust, or intuitive, or any of these other good things. Those are not useful requirements because we don\u2019t know just what they mean yet. But the customer has an important and legitimate idea behind each requirement, which you\u2019ll need to flesh out.<\/p>\n<p>If you hear this sort of vague and fuzzy input, rather than just dismissing it as not useful, regard it as a clue to have a conversation about the statement. Ask the person who provided that input questions such as: \u201cWhat does user-friendly mean to you? How would we know if this was user-friendly enough? Can you give me some examples of things that you consider as being user-friendly or not user-friendly?\u201d As a BA, you\u2019ll have to work with the users to understand precisely what they mean by these ambiguous and subjective terms so you can write clear, verifiable, and achievable quality goals.<\/p>\n<p><strong>External Interface Requirements.<\/strong> Requirements in this category describe the connections between your system and the rest of the universe. The SRS should include sections for interfaces to users, to hardware devices, and to other software systems, as necessary. Phrases that indicate that the customer is describing an external interface requirement might sound like the following:<\/p>\n<p>\u2022 \u201cMust read signals from (some device).\u201d<\/p>\n<p>\u2022 \u201cMust send messages to (some other system).\u201d<\/p>\n<p>\u2022 \u201cMust be able to read (or write) files in (some format).\u201d<\/p>\n<p>\u2022 \u201cMust control (some piece of hardware).\u201d<\/p>\n<p>\u2022 \u201cUser interface elements must conform to (some UI style standard).\u201d<\/p>\n<p><strong>Constraints.<\/strong> Design and implementation constraints legitimately restrict the options available to the developer. Hardware devices having embedded software often must respect physical constraints such as size, weight, and interface connections. It\u2019s a good idea to record the rationale behind each constraint so that all project participants know where it came from and respect its validity. Is it truly a restrictive limitation, as when a device must fit into an existing physical space? Or is it a desirable goal, such as a tablet computer that weighs as little as possible?<\/p>\n<p>Unnecessary constraints inhibit creating the best solution. Excessive constraints also reduce your ability to use commercially available components as part of the solution. A constraint that specifies that a particular technology be used poses the risk of making a requirement obsolete or unattainable because of changes in the available technologies. Certain constraints can help achieve quality attribute goals. An example is to improve portability by using only the standard commands of a programming language, not permitting vendor-specific extensions.<\/p>\n<p>The following are examples of constraints that you might hear from a customer:<\/p>\n<ul>\n<li>\u201cFiles submitted electronically may not exceed 10 MB in size.\u201d<\/li>\n<li>\u201cThe browser must use 128-bit encryption for all secure transactions.\u201d<\/li>\n<li>\u201cThe database must use the Framalam 10.2 run-time engine.\u201d<\/li>\n<\/ul>\n<p>Other phrases that suggest the speaker is describing a design or implementation constraint include these:<\/p>\n<ul>\n<li>\u00a0\u201cMust be written in (a specific programming language).\u201d<\/li>\n<li>\u201cCan\u2019t require more than (some amount of memory).\u201d<\/li>\n<li>\u201cMust operate identically to (or be consistent with) (some other system).\u201d<\/li>\n<li>\u201cMust use (a specific user interface control).\u201d<\/li>\n<\/ul>\n<p>As with functional requirements, the analyst shouldn\u2019t simply transcribe the user\u2019s statement of a constraint into the SRS. Weak words such as <em>identically<\/em> and <em>consistent<\/em> need to be clarified and the real constraint stated precisely enough for developers to act on the information. Ask why the constraint exists, verify its validity (the constraint might be obsolete or based on an incorrect assumption), and document its rationale.<\/p>\n<p><strong>Data Definitions.<\/strong> Whenever customers describe the format, data type, allowed values, or default value for a data item or the composition of a complex business data structure, they\u2019re presenting a data definition. \u201cThe ZIP code consists of five digits, followed by an optional hyphen and an optional four digits that default to 0000\u201d is a data definition. Collect these in a data dictionary, a master reference that the team can use throughout the product\u2019s development and maintenance. See Chapter 10 of <em>Software Requirements, 2nd Edition<\/em> for more about data dictionaries.<\/p>\n<p>Data definitions sometimes lead to functional requirements that the user community did not request directly. What happens when a six-digit order number rolls over from 999999? Developers need to know how the system will handle such data issues. Deferring data-related problems just makes them harder to solve in the future; remember Y2K?.<\/p>\n<p><strong>Solution Ideas.<\/strong> Much of what users present as requirements fits in the category of solution ideas. Someone who describes a specific way to interact with the system to perform some action is presenting a suggested solution. The BA needs to probe below the surface of a solution idea to get to the real requirement. For instance, functional requirements that deal with passwords are just one of several possible solutions for an access control requirement.<\/p>\n<p>Suppose you\u2019re working on the requirements for a new point-of-sale system for a chain of stores that ship packages around the universe. Perhaps a user representative tells you, \u201cThen I select the state where I want to send the package from a drop-down list.\u201d The phrase <em>from a drop-down list<\/em> indicates that this is a solution idea. The user is envisioning a specific type of user interface control. The prudent BA will ask, \u201cWhy from a drop-down list?\u201d If the user replies, \u201cThat just seemed like a good way to do it,\u201d then the real functional requirement is something like, \u201cThe system shall permit the user to specify the state where he wants to send the package.\u201d This statement gives the developer a lot of flexibility in choosing the most appropriate interaction mechanism.<\/p>\n<p>However, maybe the user says, \u201cI suggested a drop-down list because we do the same thing in several other places and I want it to be consistent. Also, it prevents the user from entering invalid data, and I thought we might be able to reuse some code.\u201d These are fine reasons to specify a specific solution. Recognize, though, that embedding a solution idea in a requirement imposes a design constraint on that requirement. It limits the requirement to being implemented in only one way. This isn\u2019t necessarily wrong or bad; just make sure the constraint is there for a good reason.<\/p>\n<p>The thrust of these two articles is that you can\u2019t expect your customers to present a succinct, complete, and well-organized list of their needs. Instead, they will present you with a wide variety of inputs, all of which seem important to them, and it\u2019s up to you\u2014the BA\u2014to sort through what you hear to phrase it in a useful way and park it in a sensible location. That\u2019s a big part of what requirements analysis is all about.<\/p>\n<p>Check out <a title=\"Software Requirements: Classifying Customer Input, Part 1\" href=\"https:\/\/www.jamasoftware.com\/blog\/software-requirements-classifying-customer-input-part-1\">Software Requirements: Classifying Customer Input, Part 1<\/a>.<\/p>\n<p><em>Jama Software has partnered with Karl Wiegers to share licensed content from his books and articles on our web site via a series of blog posts, whitepapers and webinars.\u00a0 Karl Wiegers is an independent consultant and not an employee of Jama. \u00a0He can be reached at\u00a0<a href=\"http:\/\/www.processimpact.com\">http:\/\/www.processimpact.com<\/a>.\u00a0 Enjoy these free\u00a0<a href=\"https:\/\/www.jamasoftware.com\/resources\/\">requirements management resources<\/a>.<\/em><\/p>\n<p>&nbsp;<\/p>\n<input class=\"fooboxshare_post_id\" type=\"hidden\" value=\"3172\"\/>","protected":false},"excerpt":{"rendered":"<p>In the first part of this two-part series I described some cues that help the business analyst detect when a customer has presented some input that could be classified as a business requirement, use case, business rule, or functional requirement. This article continues the discussion to help you classify customer input into several other categories [&hellip;]<\/p>\n","protected":false},"author":68,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[50],"tags":[51,60,61],"industry":[],"class_list":["post-3172","post","type-post","status-publish","format-standard","hentry","category-requirements-management","tag-business-requirements","tag-customer-needs","tag-use-cases"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.1 (Yoast SEO v28.1) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Classifying Customer Input, Part 2 | Jama Software<\/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:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Software Requirements: Classifying Customer Input, Part 2\" \/>\n<meta property=\"og:description\" content=\"In the first part of this two-part series I described some cues that help the business analyst detect when a customer has presented some input that could be classified as a business requirement, use case, business rule, or functional requirement. This article continues the discussion to help you classify customer input into several other categories [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Jama Software\" \/>\n<meta property=\"article:published_time\" content=\"2012-11-06T21:24:59+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-01-13T00:57:04+00:00\" \/>\n<meta name=\"author\" content=\"Karl Wiegers\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Karl Wiegers\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/\"},\"author\":{\"name\":\"Karl Wiegers\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#\\\/schema\\\/person\\\/e6a00f0ad439a5e1865476b36481aa47\"},\"headline\":\"Software Requirements: Classifying Customer Input, Part 2\",\"datePublished\":\"2012-11-06T21:24:59+00:00\",\"dateModified\":\"2023-01-13T00:57:04+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/\"},\"wordCount\":1348,\"keywords\":[\"business requirements\",\"customer needs\",\"use cases\"],\"articleSection\":[\"Requirements &amp; Requirements Management\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/\",\"url\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/\",\"name\":\"Classifying Customer Input, Part 2 | Jama Software\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#website\"},\"datePublished\":\"2012-11-06T21:24:59+00:00\",\"dateModified\":\"2023-01-13T00:57:04+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#\\\/schema\\\/person\\\/e6a00f0ad439a5e1865476b36481aa47\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/2012\\\/11\\\/06\\\/software-requirements-classifying-customer-input-part-2\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.jamasoftware.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Software Requirements: Classifying Customer Input, Part 2\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#website\",\"url\":\"https:\\\/\\\/www.jamasoftware.com\\\/\",\"name\":\"Jama Software\",\"description\":\"Jama Connect\u00ae #1 in Requirements Management\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.jamasoftware.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.jamasoftware.com\\\/#\\\/schema\\\/person\\\/e6a00f0ad439a5e1865476b36481aa47\",\"name\":\"Karl Wiegers\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g\",\"caption\":\"Karl Wiegers\"},\"description\":\"Subject matter expert Karl Wiegers writes on best practices for writing requirements, requirements management, and requirements traceability.\",\"sameAs\":[\"alison@makes-magic.com\"],\"url\":\"https:\\\/\\\/www.jamasoftware.com\\\/blog\\\/author\\\/kwiegers\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Classifying Customer Input, Part 2 | Jama Software","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:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/","og_locale":"en_US","og_type":"article","og_title":"Software Requirements: Classifying Customer Input, Part 2","og_description":"In the first part of this two-part series I described some cues that help the business analyst detect when a customer has presented some input that could be classified as a business requirement, use case, business rule, or functional requirement. This article continues the discussion to help you classify customer input into several other categories [&hellip;]","og_url":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/","og_site_name":"Jama Software","article_published_time":"2012-11-06T21:24:59+00:00","article_modified_time":"2023-01-13T00:57:04+00:00","author":"Karl Wiegers","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Karl Wiegers","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/#article","isPartOf":{"@id":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/"},"author":{"name":"Karl Wiegers","@id":"https:\/\/www.jamasoftware.com\/#\/schema\/person\/e6a00f0ad439a5e1865476b36481aa47"},"headline":"Software Requirements: Classifying Customer Input, Part 2","datePublished":"2012-11-06T21:24:59+00:00","dateModified":"2023-01-13T00:57:04+00:00","mainEntityOfPage":{"@id":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/"},"wordCount":1348,"keywords":["business requirements","customer needs","use cases"],"articleSection":["Requirements &amp; Requirements Management"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/","url":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/","name":"Classifying Customer Input, Part 2 | Jama Software","isPartOf":{"@id":"https:\/\/www.jamasoftware.com\/#website"},"datePublished":"2012-11-06T21:24:59+00:00","dateModified":"2023-01-13T00:57:04+00:00","author":{"@id":"https:\/\/www.jamasoftware.com\/#\/schema\/person\/e6a00f0ad439a5e1865476b36481aa47"},"breadcrumb":{"@id":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.jamasoftware.com\/blog\/2012\/11\/06\/software-requirements-classifying-customer-input-part-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.jamasoftware.com\/"},{"@type":"ListItem","position":2,"name":"Software Requirements: Classifying Customer Input, Part 2"}]},{"@type":"WebSite","@id":"https:\/\/www.jamasoftware.com\/#website","url":"https:\/\/www.jamasoftware.com\/","name":"Jama Software","description":"Jama Connect\u00ae #1 in Requirements Management","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.jamasoftware.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.jamasoftware.com\/#\/schema\/person\/e6a00f0ad439a5e1865476b36481aa47","name":"Karl Wiegers","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/6d4992a28dda9ae47cf239c04be9a0bc554586672cba38949c070d2fed228aef?s=96&d=mm&r=g","caption":"Karl Wiegers"},"description":"Subject matter expert Karl Wiegers writes on best practices for writing requirements, requirements management, and requirements traceability.","sameAs":["alison@makes-magic.com"],"url":"https:\/\/www.jamasoftware.com\/blog\/author\/kwiegers\/"}]}},"_links":{"self":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/posts\/3172","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/users\/68"}],"replies":[{"embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/comments?post=3172"}],"version-history":[{"count":0,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/posts\/3172\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/media?parent=3172"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/categories?post=3172"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/tags?post=3172"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/www.jamasoftware.com\/legacy\/wp-json\/wp\/v2\/industry?post=3172"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}