<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://community.appian.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Backward Compatible Design: Planning for Subsequent Deployments</title><link>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments</link><description /><dc:language>en-US</dc:language><generator>Telligent Community 12</generator><item><title>Backward Compatible Design: Planning for Subsequent Deployments</title><link>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments</link><pubDate>Tue, 23 Apr 2024 13:08:11 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:55ecd167-9fc1-4d11-824b-a2e4bedba42a</guid><dc:creator>Appian Max Team</dc:creator><comments>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments#comments</comments><description>Current Revision posted to Article by Appian Max Team on 4/23/2024 1:08:11 PM&lt;br /&gt;
&lt;div&gt;
&lt;p&gt;Changes to an existing application may have an impact on in-flight processes. Process design changes can cause unexpected behavior in production. Following a backward compatible design and running &lt;a href="/success/w/guide/2964/platform-health-management#platform_health_management"&gt;Health Check&lt;/a&gt; as a part of each sprint will help prevent problematic designs such as passing CDTs by reference.&lt;/p&gt;
&lt;p&gt;Below is a list of design best practices to create a backward compatible design and to facilitate subsequent deployments of an application. Best practices for general application implementation are available in the &lt;a href="/success/w/article/3304/project-initiation-best-practices-checklist"&gt;Project Initiation Best Practices Checklist&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="process_models"&gt;Process Models&lt;/h2&gt;
&lt;p&gt;Appian loads the latest version of a process model when instantiating a new process. Therefore, when making changes to process models that are also subprocesses, take into account the impact to the existing parent processes.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Account for null parameters in process design when adding new parameters to a process as in-flight processes will not pass values for the newly created parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;required&lt;/strong&gt; process parameters as in-flight processes will break when calling subprocesses with new required process parameters.
&lt;ul&gt;
&lt;li&gt;This precaution is only necessary if there are in-flight processes which call the modified process model.&lt;/li&gt;
&lt;li&gt;Mitigate the impact of additional required process parameters by leveraging the available tools for &lt;a href="/w/article/3283/addressing-a-production-application-defect#managing-existing-processes"&gt;managing in-flight processes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add new &lt;strong&gt;required&lt;/strong&gt; parameters to receive message events.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cdts_and_entities"&gt;CDTs and Entities&lt;/h2&gt;
&lt;p&gt;In-flight processes will continue to use the old version of the CDT when a CDT is modified by an application deployment or during development.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Verify that new interfaces and new processes launched as a subprocess will work with a null value for the new CDT field as old versions of the CDT will not have a value for that new field when passing a value to subprocesses.&lt;/li&gt;
&lt;li&gt;Verify that absence of a field will not break Web Service Integrations or database integrations.&lt;/li&gt;
&lt;li&gt;Use the function index(...) instead of the dot notation to access the attribute of a CDT&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Delete or rename CDT fields as database writes will break when attempting to write the deleted field to the database.&lt;/li&gt;
&lt;li&gt;Don&amp;#39;t pass a CDT by reference to a sub-process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="expression_rules_and_interfaces"&gt;Expression Rules and Interfaces&lt;/h2&gt;
&lt;p&gt;Process models always run the latest version of a given expression rule or interface. Therefore, it&amp;rsquo;s important that a rule will work with all in-flight versions of the process.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use the keyword syntax when calling a expression rule or interface instead of relying on parameter position.&lt;/li&gt;
&lt;li&gt;Create &lt;a href="https://docs.appian.com/suite/help/latest/Expression_Rules.html#Test_Cases"&gt;test cases&lt;/a&gt; to verify that the expression works for both new and legacy capabilities. This includes calling the expression rule with null values for new parameters.&lt;/li&gt;
&lt;li&gt;Create a new expression rule instead of modifying an existing rule when new process parameters are required.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Change rule parameter order or change rule parameter names.&lt;/li&gt;
&lt;li&gt;Count on processes using named parameters to account for changes to parameter order.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="integrations"&gt;Integrations&lt;/h2&gt;
&lt;p&gt;In-flight processes must be designed to properly integrate with future versions of integrations.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use subprocesses for integrations so processes always use the latest version of an integration process model.&lt;/li&gt;
&lt;li&gt;Design applications with short lived processes so each process always has the latest approach for integrating with an endpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plug-ins"&gt;Plug-ins&lt;/h2&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Create a new version of the smart service with new inputs/outputs and deprecate the old one.&lt;/li&gt;
&lt;li&gt;When deprecating a smart service, update the smart service icon and image to clearly indicate that the version of the smart service should not be used anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t change the plug-in or smart service module key.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t add new required parameters to existing functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, Architecture&lt;/div&gt;
</description></item><item><title>Backward Compatible Design: Planning for Subsequent Deployments</title><link>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments/revision/4</link><pubDate>Tue, 31 Oct 2023 19:31:17 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:55ecd167-9fc1-4d11-824b-a2e4bedba42a</guid><dc:creator>matt.cosenza</dc:creator><comments>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments#comments</comments><description>Revision 4 posted to Article by matt.cosenza on 10/31/2023 7:31:17 PM&lt;br /&gt;
&lt;div&gt;
&lt;p&gt;Changes to an existing application may have an impact on in-flight processes. Process design changes can cause unexpected behavior in production. Following a backward compatible design and running &lt;a href="/success/w/guide/2964/platform-health-management#platform_health_management"&gt;Health Check&lt;/a&gt; as a part of each sprint will help prevent problematic designs such as passing CDTs by reference.&lt;/p&gt;
&lt;p&gt;Below is a list of design best practices to create a backward compatible design and to facilitate subsequent deployments of an application. Best practices for general application implementation are available in the &lt;a href="/success/w/article/3304/project-initiation-best-practices-checklist"&gt;Project Initiation Best Practices Checklist&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="process_models"&gt;Process Models&lt;/h2&gt;
&lt;p&gt;Appian loads the latest version of a process model when instantiating a new process. Therefore, when making changes to process models that are also subprocesses, take into account the impact to the existing parent processes.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Account for null parameters in process design when adding new parameters to a process as in-flight processes will not pass values for the newly created parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;required&lt;/strong&gt; process parameters as in-flight processes will break when calling subprocesses with new required process parameters.
&lt;ul&gt;
&lt;li&gt;This precaution is only necessary if there are in-flight processes which call the modified process model.&lt;/li&gt;
&lt;li&gt;Mitigate the impact of additional required process parameters by leveraging the available tools for &lt;a href="/w/article/3283/addressing-a-production-application-defect#managing-existing-processes"&gt;managing in-flight processes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add new &lt;strong&gt;required&lt;/strong&gt; parameters to receive message events.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cdts_and_entities"&gt;CDTs and Entities&lt;/h2&gt;
&lt;p&gt;In-flight processes will continue to use the old version of the CDT when a CDT is modified by an application deployment or during development.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Verify that new interfaces and new processes launched as a subprocess will work with a null value for the new CDT field as old versions of the CDT will not have a value for that new field when passing a value to subprocesses.&lt;/li&gt;
&lt;li&gt;Verify that absence of a field will not break Web Service Integrations or database integrations.&lt;/li&gt;
&lt;li&gt;Use the function index(...) instead of the dot notation to access the attribute of a CDT&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Delete or rename CDT fields as database writes will break when attempting to write the deleted field to the database.&lt;/li&gt;
&lt;li&gt;Don&amp;#39;t pass a CDT by reference to a sub-process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="expression_rules_and_interfaces"&gt;Expression Rules and Interfaces&lt;/h2&gt;
&lt;p&gt;Process models always run the latest version of a given expression rule or interface. Therefore, it&amp;rsquo;s important that a rule will work with all in-flight versions of the process.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use the keyword syntax when calling a expression rule or interface instead of relying on parameter position.&lt;/li&gt;
&lt;li&gt;Create &lt;a href="https://docs.appian.com/suite/help/latest/Expression_Rules.html#Test_Cases"&gt;test cases&lt;/a&gt; to verify that the expression works for both new and legacy capabilities. This includes calling the expression rule with null values for new parameters.&lt;/li&gt;
&lt;li&gt;Create a new expression rule instead of modifying an existing rule when new process parameters are required.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Change rule parameter order or change rule parameter names.&lt;/li&gt;
&lt;li&gt;Count on processes using named parameters to account for changes to parameter order.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="integrations"&gt;Integrations&lt;/h2&gt;
&lt;p&gt;In-flight processes must be designed to properly integrate with future versions of integrations.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use subprocesses for integrations so processes always use the latest version of an integration process model.&lt;/li&gt;
&lt;li&gt;Design applications with short lived processes so each process always has the latest approach for integrating with an endpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plug-ins"&gt;Plug-ins&lt;/h2&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Create a new version of the smart service with new inputs/outputs and deprecate the old one.&lt;/li&gt;
&lt;li&gt;When deprecating a smart service, update the smart service icon and image to clearly indicate that the version of the smart service should not be used anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t change the plug-in or smart service module key.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t add new required parameters to existing functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, Architecture&lt;/div&gt;
</description></item><item><title>Backward Compatible Design: Planning for Subsequent Deployments</title><link>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments/revision/3</link><pubDate>Tue, 31 Oct 2023 15:31:31 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:55ecd167-9fc1-4d11-824b-a2e4bedba42a</guid><dc:creator>matt.cosenza</dc:creator><comments>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments#comments</comments><description>Revision 3 posted to Article by matt.cosenza on 10/31/2023 3:31:31 PM&lt;br /&gt;
&lt;div&gt;
&lt;p&gt;Changes to an existing application may have an impact on in-flight processes. Process design changes can cause unexpected behavior in production. Following a backward compatible design and running &lt;a href="/w/the-appian-playbook/using-the-appian-health-check"&gt;Health Check&lt;/a&gt; as a part of each sprint will help prevent problematic designs such as passing &lt;a href="/w/the-appian-playbook/appian-health-check#DSGN-0001"&gt;CDTs by reference&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below is a list of design best practices to create a backward compatible design and to facilitate subsequent deployments of an application. Best practices for general application implementation are available in the &lt;a href="/w/the-appian-playbook/209/project-implementation-best-practices-checklist"&gt;Project Implementation Best Practices Checklist&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="process_models"&gt;Process Models&lt;/h2&gt;
&lt;p&gt;Appian loads the latest version of a process model when instantiating a new process. Therefore, when making changes to process models that are also subprocesses, take into account the impact to the existing parent processes.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Account for null parameters in process design when adding new parameters to a process as in-flight processes will not pass values for the newly created parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;required&lt;/strong&gt; process parameters as in-flight processes will break when calling subprocesses with new required process parameters.
&lt;ul&gt;
&lt;li&gt;This precaution is only necessary if there are in-flight processes which call the modified process model.&lt;/li&gt;
&lt;li&gt;Mitigate the impact of additional required process parameters by leveraging the available tools for &lt;a href="/w/article/3283/addressing-a-production-application-defect#managing-existing-processes"&gt;managing in-flight processes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add new &lt;strong&gt;required&lt;/strong&gt; parameters to receive message events.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cdts_and_entities"&gt;CDTs and Entities&lt;/h2&gt;
&lt;p&gt;In-flight processes will continue to use the old version of the CDT when a CDT is modified by an application deployment or during development.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Verify that new interfaces and new processes launched as a subprocess will work with a null value for the new CDT field as old versions of the CDT will not have a value for that new field when passing a value to subprocesses.&lt;/li&gt;
&lt;li&gt;Verify that absence of a field will not break Web Service Integrations or database integrations.&lt;/li&gt;
&lt;li&gt;Use the function index(...) instead of the dot notation to access the attribute of a CDT&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Delete or rename CDT fields as database writes will break when attempting to write the deleted field to the database.&lt;/li&gt;
&lt;li&gt;Don&amp;#39;t pass a CDT by reference to a sub-process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="expression_rules_and_interfaces"&gt;Expression Rules and Interfaces&lt;/h2&gt;
&lt;p&gt;Process models always run the latest version of a given expression rule or interface. Therefore, it&amp;rsquo;s important that a rule will work with all in-flight versions of the process.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use the keyword syntax when calling a expression rule or interface instead of relying on parameter position.&lt;/li&gt;
&lt;li&gt;Create &lt;a href="https://docs.appian.com/suite/help/latest/Expression_Rules.html#Test_Cases"&gt;test cases&lt;/a&gt; to verify that the expression works for both new and legacy capabilities. This includes calling the expression rule with null values for new parameters.&lt;/li&gt;
&lt;li&gt;Create a new expression rule instead of modifying an existing rule when new process parameters are required.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Change rule parameter order or change rule parameter names.&lt;/li&gt;
&lt;li&gt;Count on processes using named parameters to account for changes to parameter order.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="integrations"&gt;Integrations&lt;/h2&gt;
&lt;p&gt;In-flight processes must be designed to properly integrate with future versions of integrations.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use subprocesses for integrations so processes always use the latest version of an integration process model.&lt;/li&gt;
&lt;li&gt;Design applications with short lived processes so each process always has the latest approach for integrating with an endpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plug-ins"&gt;Plug-ins&lt;/h2&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Create a new version of the smart service with new inputs/outputs and deprecate the old one.&lt;/li&gt;
&lt;li&gt;When deprecating a smart service, update the smart service icon and image to clearly indicate that the version of the smart service should not be used anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t change the plug-in or smart service module key.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t add new required parameters to existing functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;

