<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";}
@page WordSection1
        {size:8.5in 11.0in;
        margin:56.7pt 42.5pt 56.7pt 85.05pt;}
div.WordSection1
        {page:WordSection1;}
/* List Definitions */
@list l0
        {mso-list-id:1347320069;
        mso-list-type:hybrid;
        mso-list-template-ids:-673544642 1335951048 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}
@list l0:level1
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:63.75pt;
        text-indent:-.25in;}
@list l0:level2
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:99.75pt;
        text-indent:-.25in;}
@list l0:level3
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:135.75pt;
        text-indent:-9.0pt;}
@list l0:level4
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:171.75pt;
        text-indent:-.25in;}
@list l0:level5
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:207.75pt;
        text-indent:-.25in;}
@list l0:level6
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:243.75pt;
        text-indent:-9.0pt;}
@list l0:level7
        {mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:279.75pt;
        text-indent:-.25in;}
@list l0:level8
        {mso-level-number-format:alpha-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:left;
        margin-left:315.75pt;
        text-indent:-.25in;}
@list l0:level9
        {mso-level-number-format:roman-lower;
        mso-level-tab-stop:none;
        mso-level-number-position:right;
        margin-left:351.75pt;
        text-indent:-9.0pt;}
ol
        {margin-bottom:0in;}
ul
        {margin-bottom:0in;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-US" link="blue" vlink="purple">
<div class="WordSection1">
<pre>Thank you again, Steve.<o:p></o:p></pre>
<pre><o:p>&nbsp;</o:p></pre>
<pre>We need to make all kind of changes to the rules, however, small changes are more frequent than significant ones. So, every time we are deploying a new rule, there is a risk of it either not compiling or failing properly follow business logic.<o:p></o:p></pre>
<pre><o:p>&nbsp;</o:p></pre>
<pre>We can trust users with any changes, however, moving the code to production is a big deal. This should be vetted by an authority figure, and there must be a simple and transparent rollback plan.<o:p></o:p></pre>
<pre>Yes, we want to be very risk-averse.<o:p></o:p></pre>
<pre><o:p>&nbsp;</o:p></pre>
<pre>Ideally, we would like to have:<o:p></o:p></pre>
<pre style="margin-left:63.75pt;text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="mso-list:Ignore">1.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span><![endif]>A staging environment where automation tests are run;<o:p></o:p></pre>
<pre style="margin-left:63.75pt;text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="mso-list:Ignore">2.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span><![endif]>A change can be deployed to production only if all automation tests have passed;<o:p></o:p></pre>
<pre style="margin-left:63.75pt;text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="mso-list:Ignore">3.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span><![endif]>Some kind of administration console from which a change can be manually deployed to production (via uploading to production Maven repository or in some other way);<o:p></o:p></pre>
<pre style="margin-left:63.75pt;text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="mso-list:Ignore">4.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span><![endif]>Production Drools system picking up new changes without interruption of service;<o:p></o:p></pre>
<pre style="margin-left:63.75pt;text-indent:-.25in;mso-list:l0 level1 lfo1"><![if !supportLists]><span style="mso-list:Ignore">5.<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp; </span></span><![endif]>Production console function allowing a one-click rollback of a recent change;<o:p></o:p></pre>
<pre><o:p>&nbsp;</o:p></pre>
<pre>Alex<o:p></o:p></pre>
<pre><o:p>&nbsp;</o:p></pre>
<pre>P.S. Sorry, it looks like I have not mastered proper replying to a forum thread.<o:p></o:p></pre>
<pre><o:p>&nbsp;</o:p></pre>
<pre><o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>Pretty much correct.<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>re. 5 - It depends on what you mean by it becoming clear that a release is a bad one.<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>I have tended to code up my own knowledge base reloads and check for errors, but I&#8217;m pretty sure that if your rules don&#8217;t compile, then neither the KnowledgeAgent nor the KieScanner will deploy them. If you use Guvnor, then your project will not be built and packaged if the rules don&#8217;t compile.<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>However, if the problem is that the new rules are just &#8216;wrong&#8217; within your domain, then it&#8217;s hard to think of any way in which that could be detected &gt;<i> </i>automatically, other than by you yourself writing the validation.<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>To help with this, I have previously set up a FitNesse server which would load in the latest rules and evaluate them, ensuring that output expectations are met. However, no such test suite is perfect. It may be that a change is made which needs a new test to evaluate it. If that test is not written, then the suite of tests still passes.<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>Similarly, you can write unit tests for the build. You can deploy to a staging server, where the rules can be evaluated with as-live data, so that you can regression test the rules service in isolation from the rest of your application.<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>Looking at rollback, in one Guvnor-based system, I have the users take a snapshot for each rules deployment. They then copy that snapshot to an &#8220;approved&#8221; snapshot. This way, rollback is just a case of copying the previous version to &#8220;approved&#8221; and deploying that. The users are legal and back office operations teams, and they are pretty efficient at following this process these days.<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>However, in the end it comes down to things like:<o:p></o:p></pre>
<pre>&gt;<i> </i>What kind of rule changes do users typically make? i.e. Are they just changing some numbers in existing decision tables?<o:p></o:p></pre>
<pre>&gt;<i> </i>Can you trust the users to only make non-risky changes? Guvnor won&#8217;t stop them from altering the structure of decision tables, or adding new non-decision-table rules.<o:p></o:p></pre>
<pre>&gt;<i> </i>How risk-averse are you?<o:p></o:p></pre>
<pre>&gt;<o:p>&nbsp;</o:p></pre>
<pre>&gt;<i> </i>Steve<o:p></o:p></pre>
</div>
</body>
</html>