{"id":1690,"date":"2012-11-08T22:55:38","date_gmt":"2012-11-08T12:55:38","guid":{"rendered":"http:\/\/www.somethinkodd.com\/oddthinking\/?p=1690"},"modified":"2012-11-14T11:41:54","modified_gmt":"2012-11-14T01:41:54","slug":"anti-pattern-let-the-users-configure-the-business-rules","status":"publish","type":"post","link":"https:\/\/www.somethinkodd.com\/oddthinking\/2012\/11\/08\/anti-pattern-let-the-users-configure-the-business-rules\/","title":{"rendered":"Anti-Pattern: Let the Users Configure the Business Rules"},"content":{"rendered":"<p>Here is a software analysis <a href=\"http:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" title=\"Wikipedia definition of Anti-pattern\" class=\"wikipedia\">anti-pattern<\/a> I have seen many times in my career. It is popping up in my current project, and I am trying to work out how to subvert it early.<\/p>\n<p>Let me describe the cycle.<\/p>\n<ol>\n<li>Some set of commonly-changing business rules are hard-coded in the source-code.<\/li>\n<li>Developers are too busy or their processes are too slow to be responsive to requests to change the business rules.<\/li>\n<li>It gets decided that the rules should be exposed through a user-interface, to allow the configuration to be customised by a non-developer who directly understands the business.<\/li>\n<li>Great effort is made to create an interface to support customisation.\n<\/li>\n<li>Optionally: Once again, it is realised that Boolean logic is clumsy in a user-interface that isn&#8217;t plain text.<\/li>\n<li>Optionally: Some potential customisations are missed, and the interface needs to be redeveloped, or special hard-coded rules are detected in the source and treated specially.<\/li>\n<li>It turns out that, although the new interface enables the <em>editing<\/em> of the rules, it the editing isn&#8217;t the hard part. Reasoning about how all the different rules interact &#8211; that is the hard part. Considering every situation, not just the main ones &#8211; that is the hard part. Testing your understanding to make sure it is correctly implemented &#8211; that is the hard part. <em>These are the special skills that the developers bring.<\/em> <\/li>\n<li>The non-developer gives up in disgust, generally blaming the user interface as too complex, not realising it is the problem domain is more complex than they know how to realise.\n<\/li>\n<li>The task reverts back to the busy developers, who continue to laboriously work through the consequence of every change, but now they have to edit the rules in a custom language\/interface, without comments, without source-control, without a testing framework, without IDE support, without a coding standard, &#8230;<\/li>\n<\/ol>\n","protected":false},"excerpt":{"rendered":"<p>Here is a software analysis <a href=\"http:\/\/en.wikipedia.org\/wiki\/Anti-pattern\" title=\"Wikipedia definition of Anti-pattern\" class=\"wikipedia\">anti-pattern<\/a> I have seen many times in my career. It is popping up in my current project, and I am trying to work out how to subvert it early.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_s2mail":"yes","footnotes":""},"categories":[25,21,34],"tags":[],"class_list":["post-1690","post","type-post","status-publish","format-standard","hentry","category-insufficiently-advanced-technology","category-observation","category-software-development"],"_links":{"self":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/1690","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/comments?post=1690"}],"version-history":[{"count":8,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/1690\/revisions"}],"predecessor-version":[{"id":1793,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/posts\/1690\/revisions\/1793"}],"wp:attachment":[{"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/media?parent=1690"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/categories?post=1690"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.somethinkodd.com\/oddthinking\/wp-json\/wp\/v2\/tags?post=1690"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}