{"id":305,"date":"2015-05-03T12:01:26","date_gmt":"2015-05-03T11:01:26","guid":{"rendered":"http:\/\/dawilson.co.uk\/blog\/?p=305"},"modified":"2015-05-03T12:01:26","modified_gmt":"2015-05-03T11:01:26","slug":"functional-requirements-by-the-book","status":"publish","type":"post","link":"https:\/\/dawilson.co.uk\/blog\/functional-requirements-by-the-book\/","title":{"rendered":"Functional requirements by the book"},"content":{"rendered":"<p>In preparation for my <a href=\"http:\/\/www.open.ac.uk\/postgraduate\/modules\/m814\" target=\"_blank\">next Open University module<\/a>, I have invested in getting an early copy of the set book so that I can start working through it at a nice relaxed pace. The book itself &#8211; <a href=\"http:\/\/www.amazon.co.uk\/Mastering-Requirements-Process-Getting-Right\/dp\/0321815742\" target=\"_blank\">Mastering the Requirements Process (Robertson and Robertson)<\/a> &#8211; is a renowned text that deals with the specification of requirements, primarily for use in the development of software systems.<\/p>\n<p>The authors have provided the case study of a road de-icing system, which involves weather prediction and the scheduling of road de-icing trucks, to demonstrate their proposed process at each of the following stages:<\/p>\n<ul>\n<li>Setting the scope of the project;<\/li>\n<li>Investigating the nature of the problem;<\/li>\n<li>Devising the optimal solution;<\/li>\n<li>Defining the system requirements.<\/li>\n<\/ul>\n<p>A fundamental belief that reoccurs throughout is that focus should primarily be on the real-world problem, stripping away any technology or implementation specific details. One of the many quotes illustrating this appears on page 225:<\/p>\n<blockquote><p>[Functional requirements] should be, as far as possible, expressed independently from any technology that will be used to implement them.<\/p><\/blockquote>\n<p>At work I have recently moved from developing lower level software implementations to designing and describing higher level system requirements, so have a real appreciation for how challenging this shift in focus can be. However, even with my relative inexperience in this area, I was quite surprised to see the following examples of functional requirements presented over on page 227:<\/p>\n<p><strong>The product shall accept a scheduling date.<\/strong><\/p>\n<p><strong>The product shall warn if the scheduling date is neither today nor the next day.<\/strong><\/p>\n<p>A personal philosophy that I picked up during my undergraduate study was that software should, as far as possible, prevent the user from entering invalid data. I mean, how frustrating do you find it when a piece of software tells you that you have entered something wrong, when it could have prevented you from doing so in the first place?<\/p>\n<p>For this reason, any decently designed user interface for the road de-icing system would, until very recently, probably have provided a date picker dialog box with the date range limited to today and tomorrow.<\/p>\n<p>As user interfaces have become increasingly rich in recent years, and touchscreens more prevalent, a modern implementation of the system may actually look more similar to the Bing Weather application. This shows the weather for the next seven days in a single scrolling view, with the user swiping left and right to get the full forecast.<\/p>\n<figure style=\"width: 1920px\" class=\"wp-caption alignnone\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/9v01hg.dm2302.livefilestore.com\/y2ps5HhtFU9ADRUeOq_SWMZ6n6VY7-wbU39HDKtdlkO-J7BqcGLyqtmwkclJLNLYakvEsNKaOo6inKbzg0CsSwlXK2W5uSyKWBbFXmpF9wYBqiqgd3w_rxwd6Q5gv8z3L8_oDNTSB0pt6ZjaGoQhBh_y8rf6oPzGUY2HMCVDggNaYM\/BingWeather.png?psid=1\" alt=\"\" width=\"1920\" height=\"1080\" \/><figcaption class=\"wp-caption-text\">Bing Weather<\/figcaption><\/figure>\n<p>In either case, there is no need for the user to enter a date and certainly no need for a warning message to be displayed. As such, if I were asked to review a specification containing the two examples of requirements shown above, I would definitely have to question whether or not they are placing a constraint on the designers.<\/p>\n<p>Although not professed as being a perfect solution, perhaps the starting point for a more implementation agnostic requirement would be:<\/p>\n<p><strong>The product shall provide a road de-icing schedule for the current day and the following day.<\/strong><\/p>\n<p>I believe that my observation here inadvertently adds weight to Robertson and Robertson\u2019s core argument that requirements should be free of technological details, and I would not say that it tarnishes their outstanding work in any way.<\/p>\n<p>From a personal perspective however, I do feel a slight sense of relief that even the subject matter experts have had difficulty in creating a functional requirement that does not raise questions.<\/p>\n<p>DW.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In preparation for my next Open University module, I have invested in getting an early copy of the set book so that I can start working through it at a nice relaxed pace. The book itself &#8211; Mastering the Requirements Process (Robertson and Robertson) &#8211; is a renowned text that deals with the specification of &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/dawilson.co.uk\/blog\/functional-requirements-by-the-book\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Functional requirements by the book&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[11],"tags":[14,8],"class_list":["post-305","post","type-post","status-publish","format-standard","hentry","category-assorted-musings","tag-peer-review","tag-requirements-engineering-2"],"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/305","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/comments?post=305"}],"version-history":[{"count":2,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/305\/revisions"}],"predecessor-version":[{"id":307,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/posts\/305\/revisions\/307"}],"wp:attachment":[{"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/media?parent=305"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/categories?post=305"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dawilson.co.uk\/blog\/wp-json\/wp\/v2\/tags?post=305"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}