<html>
<head>
<base href="https://wiki.asterisk.org/wiki">
<link rel="stylesheet" href="/wiki/s/en/2176/25/9/_/styles/combined.css?spaceKey=AST&forWysiwyg=true" type="text/css">
</head>
<body style="background: white;" bgcolor="white" class="email-body">
<div id="pageContent">
<div id="notificationFormat">
<div class="wiki-content">
<div class="email">
<h2><a href="https://wiki.asterisk.org/wiki/display/AST/New+Feature+Process">New Feature Process</a></h2>
<h4>Page <b>edited</b> by <a href="https://wiki.asterisk.org/wiki/display/~mjordan">Matt Jordan</a>
</h4>
<br/>
<h4>Changes (10)</h4>
<div id="page-diffs">
<table class="diff" cellpadding="0" cellspacing="0">
<tr><td class="diff-snipped" >...<br></td></tr>
<tr><td class="diff-unchanged" >Some case studies illustrating features that could be considered for inclusion in Asterisk and why or why not they are appropriate are below. <br> <br></td></tr>
<tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{table:title=Case Studies|width=75%} <br></td></tr>
<tr><td class="diff-added-lines" style="background-color: #dfd;">{panel:title=Custom Device State Provider|borderStyle=solid|bgColor=white} <br></td></tr>
<tr><td class="diff-changed-lines" ><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">{tr}</span> <span class="diff-added-words"style="background-color: #dfd;">{section}</span> <br></td></tr>
<tr><td class="diff-changed-lines" ><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">{th:width=50%}Proposal{th}</span> <span class="diff-added-words"style="background-color: #dfd;">{column:width=50%}</span> <br></td></tr>
<tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{th:width=50%}Analysis{th} <br>{tr} <br>{tr} <br>{td}{panel:title=Custom Device State Provider|borderStyle=solid|bgColor=white} <br></td></tr>
<tr><td class="diff-unchanged" >* A new module that intercepts device state from a set of configurable devices and modifies the state that is passed to subscribers <br>* Example: <br>** Alice subscribes to Bob's presence <br>** The module forces Bob to be Not Available during the evenings, but only for Alice. If someone else subscribes to the device state (say, Charlie), they see Bob as his original status at all times. <br></td></tr>
<tr><td class="diff-changed-lines" ><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">{panel}{td}</span> <span class="diff-added-words"style="background-color: #dfd;">{column}</span> <br></td></tr>
<tr><td class="diff-changed-lines" ><span class="diff-deleted-words"style="color:#999;background-color:#fdd;text-decoration:line-through;">{td}</span> <span class="diff-added-words"style="background-color: #dfd;">{column:width=50%}</span> <br></td></tr>
<tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{panel:borderStyle=solid|bgColor=white} <br></td></tr>
<tr><td class="diff-unchanged" >* Very difficult to implement without hard coding business logic into the module itself. Once custom logic is hard coded, its difficult to remove and creates a moving target for development/maintenance. <br>* Because the business logic will almost have to be hard coded in the module, this feature most likely is better served by being provided as a separate module outside of Asterisk itself. <br></td></tr>
<tr><td class="diff-added-lines" style="background-color: #dfd;">{column} <br>{section} <br></td></tr>
<tr><td class="diff-unchanged" >{panel} <br></td></tr>
<tr><td class="diff-deleted-lines" style="color:#999;background-color:#fdd;text-decoration:line-through;">{td} <br>{tr} <br>{table} <br>{panel} <br></td></tr>
<tr><td class="diff-unchanged" > <br>Since this is a subjective discussion, feel free to bring up ideas for new features on the [Asterisk Developer's Mailing List|http://lists.digium.com/mailman/listinfo/asterisk-dev]. <br></td></tr>
<tr><td class="diff-snipped" >...<br></td></tr>
</table>
</div> <h4>Full Content</h4>
<div class="notificationGreySide">
<h1><a name="NewFeatureProcess-Overview"></a>Overview</h1>
<p>At some point in time, you may find yourself asking, "I wish Asterisk did (X)". The great news about Open Source software is that if you really want, you can make Asterisk do (X)! But after making Asterisk do (X), you may find yourself wishing that you didn't have to patch Asterisk every time you need to upgrade a system. At which point, you'll want to have your feature included in the Asterisk source.</p>
<p>This page describes how new features move through the Asterisk development process. For more information on general issue workflows, see <a href="/wiki/display/AST/Issue+Tracker+Workflow" title="Issue Tracker Workflow">Issue Tracker Workflow</a>.</p>
<p>New features are developed against Asterisk <a href="http://svn.asterisk.org/svn/asterisk/trunk/" class="external-link" rel="nofollow">trunk</a>.</p>
<h1><a name="NewFeatureProcess-NewFeaturePlanning"></a>New Feature Planning</h1>
<p>Before writing a new feature for Asterisk, there are multiple things to consider.</p>
<ul>
        <li>Is the feature general purpose enough that it is appropriate for all Asterisk consumers?</li>
        <li>Is the feature appropriate for the next major version release?</li>
        <li>How can I help reviewers of the feature verify its correctness?</li>
        <li>How can I help Asterisk developers maintain the new feature, once its included?</li>
</ul>
<h2><a name="NewFeatureProcess-IsaNewFeatureAppropriate%3F"></a>Is a New Feature Appropriate?</h2>
<p>Whether or not a new feature is general enough to be appropriate for inclusion in Asterisk is a tricky question, because it is inherently subjective. If you're considering adding a new feature to Asterisk, you obviously find it useful! However, not everyone uses Asterisk the same way, and features added to Asterisk should be as generally applicable to everyone as possible.</p>
<p>Some case studies illustrating features that could be considered for inclusion in Asterisk and why or why not they are appropriate are below.</p>
<div class="panel" style="background-color: white;border-style: solid;border-width: 1px;"><div class="panelHeader" style="border-bottom-width: 1px;border-bottom-style: solid;background-color: white;"><b>Custom Device State Provider</b></div><div class="panelContent" style="background-color: white;">
<table class="sectionMacro" border="0" cellpadding="5" cellspacing="0" width="100%"><tbody><tr>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>A new module that intercepts device state from a set of configurable devices and modifies the state that is passed to subscribers</li>
        <li>Example:
        <ul>
                <li>Alice subscribes to Bob's presence</li>
                <li>The module forces Bob to be Not Available during the evenings, but only for Alice. If someone else subscribes to the device state (say, Charlie), they see Bob as his original status at all times.</li>
        </ul>
        </li>
</ul>
</td>
<td class="confluenceTd" valign="top" width="50%">
<ul>
        <li>Very difficult to implement without hard coding business logic into the module itself. Once custom logic is hard coded, its difficult to remove and creates a moving target for development/maintenance.</li>
        <li>Because the business logic will almost have to be hard coded in the module, this feature most likely is better served by being provided as a separate module outside of Asterisk itself.</li>
</ul>
</td></tr></tbody></table>
</div></div>
<p>Since this is a subjective discussion, feel free to bring up ideas for new features on the <a href="http://lists.digium.com/mailman/listinfo/asterisk-dev" class="external-link" rel="nofollow">Asterisk Developer's Mailing List</a>.</p>
<h2><a name="NewFeatureProcess-MajorProjects"></a>Major Projects</h2>
<h1><a name="NewFeatureProcess-NewFeatureDevelopment"></a>New Feature Development</h1>
<h2><a name="NewFeatureProcess-Testing"></a>Testing</h2>
<h2><a name="NewFeatureProcess-Resources"></a>Resources</h2>
<h1><a name="NewFeatureProcess-PeerReview"></a>Peer Review</h1>
<h1><a name="NewFeatureProcess-IncludingtheFeatureinAsterisk"></a>Including the Feature in Asterisk</h1>
<h2><a name="NewFeatureProcess-CommitAccess"></a>Commit Access</h2>
</div>
<div id="commentsSection" class="wiki-content pageSection">
<div style="float: right;" class="grey">
<a href="https://wiki.asterisk.org/wiki/users/removespacenotification.action?spaceKey=AST">Stop watching space</a>
<span style="padding: 0px 5px;">|</span>
<a href="https://wiki.asterisk.org/wiki/users/editmyemailsettings.action">Change email notification preferences</a>
</div>
<a href="https://wiki.asterisk.org/wiki/display/AST/New+Feature+Process">View Online</a>
|
<a href="https://wiki.asterisk.org/wiki/pages/diffpagesbyversion.action?pageId=21464432&revisedVersion=6&originalVersion=5">View Changes</a>
|
<a href="https://wiki.asterisk.org/wiki/display/AST/New+Feature+Process?showComments=true&showCommentArea=true#addcomment">Add Comment</a>
</div>
</div>
</div>
</div>
</div>
</body>
</html>