&lt;div style="font-size: 90%;"&gt;Tags: Delivery, Architecture&lt;/div&gt;
</description></item><item><title>Backward Compatible Design: Planning for Subsequent Deployments</title><link>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments/revision/2</link><pubDate>Fri, 20 Oct 2023 14:56:23 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:55ecd167-9fc1-4d11-824b-a2e4bedba42a</guid><dc:creator>matt.cosenza</dc:creator><comments>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments#comments</comments><description>Revision 2 posted to Article by matt.cosenza on 10/20/2023 2:56:23 PM&lt;br /&gt;
&lt;div&gt;
&lt;p&gt;Changes to an existing application may have an impact on in-flight processes. Process design changes can cause unexpected behavior in production. Following a backward compatible design and running &lt;a href="/w/the-appian-playbook/using-the-appian-health-check"&gt;Health Check&lt;/a&gt; as a part of each sprint will help prevent problematic designs such as passing &lt;a href="/w/the-appian-playbook/appian-health-check#DSGN-0001"&gt;CDTs by reference&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Below is a list of design best practices to create a backward compatible design and to facilitate subsequent deployments of an application. Best practices for general application implementation are available in the &lt;a href="/w/the-appian-playbook/209/project-implementation-best-practices-checklist"&gt;Project Implementation Best Practices Checklist&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="process_models"&gt;Process Models&lt;/h2&gt;
&lt;p&gt;Appian loads the latest version of a process model when instantiating a new process. Therefore, when making changes to process models that are also subprocesses, take into account the impact to the existing parent processes.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Account for null parameters in process design when adding new parameters to a process as in-flight processes will not pass values for the newly created parameters.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Add &lt;strong&gt;required&lt;/strong&gt; process parameters as in-flight processes will break when calling subprocesses with new required process parameters.
&lt;ul&gt;
&lt;li&gt;This precaution is only necessary if there are in-flight processes which call the modified process model.&lt;/li&gt;
&lt;li&gt;Mitigate the impact of additional required process parameters by leveraging the available tools for &lt;a href="/w/article/3283/addressing-a-production-application-defect#managing-existing-processes"&gt;managing in-flight processes&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Add new &lt;strong&gt;required&lt;/strong&gt; parameters to receive message events.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="cdts_and_entities"&gt;CDTs and Entities&lt;/h2&gt;
&lt;p&gt;In-flight processes will continue to use the old version of the CDT when a CDT is modified by an application deployment or during development.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Verify that new interfaces and new processes launched as a subprocess will work with a null value for the new CDT field as old versions of the CDT will not have a value for that new field when passing a value to subprocesses.&lt;/li&gt;
&lt;li&gt;Verify that absence of a field will not break Web Service Integrations or database integrations.&lt;/li&gt;
&lt;li&gt;Use the function index(...) instead of the dot notation to access the attribute of a CDT&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Delete or rename CDT fields as database writes will break when attempting to write the deleted field to the database.&lt;/li&gt;
&lt;li&gt;Don&amp;#39;t pass a CDT by reference to a sub-process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="expression_rules_and_interfaces"&gt;Expression Rules and Interfaces&lt;/h2&gt;
&lt;p&gt;Process models always run the latest version of a given expression rule or interface. Therefore, it&amp;rsquo;s important that a rule will work with all in-flight versions of the process.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use the keyword syntax when calling a expression rule or interface instead of relying on parameter position.&lt;/li&gt;
&lt;li&gt;Create &lt;a href="https://docs.appian.com/suite/help/latest/Expression_Rules.html#Test_Cases"&gt;test cases&lt;/a&gt; to verify that the expression works for both new and legacy capabilities. This includes calling the expression rule with null values for new parameters.&lt;/li&gt;
&lt;li&gt;Create a new expression rule instead of modifying an existing rule when new process parameters are required.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Change rule parameter order or change rule parameter names.&lt;/li&gt;
&lt;li&gt;Count on processes using named parameters to account for changes to parameter order.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="integrations"&gt;Integrations&lt;/h2&gt;
&lt;p&gt;In-flight processes must be designed to properly integrate with future versions of integrations.&lt;/p&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Use subprocesses for integrations so processes always use the latest version of an integration process model.&lt;/li&gt;
&lt;li&gt;Design applications with short lived processes so each process always has the latest approach for integrating with an endpoint.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="plug-ins"&gt;Plug-ins&lt;/h2&gt;
&lt;h4 id="do"&gt;Do&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Create a new version of the smart service with new inputs/outputs and deprecate the old one.&lt;/li&gt;
&lt;li&gt;When deprecating a smart service, update the smart service icon and image to clearly indicate that the version of the smart service should not be used anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id="don-t"&gt;Don&amp;rsquo;t&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Don&amp;rsquo;t change the plug-in or smart service module key.&lt;/li&gt;
&lt;li&gt;Don&amp;rsquo;t add new required parameters to existing functions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item><item><title>Backward Compatible Design: Planning for Subsequent Deployments</title><link>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments/revision/1</link><pubDate>Wed, 06 Sep 2023 15:01:35 GMT</pubDate><guid isPermaLink="false">d3a83456-d57b-489c-a84c-4e8267bb592a:55ecd167-9fc1-4d11-824b-a2e4bedba42a</guid><dc:creator>joel.larin</dc:creator><comments>https://community.appian.com/success/w/article/3305/backward-compatible-design-planning-for-subsequent-deployments#comments</comments><description>Revision 1 posted to Article by joel.larin on 9/6/2023 3:01:35 PM&lt;br /&gt;
&lt;p&gt;asdfa&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;
</description></item></channel></rss>